个人网站怎么建设步骤,成都哪家做网站好,项目网格图,商城网站后台管理系统文章目录前言行锁和表锁使用意向锁意向锁的算法意向锁的思想JDK 中相似的思想前言
之前看 MySQL 都刻意忽略掉了 IS 和 IX 锁#xff0c;今天看 《MySQL 是怎样运行的》#xff0c;把意向锁讲的很通透#xff0c;本篇博文提炼一下思想。
I: Intention Lock#xff08;意向…
文章目录前言行锁和表锁使用意向锁意向锁的算法意向锁的思想JDK 中相似的思想前言
之前看 MySQL 都刻意忽略掉了 IS 和 IX 锁今天看 《MySQL 是怎样运行的》把意向锁讲的很通透本篇博文提炼一下思想。
I: Intention Lock意向锁S: SharedX: Exclusive
行锁和表锁
InnoDB 提供事务能力支持行锁。该引擎在并发读写数据时让DDL语句安全执行一般要4步
确认表中是否有表锁遍历每一行确认表中是否有行锁等待行锁全部释放加表锁
使用意向锁
InnoDB 用意向锁取代普通表锁的用意是
DDL语句执行前避免遍历大量行数据才能确认加锁 EG: 10000 行的表事务A在9500行加了个行锁。事务B执行DDL要加表锁遍历9500次才确认该表有行锁要阻塞等待。 意向锁的算法
想法非常简单每次为表加行锁的时候先加一个表级意向锁。 EG1: 10000 行的表在9500行加了个行级 S 锁前先加一个表级的 IS 锁。释放的时候同时释放 同理加行级 X 锁前先加一个表级 IX 锁。 引入意向锁后让DDL语句安全执行一般需要3步
确认表是否有意向锁等待意向锁释放加表锁
意向锁的思想
把 O(n) 的时间复杂度缩小到 O(1)
JDK 中相似的思想
该链表的size方法不是实时计算的而是每次添加元素都为一个遍历自增。与传统的数据结构O(n)遍历链表不同这个信息量只需要 O(1) 的复杂度
java.util.ArrayList#size