【发布时间】:2016-11-17 17:31:01
【问题描述】:
我们在 Debian 8 上使用 Percona MySQL 5.6 作为电子商务聚合器。为此,有一个主后端服务器执行整个 ETL(处理来自合作伙伴的产品馈送)和一个由前端 Web 服务器使用的从 MySQL 服务器。这是一个单一的产品数据库,大约有 600GB 的数据。
两台机器都有 RAID10 和数据中心系列 SSD。主 MySQL 是具有 128GB RAM 的双 Xeon E5,从属是具有 64GB RAM 的单个 Xeon E5。我们的问题是,ETL 的 I/O 如此繁重(具有数千 IOPS),以至于主服务器能够处理 I/O 负载,但从服务器无法跟上复制的速度。大多数工作都是在 ramdisk 中完成的,并且只有真正必要的数据已经写入数据库。
slave 的读多于写,但是复制跟不上。有哪些选项可用于扩展从属服务器上的复制写入(即 I/O 负载)?
编辑 2016-11-18:通过“选项”,我不仅要求优化 MySQL,而且要求完全其他可以更好地处理这种情况的技术或软件。
【问题讨论】:
-
@Michael 否。并行复制已处于活动状态。但正如我所写的,它是一个单一的数据库,因此并行复制在这种情况下没有效果。
-
我怀疑可能是这种情况。主服务器上的
@@BINLOG_FORMAT和副本上的@@INNODB_FLUSH_LOG_AT_TRX_COMMIT的值是多少,你有没有没有主键的表? -
Binlog格式为
ROW,@@INNODB_FLUSH_LOG_AT_TRX_COMMIT为2。所有表都有主键。 -
嗯,我的“要检查的明显事项”清单差不多到此结束了。 :( 基于此,我希望在slave上问
@@innodb_buffer_pool_size,或者在slave上问@@log_slave_updates是多余的……
标签: mysql io database-replication