表级锁、行级锁、页面锁

阅读更多

原创转载请注明出处:http://agilestyle.iteye.com/blog/2369740

 

表级锁、行级锁、页面锁

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

 

锁具体实现算法

InnoDB实现了两种类型的锁机制:共享锁(S)和排他锁(X)。共享锁允许⼀个事务读数据,不允许修改数据,如果其他事务要再对该⾏加锁,只能加共享锁;排他锁是修改数据时加的锁,可以读取和修改数据,⼀旦⼀个事务对该⾏数据加锁,其他事务将不能再对该数据加任务锁。 

 

InnoDB既实现了⾏锁,也实现了表锁。⾏锁是通过索引实现的,如果不通过索引条件检索数据,那么InnoDB将对表中所有的记录进⾏加锁,其实就是升级为表锁了。

 

⾏锁的具体实现算法有三种:record lock、gap lock以及next-key lock。record lock是专门对索引项加锁;gap lock是对索引项之间的间隙加锁;next-key lock则是前⾯两种的组合,对索引项以其之间的间隙加锁。

 

只在可重复读或以上隔离级别下的特定操作才会取得gap lock或next-key lock,在Select 、Update和Delete时,除了基于唯⼀索引的查询之外,其他索引查询时都会获取gap lock或next-key lock,即锁住其扫描的范围。

 

Reference

http://www.jb51.net/article/50047.htm

https://www.cnblogs.com/crazylqy/p/7689447.html

你可能感兴趣的:(表级锁、行级锁、页面锁)