MySQL的锁机制及排查锁问题解析!

MySQL的锁机制及排查锁问题解析!

MySQL的锁机制包括行锁和表锁,行锁进一步细分为RecordLock、GapLock和Next-keyLock,行锁因其细粒度而减少冲突但开销大,可能引起死锁,本文介绍MySQL的锁机制及排查锁问题,感兴趣的朋友一起看看吧。

MySQL的锁机制及排查锁问题

  • 按照锁的粒度可以分为行锁和表锁,按照是否可写可以分为读锁和写锁。
  • 行锁是MySQL中粒度最细的锁,对当前操作的行进行加锁。行锁会大大减少数据库操作的冲突,加锁的粒度最小,但是加锁的开销最大,有可能会出现死锁。
  • 行锁的实现算法有Record Lock记录锁、Gap Lock间隙锁和Next-key Lock。记录锁是对单行记录加锁,对索引项加锁,锁定符合条件的行,其他事务不能修改和删除加锁项。间隙锁锁定的是一个范围,不包含记录本身。对索引项之间的间隙加锁,锁定记录的范围,对第一条记录前的间隙或最后一条记录后的间隙加锁,不包含索引项本身。其他事务不能在锁范围内插入数据,这样可以防止其他事务新增幻影行。Next-key Lock是默认的锁,同时锁住数据和间隙锁。锁定索引项本身和索引范围。
  • 表锁是MySQL中粒度最大的锁,对当前正在操作的整张表加锁,资源开销比行锁少,不会出现死锁的情况,但是发生锁冲突的概率比较大。InnoDB默认的是行锁。
  • 读锁也成为共享锁,其他用户可以并发读取数据,但任何事务都不能获取数据上的写锁,直到释放所有的读锁。
  • 写锁也成为排他锁,如果事务T对数据对象A加上写锁,就只允许事务T读取和修改数据对象A。

排查锁的问题

  • 排查锁的问题可以从表锁和行锁考虑。
  • 查看表锁的情况后分析。
1
2
3
4
5
6
7
8
-- 查看所有线程
show full processlist;
-- 查看正在使用的表
show open tables;
-- 查看innodb服务器信息
show engine innodb status;
-- 查看表锁:Table_locks_waited-出现表锁争用而发生的等待次数,Table_locks_immediate-可以立即获取锁的次数
show status like 'table%';

查看行锁的情况

1
2
3
4
5
6
7
8
9
10
-- Innodb_row_lock_current_waits:当前正在等待锁定的数量
-- Innodb_row_lock_time:从系统启动到现在锁定的总时间
-- Innodb_row_lock_time_avg:每次等待所花的平均时间
-- Innodb_row_lock_time_max:从系统启动到现在等待最长的一次所花的时间
-- Innodb_row_lock_waites:从系统启动到现在总共等待的次数
show status like 'innodb_row_lock%';
-- 查看information_schema库
-- innodb_trx表用来显示当前运行innodb事务情况,不能判断锁的情况
-- innodb_locks表可以查看锁的情况
-- innodb_lock_waits表可以查看锁等待的情况

到此这篇关于MySQL的锁机制及排查锁问题的文章就介绍到这了。

 

 

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

Excelbook.cn Excel技巧 SQL技巧 Python 学习!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需129元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>