ToB企服应用市场:ToB评测及商务社交产业平台

标题: MySQL锁(乐观锁、悲观锁、多粒度锁) [打印本页]

作者: 风雨同行    时间: 2022-6-22 13:27
标题: MySQL锁(乐观锁、悲观锁、多粒度锁)


并发事务可能出现的情况:

trx信息: 代表锁结构是哪个事务产生的。
is_waiting:false代表拥有记录的修改权,true表示等待锁资源释放。
​        当第二个事务尝试获得锁,失败也会创建一个锁结构将is_waiting置为true,并填入事务信息,加入记录的锁结构中。

​        当第一个事务提交结束释放锁资源,并会唤醒下一个事务将其等待状态设置为false,让其其获得锁资源。

一致性读

事务利用MVCC进行读取操作可以被称为一致性读、一致性无锁读又或者快照读。一致性读不会产生加锁操作。MVCC我们之前文章都讲过
锁定读

就是我们读写都是用加锁的操作。
学习Java的JUC的时候,对于读写锁就是差不多的。
S锁是可以共享的,即多个事务之间共同获取S锁。但是X锁只能被一个事务拥有,直到事务提交然后才能释放。
不同写操作加锁过程

多粒度锁

上面说的都是行锁,粒度较细,我们还可以加一个粒度较大的锁,表级锁。
但是会出现一种情况,就是表内行加了行级锁,但是我们想对表加表级锁,我们怎么才能知道表内有行级锁呢?不能一条一条遍历吧。
IS锁和IX锁的作用就是为了让我们快速知道,表内行记录中是否有加了锁,是否能加表级锁。
Innodb中的锁

表级锁

在innodb中维护了一个系统变量innodb_autoinc_lock_mode的变量。
当值为0时就是直接采用AUTO_INC锁,不管确不确定。
当值为1时就是采用两种混合的方式,也就是上述的方式。
当值为2时就是一律采用轻量级锁的方式,可能会造成不同事务的自增列产生的值是交叉的,在主从中是不安全的。不是很理解,没有弄过主从。
行级锁


插入意向锁就是JUC的一个非公平的AQS啊,就是他不会阻止别的事务继续获得数据行的其他锁,就是这个插入意向锁可能会一直一直等下去。


来源:https://www.cnblogs.com/duizhangz/p/16347128.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4