目录
一、Mysql行锁总结
- 一、Mysql行锁总结
- 二、Mysql行锁分析
- 三、Mysql优化建议
- 四、页锁的了解
- Innodb存储引擎由于实现了行级锁定,虽然在锁定机制的实现方面所带来的性能损耗可能比表级锁定会要更高一些,但是在整体并发处理能力方面要远远优于MyISAM的表级锁定的。当系统并发量较高的时候,Innodb的整体性能和MyISAM相比就会有比较明显的优势了。
- 但是,Innodb的行级锁定同样也有其脆弱的一面,当我们使用不当的时候,可能会让Innodb的整体性能表现不仅不能比MyISAM高,甚至可能会更差。
1、如何分析Mysql行锁定
#分析行锁定的sql
show status like 'innodb_row_lock%';
2、分析行锁定对各个状态量的说明如下:(红色表示比较重要的参数)
- 注意:当等待次数很高,而且每次等待时长也不小的时候,我们就需要分析系统中为什么会有如此多的等待,然后根据分析结果着手指定优化计划。
3、查询正在被锁阻塞的sql语法。
SELECT * FROM information_schema.INNODB_TRX
- 尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁。
- 尽可能较少检索条件,避免间隙锁
- 尽量控制事务大小,减少锁定资源量和时间长度
- 锁住某行后,尽量不要去调别的行或表,赶紧处理被锁住的行然后释放掉锁。
- 涉及相同表的事务,对于调用表的顺序尽量保持一致。
- 在业务环境允许的情况下,尽可能低级别事务隔离
- 开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
- 开销和加锁时间界于表锁和行锁之间;会出现死锁;
- 锁定粒度界于表锁和行锁之间,并发度一般。