欢迎来到深圳市来科信科技有限公司网站!
您当前的位置:深圳APP开发 > 新闻资讯 > APP开发资讯 >

已阅读

MySQL数据库如何优化主从延时

来源:lexintech.com       发布时间:2019-05-17
MySQL数据库是APP开发常用的数据,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站或中小型APP的开发都选择 MySQL 作为数据库。
MySQL主从复制,读写分离是互联网常见的数据库架构,该架构最令人诟病的地方就是,在数据量较大并发量较大的场景下,主从延时会比较严重。
MySQL使用单线程重放RelayLog
为什么MySQL数据库主从延时这么大呢?因为MySQL使用单线程重放RelayLog。所以,如何缩短重放时间,就是优化主从延时的关键点。一般我们会采用多线程并行重放RelayLog来缩短时间。需要考虑如何分割RelayLog,才能够让多个数据库实例,多个线程并行重放RelayLog,不会出现不一致。

相同库上的写操作,用相同的线程来重放RelayLog;不同库上的写操作,可以并发用多个线程并发来重放RelayLog。设计一个哈希算法,hash(db-name) % thread-num,库名hash之后再模上线程数,就能很轻易做到,同一个库上的写操作,被同一个重放线程串行执行。
 
但是有些公司对MySQL的使用是“单库多表”,如果是这样的话,仍然只有一个库,还是不能提高RelayLog的重放速度。
 
那么,“单库多表”的场景,多线程并行重放RelayLog还能怎么优化呢?
即使只有一个库,事务在主库上也是并发执行的,既然在主库上可以并行执行,在从库上也应该能够并行执行。将主库上同时并行执行的事务,分为一组,编一个号,这些事务在从库上的回放可以并行执行(事务在主库上的执行都进入到prepare阶段,说明事务之间没有冲突,否则就不可能提交),没错,MySQL正是这么做的。
 

APP开发 网站开发 产品设计 微信公众号 APP开发公司 用户体验 APP运营 微信小程序 产品经理 网站设计