针对MyISAM表锁的解决方案
- 作者: 我是隔壁老王他老子
- 来源: 51数据库
- 2020-08-27
|
最近服务器上经常出现mysql进程占CPU100%的情况,使用show processlist命令后,看到出现了很多状态为LOCKED的sql。使用show status like 'table%'检查Table_locks_immediate和Table_locks_waited,发现Table_locks_waited偏大。出问题的表是MyISAM,分析大概是MyISAM的表锁导致。
MyISAM适合于读频率远大于写频率这一情况。而我目前的应用可能会出现在某一时段读写频率相当。大致如下:
也就是说对MyISAM表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;对 MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作;MyISAM表的读操作与写操作之间,以及写操作之间是串行的!
解决方案大概有如下几种:
综合自己的业务需求,使用了方案2。看来需要不断监测服务器状态,再进行更合适的调整。
参考资料: http://hfhwan.javaeye.com/blog/375611 http://www.javaeye.com/topic/211951 http://521dd.blog.sohu.com/106627345.html
|
推荐阅读
