我运行的服务需要能够支持大约4000+IOPS,并保持副本延迟我使用的是aws rds mysql实例,有2个read replica。我的服务在read replica上遇到了巨大的副本延迟峰值,因此我与aws支持部门联系了一个星期,试图了解为什么我遇到了延迟——我提供了6000 IOPS,我的实例非常强大。完全。他们给了我各种各样的理由。
在更改了实例类型之后,从5.5升级到MySQL5.6,以利用多线程技术,它们取代了底层硬件,我仍然随机看到显著的副本延迟。
最后,我决定开始修改参数组,更改我的配置,使其仅用于读取复制过程中发现的任何内容,现在终于遇到了以下是我更改的设置及其值(我复制了默认的MySQL5.6参数组并更改了这些值,将更新的参数组应用于只读副本):
innodb_flush_log_at_trx_commit=0
sync_binlog=0
sync_master_info=0
sync_relay_log=0
sync_relay_log_info=0
请阅读这些内容,了解修改的影响:http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html
其他需要注意的事项:
Convert any MyISAM tables to InnoDB
Upgrade from MySQL < 5.6 to MySQL >= 5.6
Ensure that your provisioned IOPS are > the combined read/write IOPS you require
Ensure that your read replica instances are >= master instance
如果其他人有任何其他参数可以在读取副本或主数据库上进行修改,以获得最佳的复制性能,我希望听到更多信息。
更新日期:2014年7月8日
为了利用MySQL5.6多线程复制,我设置了:
slave_parallel_workers=5 (Set it to the number of read replica DBs you have running)
我在这里找到这个:
https://blogs.oracle.com/MySQL/entry/benchmarking_mysql_replication_with_multi
最佳答案
MySQL复制按顺序执行单个数据库上的所有事务,master-可以并行执行这些事务。
您可能在单个DA上执行了大部分更新,这不允许您利用多线程复制。
检查复制服务器上的iostat
。大多数情况下,这些问题是由于机器上的IO过高而发生的。
为了减少机器上的IO,您可以进行以下几项附加更改:
increaseinnodb_buffer_pool_size
-这是您应该从默认值更改的第一件事。如果这个实例只运行mysql,那么您可以在这里分配大约80%的可用内存。
同时验证以下参数:
log_slave_updates = false
binlog_format = STATEMENT
(如果您配置了混合或行binlog_格式-请确认您理解这里的含义http://dev.mysql.com/doc/refman/5.6/en/binary-log-setting.html
如果你有很多数据被多次修改-增加
innodb_max_dirty_pages_pct
至90%或95%值得检查。关于mysql - AWS RDS MySQL只读副本滞后问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22649411/