1. 缘起
我们所有Mysql的db引擎是MyISAM,在高并发的情况下,表级锁存在很严重的问题。
如下:
2. MySQL表锁情况学习
- mysql> show global status like 'table_locks%';
- +-----------------------+-----------+
- | Variable_name | Value |
- +-----------------------+-----------+
- | Table_locks_immediate | 490206328 |
- | Table_locks_waited | 2084912 |
- +-----------------------+-----------+
Table_locks_immediate表示立即释放MySQL表锁数,Table_locks_waited表示需要等待的MySQL表锁数,如果Table_locks_immediate / Table_locks_waited > 5000,最好采用InnoDB引擎,因为InnoDB是行锁而MyISAM是MySQL表锁,对于高并发写入的应用InnoDB效果会好些。示例中的服务器Table_locks_immediate / Table_locks_waited = 235,MyISAM就足够了。
因此,在数据库选择引擎时需要考虑DB的USE CASE。如果读写操作频繁推荐InnoDB引擎,如果只有读操作或写操作不频繁可以选择MyISAM,就查询而言MyISAM比InnoDB快。