我运行的服务需要能够支持大约4000+ IOPS并保持副本延迟<= 1秒才能正常运行。
我正在使用AWS RDS MySQL实例并拥有2个只读副本。我的服务在阅读副本上遇到了巨大的副本延迟峰值,所以我与AWS支持人员联系了一个星期,试图理解为什么我遇到了延迟 - 我有6000个IOPS配置,我的实例非常强大。他们给了我各种各样的理由。
在更改实例类型后,从5.5升级到MySQL 5.6以利用多线程,并且它们替换了底层硬件,我仍然看到了随机的重复延迟。
最终,我决定开始修改参数组,更改我的配置,只读取复制过程中涉及的任何我可以找到的读取副本,现在终于遇到&lt; = 1秒的副本延迟。
以下是我更改的设置及其值似乎成功的设置(我复制了默认的mysql 5.6 param组并更改了这些值,将更新的参数组应用于只读的副本):
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
如果其他人有任何可以在只读副本或主数据库上修改的其他参数以获得最佳复制性能,我很乐意听到更多。
更新7-8-2014
为了利用我设置的Mysql 5.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
答案 0 :(得分:4)
Mysql复制按顺序执行单个数据库上的所有事务,而master - 可以并行执行这些事务。
您可能在单个DA上执行了大部分更新,这是不允许您利用多线程复制的原因。
检查副本服务器上的iostat
。大多数情况下,由于机器上的IO过高而出现这些问题。
为了减少机器上的IO - 您可以执行以下几项其他更改:
增加innodb_buffer_pool_size
- 这是您应该从默认值更改的第一件事。如果此实例仅运行mysql - 您可以在此处分配大约80%的可用内存。
还要验证以下参数:
log_slave_updates = false
binlog_format = STATEMENT
(如果您已配置MIXED或ROW binlog_format - 请确认您从此处了解这意味着什么http://dev.mysql.com/doc/refman/5.6/en/binary-log-setting.html
如果你有很多数据被多次改变 - 增加
innodb_max_dirty_pages_pct
至90或95%值得检查。