我们在EC2上使用Percona mysql并为HA设置主/从设置。我们观察到,随着我们不断在主数据中写入数据,对从属服务器的复制总是在数小时甚至数天内落后,因为这是我们应用程序的本质。
这里可能有什么问题?
答案 0 :(得分:1)
首先,考虑一下MySQL Replication的组织方式
Slave SQL Thread:它负责读取存储在中继日志中的binlog事件。事件(DML,DDL等)在此内部线程上执行。
Seconds_Behind_Master
:每个binlog事件都有事件的时间戳(DML,DDL等)。 Seconds_Behind_Master
只是Slave服务器的NOW()减去事件的时间戳。 Seconds_Behind_Master
中显示SHOW SLAVE STATUS\G
。
如果Seconds_Behind_Master
不断增加,请考虑以下事项:MySQL Replication的binlog事件的单线程执行路径只不过是并行执行的所有SQL命令的序列化。想象一下:如果在主服务器上并行执行10个UPDATE命令并且每个处理1秒钟进行处理,它们将被置于中继日志中并执行FIFO样式。所有UPDATE都具有相同的时间戳。减去Slave上处理的每个UPDATE的时间戳会使Seconds_Behind_Master
增加1秒。乘以10,您将获得10秒的复制延迟。这将SQL线程视为瓶颈。