数码资讯
MySQL同步问题的从延迟大优化方法
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
一般来说,奴隶比主人延迟比较大,而根本原因是对奴隶的复制线程不能真正做到并发。总之,它是在掌握并行模式(主要是InnoDB引擎),完成事务的提交,而奴隶,有binlog只有一个SQL线程申请,所以难怪奴隶远远落后于主人时,高并发。
Oracle的MySQL 5.6版本开始支持多线程复制和配置选项slave_parallel_workers使多线程并行复制奴隶。然而,它仅能支持多个并发的副本之间的多个数据库在一个实例中,并不能真正做到多台并行复制。因此,在大并发量,奴隶仍无法赶上上主的时间,它需要优化。
另一个重要原因是,传统的MySQL复制是异步(异步),也就是说,当主提交,它将再次施加的奴隶,不是真正意义上的,甚至随后的半同步复制(半同步复制)不是真正的同步,因为它只发送事务的奴隶,但不需要等待,直到确认交易成功提交。因为它是异步的,必须有大量的延迟。因此,严格意义上说,MySQL复制不能称为MySQL同步。处女座的面试官在面试时很可能会忘记MySQL的同步。
此外,在很多人的想法中,奴隶相对来说不那么重要,因此它不会提供与主配置级别相同的服务器。有些服务器甚至使用较差的服务器,但也在其上运行多个实例。
有了这两个主要原因,奴隶要尽快跟上主人,并尝试以下方法:
1。使用MariaDB的分布,它实现了一个相对真实的复制,这比Oracle的MySQL的要好得多。在我的情况下,MariaDB的使用奴隶的实例几乎总是保持着主人的时间。如果你不想使用这个版本,然后等待官方的5.7版本被释放。
为MariaDB并行复制,请参阅复制和二进制日志服务器系统变量# slave_parallel_threads - MariaDB # slave_parallel_threads变量。
2,必须明确指定每个表的主键,如果没有指定主键,将导致行模式,每修改一次全表扫描,尤其是大表是很可怕的,延迟会更严重,甚至导致整个从图书馆飞,参照案例:MySQL主键产生挂图书馆准备不足;
3,应用程序端口做更多的事情,使MySQL端做的工作很少,尤其是IO相关的活动,例如前端是通过内存缓存或本地写队列写入的。
4,适当的池、表策略减少单库单表复制应力,避免单单表由于压力而复制整个事件的延迟;
为了提高IOPS性能等几个方面,根据效果,我做了一个简单的排序:
1,换成SSD或PCIe SSD和其他IO设备,其IOPS能力提高普通15K SAS磁盘容量的100倍,一万倍,甚至上百上千次。
2、增加物理内存,相应增加InnoDB缓冲池的大小,让更多的热数据在内存中,减少物理IO频率;
3、调整XFS或ReiserFS文件系统相比,ext3可以大大提高IOPS的能力。高IOPS的压力下,与EXT4,它具有更强大的IOPS性能。(一些人认为XFS中会有很多特殊的情况,但我们已经失去了问题以外的数据磁盘的剩余空间小于10%)。
4、调整RAID级别RAID 1 + 0,这可以提高性能的IOPS超过RAID1和RAID5。如果他们都是SSD设备,他们可以通过2盘做成RAID 1和RAID 5可以由许多快速磁盘,和全局热备用可以设置提高阵列的容错性。甚至一些本地用户也直接形成多块SSD RAID 50。
5,调整RAID写缓存策略。欲了解更多详情,请参阅:常用PC服务器阵列卡,硬盘健康监测和PC服务器阵列卡管理手册。
6、调整内核的IO调度器,如果SSD优先期限,你可以使用空政策,与默认的CFQ相比,IOPS性能至少几次的情况下。
其他更多的方法,欢迎帮助添加:
Oracle的MySQL 5.6版本开始支持多线程复制和配置选项slave_parallel_workers使多线程并行复制奴隶。然而,它仅能支持多个并发的副本之间的多个数据库在一个实例中,并不能真正做到多台并行复制。因此,在大并发量,奴隶仍无法赶上上主的时间,它需要优化。
另一个重要原因是,传统的MySQL复制是异步(异步),也就是说,当主提交,它将再次施加的奴隶,不是真正意义上的,甚至随后的半同步复制(半同步复制)不是真正的同步,因为它只发送事务的奴隶,但不需要等待,直到确认交易成功提交。因为它是异步的,必须有大量的延迟。因此,严格意义上说,MySQL复制不能称为MySQL同步。处女座的面试官在面试时很可能会忘记MySQL的同步。
此外,在很多人的想法中,奴隶相对来说不那么重要,因此它不会提供与主配置级别相同的服务器。有些服务器甚至使用较差的服务器,但也在其上运行多个实例。
有了这两个主要原因,奴隶要尽快跟上主人,并尝试以下方法:
1。使用MariaDB的分布,它实现了一个相对真实的复制,这比Oracle的MySQL的要好得多。在我的情况下,MariaDB的使用奴隶的实例几乎总是保持着主人的时间。如果你不想使用这个版本,然后等待官方的5.7版本被释放。
为MariaDB并行复制,请参阅复制和二进制日志服务器系统变量# slave_parallel_threads - MariaDB # slave_parallel_threads变量。
2,必须明确指定每个表的主键,如果没有指定主键,将导致行模式,每修改一次全表扫描,尤其是大表是很可怕的,延迟会更严重,甚至导致整个从图书馆飞,参照案例:MySQL主键产生挂图书馆准备不足;
3,应用程序端口做更多的事情,使MySQL端做的工作很少,尤其是IO相关的活动,例如前端是通过内存缓存或本地写队列写入的。
4,适当的池、表策略减少单库单表复制应力,避免单单表由于压力而复制整个事件的延迟;
为了提高IOPS性能等几个方面,根据效果,我做了一个简单的排序:
1,换成SSD或PCIe SSD和其他IO设备,其IOPS能力提高普通15K SAS磁盘容量的100倍,一万倍,甚至上百上千次。
2、增加物理内存,相应增加InnoDB缓冲池的大小,让更多的热数据在内存中,减少物理IO频率;
3、调整XFS或ReiserFS文件系统相比,ext3可以大大提高IOPS的能力。高IOPS的压力下,与EXT4,它具有更强大的IOPS性能。(一些人认为XFS中会有很多特殊的情况,但我们已经失去了问题以外的数据磁盘的剩余空间小于10%)。
4、调整RAID级别RAID 1 + 0,这可以提高性能的IOPS超过RAID1和RAID5。如果他们都是SSD设备,他们可以通过2盘做成RAID 1和RAID 5可以由许多快速磁盘,和全局热备用可以设置提高阵列的容错性。甚至一些本地用户也直接形成多块SSD RAID 50。
5,调整RAID写缓存策略。欲了解更多详情,请参阅:常用PC服务器阵列卡,硬盘健康监测和PC服务器阵列卡管理手册。
6、调整内核的IO调度器,如果SSD优先期限,你可以使用空政策,与默认的CFQ相比,IOPS性能至少几次的情况下。
其他更多的方法,欢迎帮助添加:
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。