关于mysql:InnoDB之锁类型

为什么要有锁?
反对对共享资源进行并发拜访,提供数据的完整性和一致性。


InnoDB个别会在哪些地方用到锁?
InnoDB除了在行级别上对表数据上锁外,还会在缓冲池中的LRU列表应用锁。


为什么要将锁进一步细化?
锁能够应答并发问题,但对于热点数据,还须要将锁细化为读锁与写锁以应答更高的并发。


其它
对于MyISAM引擎,其锁是表锁设置,并发状况下读是没有问题的。所以针对于只读利用,底层可选用MyISAM而非InnoDB以取得更高性能。


InnoDB锁的类型
共享锁:S Lock,容许事务读一行数据。
排他锁:X Lock,容许事务删除或更新一行数据。
意向锁:Intention Lock,容许事务在行级上的锁和表级上的锁同时存在,意向锁将锁定对 象分为多个粒度,意向锁意为着事务心愿在更细粒度上进行加锁。
动向共享锁:IS Lock,事务想要取得一张表中某几行的共享锁。
动向排他锁:IX Lock,事务想要取得一张表中某几行的排他锁。

意向锁应用举例
若将上锁的对象看成一棵树,那么对最上层的对象上锁,也就是对最细粒度的对象上锁,那么首先须要对粗粒度的对象上锁。例如,如果须要对页上的记录R进行上X锁,那么别离须要对数据A,表,页上意向锁IX,最初对记录R上X锁。

InnoDB各种锁的兼容性

IS IX S X
IX 兼容 兼容 兼容 不兼容
IS 兼容 兼容 不兼容 不兼容
S 兼容 不兼容 兼容 不兼容
X 不兼容 不兼容 不兼容 不兼容

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理