【MySQL】行级锁的验证(第一篇)(正常的并发读写)

知识储备那么久,该来点有深度的【原创】了!

深思了一会发现MySQL的行级锁一两篇竟然本渣竟然讲不明白个所以然

所以分多篇讲述:本篇主要说明

正常简单系统并发预估是1K上下的QPS。普通的4C8G独立MySQL数据库,经测试可能承受2K-3K的并发读写,测试中也有很多因素影响,

服务器硬盘是机械或者SSD,linux系统的IO调度算法,最大文件句柄数,Buffer Pool调优,数据库中的表,行溢出......各种因素

最终假设为2K并发上下的样子。

好像.......和行级锁没啥关系?其实是说的是MySQL会出现并发情况,而上面是影响MySQL的并发情况。

而研发一个涉及到MySQL的系统,主要瓶颈都会在数据库上,如果所有操作都是串行那系统根本算得上是无法使用的。

并发情况下:MySQL对同一行操作(都把他们延时了):结果

 

 用时间线:

 

 直接得出结论:

MySQL的更新、插入、删除操作,都会对操作的那一行数据加行级锁(独占锁或叫排他锁)!

而查询,并不会加锁,他是(基于undo log多版本链条+ReadView机制来实现的

所以他们的在更新期间就算加锁了,对查询语句是毫无影响,查询语句查的是("快照"数据)。

代码证明:

https://gitee.com/vince_zww/development-demo/blob/dev/src/main/java/com/example/development/mysqlStudy/lock/LockService.java

上面是核心代码。其他流程代码、单元测试和数据库都在上面的项目中。

所以本篇主要是说:

并发数据库中,正常的更新语句和查询语句完全不会冲突,MySQL的设计大大增加他的查询并发能力!

 


 

题外:上面提到的:undo log多版本链,ReadView机制一时半会说不清,后续会逐步解释透彻

posted @ 2020-08-24 22:13  vince_z  阅读(455)  评论(0编辑  收藏  举报