我正试图理解MySQL 5.5服务器的一个问题。
此服务器承载多个数据库。每天,在特定的时间,一个进程在这个数据库中运行一系列插入到中的表。此过程持续5到15分钟,具体取决于插入的行数。
这个过程运行得很完美。但它有一个意想不到的副作用。所有其他插入和更新在与插入的两个表无关的表上运行,只需静坐等待进程停止。在此数据库之外进行读写操作非常好,SELECT语句也很好。
那么,一个表如何能够阻塞数据库的其余部分,而不是阻止整个服务器(由于加载)?
背景:-
附加信息:
当这种情况发生时,进程列表中没有锁表条目,而插入导致此问题的记录的处理器不会发出任何表锁。
我已经调查了表锁定的常见原因,我认为我已经排除了它们。这种行为要么与MySQL的工作方式有关,要么与拥有大型数据库文件有关,甚至可能与OS/文件系统有关。
发布于 2013-11-26 09:37:37
经过几个星期的尝试,我终于找到了这个:Yoshinori松下博客- MyISAM和磁盘IO调度程序
Yoshinori演示了将调度程序队列更改为100000 (从默认的128个)大大提高了大多数调度程序上MyISAM的吞吐量。
在对我的系统进行此更改后,在运行此进程时,MyISAM表上不再有任何引人注目的数据库挂起实例。随着数据量的增加,预期的数据略有减少,但系统保持稳定。
任何在MyISAM中遇到性能问题的人都应该阅读Yoshinori的博客文章,并考虑这个解决方案。
https://stackoverflow.com/questions/18824657
复制相似问题