InnoDB锁

InnoDB存储引擎在行级别上实现锁管理,保证并发访问数据的正确性。锁分为锁(lock)和闩锁(latch),其中lock用于事务级别,latch用于保证线程对临界资源的正确操作。InnoDB支持共享锁(S Lock)和排他锁(X Lock),以及意向锁,如意向共享锁(IS Lock)和意向排他锁(IX Lock)。通过一致性非锁定读和一致性锁定读提供不同级别的数据一致性。此外,自增锁在插入时避免阻塞,并通过Next-Key Lock解决幻读问题。InnoDB使用死锁检测和超时机制来处理并发冲突。
摘要由CSDN通过智能技术生成

InnoDB锁

锁是数据库系统区别于文件系统的一个关键特性, 锁机制用于**管理对共享资源的并发访问.**InnoDB存储引擎会在行级别上对表数据上锁, 也会在数据库其他地方使用锁, 从而允许对多种不同资源提供并发访问. 例如, LRU列表, 删除, 添加, 移动LRU列表中的元素, 为了保证一致性, 必须有锁的介入. 数据库系统使用锁是为了支持对共享资源进行并发访问, 提供数据的完整性和一致性

1.lock与latch

  • latch一般称为闩锁(轻量级的锁), 因为其要求锁定的时间非常短. InnoDB中, latch又可以分为mutex(互斥量)和rwlock(读写锁). 其目的是用来保证并发线程操作临界资源的正确性, 并且通常没有死锁检测的机制
  • lock的对象是事务, 用来锁定的是数据库中的对象, 如 表, 页, 行. 并且一般lock的对象仅在事务 commit或rollback后进行释放
lock latch
对象 事务 线程
保护 数据库内容 内存数据结构
持续时间 整个事务过程 临界资源
模式 行锁, 表锁, 意向锁 读写锁, 互斥锁
死锁 通过wait-for graph, time out等机制进行死锁检测和处理 无私所检测与处理,仅通过应用程序加锁的顺序(lock leveling)保证无死锁的情况发生
存在于 Lock Manager的哈希表中 每个数据结构的对象中

2.InnoDB中的锁

1>锁的类型

InnoDB实现了如下两种标准的行级锁

  • 共享锁(S Lock) : 允许事务读一行
  • 排他锁(X Lock) : 允许事务删除或更新一行数据
X S
X 不兼容 不兼容
S 不兼容 兼容

X锁与任何 的锁都不兼容, , 仅S锁和S锁兼容, S锁和X锁都是行锁, 兼容是指对同一记录(row)锁的兼容性情况

此外, InnoDB支持多粒度锁定, 这种锁定允许事务在行级上的锁和标记上的锁同时存在. 为了支持在不同粒度 上进行加锁操作, InnoDB支持一种额外的锁方式, 称为意向锁. 意向锁是将锁定的对象分为 多个层次, 意向锁意味着事务希望在更细粒度上进行加锁

在这里插入图片描述

若将上锁的对象看成一棵树, 那么对最下层的对象上锁, 也就是对最细粒度的对象进行上锁, 那么首先需要对粗粒度的对象上锁.如图, 如果需要给页上的记录r进行上X锁, 那么分别需要对数据库A, 表, 页上意向锁IX, 最后对记录r上X锁. 若其中任何一个部分导致等待, 那么该操作需要等待粗粒度的完成

InnoDB支持意向锁的设计比较简单, 其意向锁即为表级别的锁. 设计目的主要是为了在下一个事务中揭示下一行 将被请求的锁类型. 其中支持两种意向锁 :

  • 意向共享锁(IS Lock), 事务想要获得一张表中某几行的共享锁
  • 意向排他锁(IX Lock), 事务想要获得一张表中某几行的排他锁

由于InnoDB存储

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值