1)共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。
( Select * from table_name where ......lock in share mode)
2)排他锁:允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和 排他写锁。(select * from table_name where.....for update)
当 web 日志中出现行锁超时错误后,很多开发都会找我来排查问题,这里说下问题定位的难点!1. MySQL 本身不会主动记录行锁等待的相关信息,所以无法有效的进行事后分析。
2. 锁争用原因有多种,很难在事后判断到底是哪一类问题场景,尤其是事后无法复现问题的时候。
3. 找到问题 SQL 后,开发无法有效从代码中挖掘出完整的事务,这也和公司框架-产品-项目的架构有关,需要靠 DBA 事后采集完整的事务 SQL 才可以进行分析。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)