关于mysql:InnoDB之锁类型

36次阅读

共计 583 个字符,预计需要花费 2 分钟才能阅读完成。

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


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


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


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


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

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

InnoDB 各种锁的兼容性

ISIXSX
IX兼容兼容兼容不兼容
IS兼容兼容不兼容不兼容
S兼容不兼容兼容不兼容
X不兼容不兼容不兼容不兼容
正文完
 0