我们的复制主生产服务器之一显示了一些非常奇怪的行为,我似乎无法find解决scheme。
这台服务器上的一些线程卡在'结束'状态。 这种情况纯粹是随机的,但是当发生这种情况时,线程总是在表中更新或插入行。 查询运行的表不同,但始终在MyISAM表上,并且在三个不同的表中。
当一个线程进入最终状态时,所有其他线程都被locking状态。 当我说所有的线程,我的意思是所有的,甚至不查询相同的数据库或表的线程。
Web服务器保持对数据库服务器的排队查询而没有得到响应。 这最终会导致Web服务器用尽套接字。 此时,所有对域名的请求都被拒绝。 数据库服务器在线程处于“结束”状态期间不显示I / O或处理器活动。 发生此问题时,我必须手动杀死线程。 即使这样也没有做任何其他的命令状态更改为“死亡”。 大部分线程在大约100秒后消失。
当线程进入结束状态时,线程正在运行查询的表大小各不相同,但大约在20到100 MB之间。 在发生这些问题的时刻,这些表格经常更新,但不是极端的方式。 我认为更新范围为每秒3到10个。
关于服务器的一些规范。 操作系统是MySQL 5.0.77-log的CentOS 5.4。 该处理器是AMD Opteron 2378,硬盘是海盗船X32 32GB SSD的RAID 1 + 0arrays。
我认为SSD可能是问题原因的一部分,但我找不到任何数据来证实这一点。 驱动器performance相当稳定一段时间。
我已经阅读了关于一般线程状态的MySQL参考手册的文档,其中说在最终状态期间二进制日志和查询caching被更新。 也许这与问题的原因有关? 我不会不知道哪个configuration指令可以给出一个工作的解决scheme。
我还没有尝试禁用查询caching,我无法禁用复制,因为这是一个正在运行的生产服务器。 事实上,这是一个正在运行的生产服务器,使得我更改参数,如查询caching设置时要小心,除非我确定这是要解决问题。
我还没有能够重现我的一些testing脚本的问题。 在读取,写入和更新引起问题的表格时,不会发生问题。 这个问题的发生纯粹是随机的。
进一步调查后,似乎是造成问题的查询caching。 由于一个大的查询cachingMySQL清理caching时似乎会感到困惑。 将查询caching从几GB减less到大约512 MB解决了这个问题。 有关详细信息,请参阅: http : //bugs.mysql.com/bug.php?id=39091