Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql从数据库问题_Mysql_Master Slave - Fatal编程技术网

mysql从数据库问题

mysql从数据库问题,mysql,master-slave,Mysql,Master Slave,目前我们有3个从数据库 但几乎总是有一个比其他的慢得多(可能在主数据库之后一个小时) 有没有遇到过类似的问题?原因可能是什么?我猜其他进程与慢速复制副本在同一台主机上运行,占用了大量资源 尝试运行“top”(或使用Nagios或Cactus等)来监视三台复制主机上的系统性能,看看是否有任何趋势可以观察到。CPU利用率由mysqld之外的另一个进程决定,或者I/O不断饱和,诸如此类 更新:阅读MySQL性能专家Peter Zaitsev的以下两篇文章: 作者指出,复制是单线程的,复制副本

目前我们有3个从数据库

但几乎总是有一个比其他的慢得多(可能在主数据库之后一个小时)


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

我猜其他进程与慢速复制副本在同一台主机上运行,占用了大量资源

尝试运行“top”(或使用Nagios或Cactus等)来监视三台复制主机上的系统性能,看看是否有任何趋势可以观察到。CPU利用率由mysqld之外的另一个进程决定,或者I/O不断饱和,诸如此类


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

作者指出,复制是单线程的,复制副本按顺序执行查询,而不是在主机上并行执行查询。因此,如果您有一些长期运行的复制查询,它们可能会“阻塞队列”

他建议,解决办法是简化长期运行的SQL查询,使它们运行得更快。例如:

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

  • 如果将复杂的SELECT语句合并到UPDATE或INSERT查询中,请将SELECT语句分离到自己的语句中,在应用程序代码中生成一组文字值,然后对这些语句运行UPDATE或INSERT。当然,SELECT不会被复制,复制副本只会看到带有文本值的更新/插入

  • 如果正在运行长时间运行的批处理作业,则可能会阻止在复制副本上执行其他更新。您可以在批处理作业中设置一些休眠,甚至可以写入批处理作业,以每隔一段时间检查复制延迟,并在需要时休眠


所有从属服务器是否都位于同一位置?在我的例子中,一个从属服务器位于另一个位置,这是一个网络问题。

不应该是一个网络问题,因为它们轮流变慢。好的,这是零星的,服务器轮流变慢。问题仍然存在:这些服务器上还运行着哪些可能会消耗资源的东西?从数据库本身没有其他运行的东西。有没有一种自动的方法可以做到这一点,比如说,找出原因?可能不是一种自动的方法。但是,有一些方法可以监视和测量复制延迟,也有一些策略可以在考虑复制的情况下重写查询。我已经添加了一些你应该阅读的文章的链接。祝你好运