mysql innodb 死锁问题有什么系统级的解决办法,而非应用程序级

2015-02-27 11:26:43 +08:00
 2dog
大概环境是多台机器并发写一个集中式的mysql,做了分区、索引等必要的操作

现在发现每天每台机器大约有几十次 Lock wait timeout 情况出现

出现的时候,并非mysql性能不佳,而是有的进程sleep时可能没有释放资源导致其他进程 insert/update被迫等待并超时

程序代码里应该是哪里有问题,但一时难以排查的情况下,有什么系统级解决办法?

即通过对mysql进行配置操作后缓解这种状况? 谢谢!
2502 次点击
所在节点    MySQL
4 条回复
SoloCompany
2015-02-27 12:28:37 +08:00
Show processlist
2dog
2015-02-27 12:53:09 +08:00
@SoloCompany 看过了,包括 innodb_locks_wait表,的确是在waiting某个thread id,该thread sleep了半天,kill掉就好。
SoloCompany
2015-02-27 14:19:13 +08:00
你说的 thread wait 应该是 mysql 进程的 thread 吧,如果是这样的话,那应该是 innodb 的 bug 啊,怎么会需要排查程序代码呢,总不成是 trigger 或者 store procedure 能导致这样级别的问题存在吧
2dog
2015-02-27 15:14:14 +08:00
@SoloCompany 是的,就是mysql内的thread id。应该不是innodb的bug,本质上应该是程序写的逻辑有问题,导致插入数据后没有 commit ,转而干别的事情去了,从而影响了其他进程提交。

没用复杂的数据库功能,trigger、存储过程都没用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/173141

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX