mysql slave数据库问题

时间:2009-05-20 14:37:14

标签: mysql master-slave

目前我们有3个奴隶数据库,

但几乎总是有一个比其他人极慢(可能是主数据库后一小时)

有没有人遇到过类似的问题?可能是什么原因?

2 个答案:

答案 0 :(得分:1)

我猜其他一些进程在与慢速从属数据库相同的主机上运行,​​并且它占用资源。

尝试运行“top”(或使用Nagios或Cactus或其他东西)来监控三个从属数据库主机上的系统性能,看看是否有任何可以观察到的趋势。除了mysqld之外,其他进程所占用的CPU利用率,或I / O不断饱和,就是这样。


更新:阅读MySQL性能专家Peter Zaitsev的以下两篇文章:

作者指出复制从属是单线程的,并且从属按顺序执行查询,而不是在主服务器上执行时并行执行查询。因此,如果您有一些长时间运行的复制查询,它们可以“阻止队列。”

他建议补救措施是简化长时间运行的SQL查询,以便它们更快地运行。例如:

  • 如果您有一个影响数百万行的UPDATE,请将其分解为多个UPDATE,这些UPDATE作用于行的子集。

  • 如果在UPDATE或INSERT查询中包含复杂的SELECT语句,请将SELECT分隔为自己的语句,在应用程序代码中生成一组文字值,然后对这些语句运行UPDATE或INSERT。当然SELECT不会被复制,slave只会看到带有文字值的UPDATE / INSERT。

  • 如果您正在运行长时间运行的批处理作业,则可能阻止其他更新在从属服务器上执行。您可以将一些睡眠放入批处理作业,或者甚至编写批处理作业以定期检查复制延迟并在需要时休眠。

答案 1 :(得分:0)

所有从属服务器都位于同一位置吗?就我而言,其中一个从属服务器位于另一个位置,这是一个网络问题。