1. MySQL数据库主从同步延迟原理?
2. MySQL数据库主从同步延迟是怎么产生的?
3. MySQL数据库主从同步延迟解决方案?
---------------------------------------------------------------------------------------------------
1. MySQL数据库主从同步延迟原理
答:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主库对所有DDL(数据库定义语言)和DML(数据库操作语言)产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日志,效率很比较高,下一步,问题来了,slave的Slave_SQL_Running线程将主库的DDL和DML操作在slave实施。DML和DDL的IO操作是随即的,不是顺序的,成本高很多,还可能可slave上的其他查询产生lock争用,由于Slave_SQL_Running也是单线程的,所以一个DDL卡主了,需要执行10分钟,那么所有之后的DDL会等待这个DDL执行完才会继续执行,这就导致了延时。有朋友会问:“主库上那个相同的DDL也需要执行10分,为什么slave会延时?”,答案是master可以并发,Slave_SQL_Running线程却不可以。
2. MySQL数据库主从同步延迟是怎么产生的。
答:当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,那么延时就产生了,当然还有就是可能与slave的大型query语句产生了锁等待。
3. MySQL数据库主从同步延迟解决方案。
问题一:主库的从库太多,导致复制延迟
从库数据以3-5个为宜,要复制的从节点数量过多,会导致复制延迟
问题二:从库硬件比主库差,导致复制延迟
查看Master和Slave的系统配置,可能会因为机器配置不当,包括磁盘I/O、CPU、内存等各方面因素造成复制的延迟。一般发生在高并发大数据量写入场景中
问题三:慢SQL语句过多
假如一条SQL语句执行时间是20秒,那么从执行完毕到从库上能查到数据至少需要20秒,这样就延迟20秒了。
一般要把SQL语句的优化作为常规工作不断地进行监控和优化,如果单个SQL的写入时间长,可以修改后分多次写入。通过查看慢查询日志或show full processlist命令,找出执行时间长的查询语句或大的事务
问题四:主从复制的设计问题
例如主从复制单线程,如果主库写并发太大,来不及传送到从库,就会导致延迟。更高版本的Mysql可以支持多线程复制,门户网站则会开发自己的多线程同步功能。
问题五:主从库之间的网络延迟
主从库的网卡、网线、交换机等网络设备都可能成为复制的瓶颈,导致复制延迟。另外,跨公网的主从复制很容易导致主从复制延迟
问题六:主库读写压力大,导致复制延迟
架构的前端要加buffer及缓存层
门户网站的解决方案:
优酷的解决方案:数据库分片技术,而抛弃了由于数据量的越来越多导致复制延迟的问题。按照user_id进行分片,这样必须有一个全局的表来管理用户与shard的关系,根据user_id可以得到share_id,然后根据share_id去指定的分片查询指定的数据
淘宝的解决方案:修改源码,对应的机制是Transfer机制,此处通过对Binlog日志重做采用多线程实现,从而提高slave的QPS
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。