版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章并发控制数据库系统原理与内核实现深度解析Contents本章知识图谱第十一章·并发控制——从事务基础到工程实践,系统掌握数据库并发管理的核心理论与关键技术。01并发控制基础与事务回顾02并发异常与可串行化理论03基于锁的并发控制协议04死锁处理与锁粒度管理05高级并发控制机制06隔离级别与工程实践CHAPTER01并发控制基础与事务回顾理解事务的ACID特性与并发操作的本质动机Chapter11·ConcurrencyControl事务的ACID特性与底层支撑事务的ACID特性是数据库可靠性的基石。其中,隔离性直接依赖于并发控制机制来防止多事务交叉执行导致的数据不一致,而原子性、持久性和一致性则通过日志与恢复机制协同保障。ATOMICITY原子性通过UndoLog记录数据修改前的状态,确保事务在发生错误或主动回滚时,能够将数据库完全恢复到事务开始前的初始状态UndoLogCONSISTENCY一致性事务执行的结果必须使数据库从一个一致性状态变到另一个一致性状态,这是所有事务特性共同追求的最终业务目标业务终态ISOLATION隔离性并发执行的多个事务之间必须相互隔离,不能互相干扰,这正是本章"并发控制"模块需要解决的核心技术问题并发控制DURABILITY持久性事务一旦提交,其对数据的改变就是永久性的,即使系统发生崩溃,也能通过RedoLog重放机制保证数据不丢失RedoLogConcurrencyControl为什么必须引入并发控制?纯串行调度虽然能天然保证数据一致性,但会导致系统资源利用率极低、响应延迟极高。并发控制的核心价值在于,在允许多事务交叉执行以提升吞吐量的同时,通过特定协议消除数据异常。01提升系统吞吐量:允许多个事务交叉执行,使得CPU计算与磁盘I/O操作能够重叠进行,避免单一事务等待I/O时整个系统处于停滞状态02降低平均响应延迟:在OLTP场景中,短事务无需等待长事务执行完毕即可获取资源,显著改善了多用户环境下的交互体验和系统并发能力03提高资源利用率:现代多核处理器和RAID磁盘阵列具备强大的并行处理能力,并发调度能够充分榨取硬件性能,避免昂贵计算资源的闲置浪费04平衡安全与性能:并发控制协议的本质是在"绝对安全的串行结果"与"极致性能的并行执行"之间建立桥梁,实现两者的最优折中数据中心服务器机柜—并发控制的硬件基础SchedulingFundamentals调度的定义与基本分类调度是数据库管理系统中多个事务操作的执行时序序列。理解串行调度与并发调度的差异,是后续探讨可串行化理论和设计并发控制协议的逻辑起点。01定义调度Schedule多个并发事务的操作指令在时间轴上的交错执行序列,必须保持每个事务内部操作的原有先后顺序不变。02串行串行调度一个事务的所有操作完全执行完毕后,才开始执行下一个事务。对于N个事务存在N!种合法的串行调度方案。03并发并发调度不同事务的操作指令在时间上交叉重叠执行,能够显著提升硬件利用率,但可能引发数据一致性问题。04准则正确性准则并非所有并发调度都可接受,只有当并发调度的最终结果与某一种串行调度的结果完全相同时,才被认为是正确的。CHAPTER02并发异常与可串行化理论剖析丢失更新、脏读等经典异常,建立可串行化判定模型CONCURRENCYANOMALIES典型并发异常:丢失更新与脏读丢失更新与脏读是并发调度中最基础的数据异常。前者源于并发写操作的相互覆盖,后者源于读取了未提交的中间状态,两者均严重破坏了数据库的一致性约束。LOSTUPDATE丢失更新发生机制两个事务同时读取同一数据项,基于该旧值进行计算后先后写回,导致先写入的更新结果被后写入的操作无情覆盖业务危害在库存扣减、账户转账等高频并发场景中,丢失更新会导致资产凭空蒸发或超卖,造成不可挽回的经济损失并发写覆盖DIRTYREAD脏读发生机制事务B读取了事务A已修改但尚未提交的数据,若事务A随后因故回滚,事务B所依赖的数据基础即为无效的"脏数据"业务危害基于未提交的中间状态做出业务决策(如根据虚假余额发放贷款),一旦源头事务回滚,将导致整个业务链路的数据逻辑崩塌未提交读取CONCURRENCYANOMALIES典型并发异常:不可重复读与幻读不可重复读关注同一数据项被其他事务修改导致的值不一致,幻读关注范围查询时因插入或删除导致的结果集行数变化不可重复读Non-repeatableRead发生机制事务A两次读取同一行数据,期间事务B修改并提交该行,导致事务A两次读取结果不一致防范难点需在整个事务生命周期内锁定已读数据,防止其他事务的并发Update操作UPDATE冲突幻读PhantomRead发生机制事务A按条件范围查询,事务B在范围内插入新行或删除旧行并提交,再次查询出现"幻影行"防范难点行级锁无法锁定"尚未存在"的数据,须引入间隙锁或快照隔离机制才能彻底解决INSERT/DELETEConflictSerializability冲突可串行化的严格定义冲突可串行化是评估并发调度正确性的核心理论标准,通过定义操作间的冲突关系将并发序列映射为等价串行序列,为并发控制协议提供数学基础。01冲突操作的定义两个属于不同事务的操作,至少有一个是写操作,且访问同一数据项,则称这两个操作冲突(如Read-Write,Write-Write)02非冲突操作的交换律两个不冲突的相邻操作(如Read-Read,或访问不同数据项的操作)可安全交换顺序,不改变调度最终结果03冲突等价若一个调度可通过一系列非冲突操作交换转换为另一个调度,则两个调度在逻辑上冲突等价(ConflictEquivalent)04冲突可串行化判定当并发调度与某一串行调度满足冲突等价关系时,该调度即为冲突可串行化的,被认为是绝对安全的SERIALIZABILITY·GRAPHTHEORY前驱图(PrecedenceGraph)判定算法前驱图是判定冲突可串行化的标准图论工具。通过将事务抽象为节点、将冲突依赖抽象为有向边,将复杂的时序判定问题转化为直观的图环检测问题,是数据库内核优化的重要理论依据。01节点构建为调度中涉及的每一个事务创建一个独立的节点,节点集合代表了参与并发执行的所有事务实体T₁T₂…Tₙ02有向边绘制遍历调度序列,若Tᵢ的某操作与Tⱼ的冲突操作在时序上相邻或存在依赖且Tᵢ在前,则添加从Tᵢ指向Tⱼ的有向边Tᵢ→Tⱼ03环路检测机制利用深度优先搜索(DFS)或拓扑排序算法检测图中是否存在有向环,环的存在意味着事务间存在循环等待的矛盾依赖DFS04最终判定结论若前驱图是无环的(DAG),则该调度是冲突可串行化的,拓扑序列即为等价串行调度顺序;若存在环则调度不安全DAG✓ConcurrencyControl视图可串行化与盲写难题视图可串行化提供了比冲突可串行化更宽泛的正确性定义,允许更多类型的并发调度。但由于'盲写'现象的存在,其判定过程属于NP完全问题,导致其在实际数据库内核工程中缺乏实用价值。视图等价三大条件初始读取来源相同、每次读取的数据值来源相同、最终写入数据库的状态完全一致盲写(BlindWrite)现象事务在未读取数据项当前值的情况下直接执行写操作,破坏数据依赖链追踪,使视图等价性判定变得异常困难NP完全问题困境存在盲写时,验证视图可串行化被证明是NP完全问题,随事务数量增加计算时间呈指数级爆炸工程实践的妥协主流商业数据库和开源数据库内核均放弃视图可串行化支持,统一采用冲突可串行化作为默认标准CHAPTER03基于锁的并发控制协议共享锁、排他锁与两阶段锁协议(2PL)的工程实现并发控制·锁机制锁的基本类型:共享锁与排他锁共享锁(S锁)与排他锁(X锁)构成了数据库并发控制的基石。S锁允许多个事务并发读取同一资源,而X锁确保写操作的绝对独占性,两者的合理搭配是平衡读写性能的关键。SHAREDLOCK共享锁(S锁)01获取时机与用途:事务在执行Read操作前向锁管理器申请S锁,允许多个事务同时获取同一数据项的S锁,实现高并发的读读共享02释放规则与限制:持有S锁的事务只能读取数据而不能修改,若要升级为写操作,必须先释放S锁并重新申请X锁,可能引发死锁风险多事务并发读取EXCLUSIVELOCK排他锁(X锁)01获取时机与用途:事务在执行Write/Update/Delete操作前必须申请X锁,确保在修改期间没有任何其他事务能够读取或修改该数据项02独占性与性能瓶颈:X锁与任何其他锁(包括S锁和X锁)都不相容,高并发写入场景下极易造成事务排队等待,成为系统吞吐量的瓶颈事务排队·吞吐瓶颈LOCKCOMPATIBILITY锁相容矩阵与锁管理器架构锁相容矩阵以二维表格的形式精确定义了不同类型锁之间的共存规则。锁管理器通过维护全局锁表和事务等待队列,依据该矩阵实时裁决锁请求的授予或阻塞。基本锁相容矩阵(S/XLockCompatibility)已持有锁\新请求锁请求S锁(读)请求X锁(写)无锁(Free)✅允许(Grant)✅允许(Grant)S锁(Shared)✅允许(Grant)❌阻塞(Wait)X锁(Exclusive)❌阻塞(Wait)❌阻塞(Wait)S锁与S锁相容,支持并发读;X锁与任何锁互斥,保证写操作的绝对独占性。ConcurrencyControl·并发控制两阶段锁协议(Two-PhaseLocking,2PL)两阶段锁协议(2PL)是数据库领域最经典的并发控制算法。它通过强制事务在"锁扩展"和"锁收缩"两个严格分离的阶段内操作,从数学上保证了所有合法调度必然是冲突可串行化的。Phase01扩展期GrowingPhase事务可以不断申请获取新的S锁或X锁,但绝对不允许释放任何已经持有的锁,直到达到事务的"锁定点"。S-Lock/X-LockOnlyPhase02收缩期ShrinkingPhase事务可以逐步释放已持有的锁,但绝对不允许再申请任何新的锁,确保事务的锁定范围只减不增。ReleaseOnlyCriticalPoint锁定点LockPoint事务获取所需最后一把锁的时刻,标志着从扩展期向收缩期的转折,该点决定了事务在等价串行调度中的逻辑位置。TurningPointTheorem充分条件定理Sufficiency数据库理论严格证明,只要所有并发事务都遵守2PL协议,其产生的任何调度都必然是冲突可串行化的,无需额外进行前驱图检测。ConflictSerializabilityChapter11·ConcurrencyControl严格两阶段锁与级联回滚防范基础2PL允许在事务提交前释放锁,极易引发灾难性的级联回滚。严格2PL与强严格2PL通过延迟排他锁和共享锁的释放时机,彻底切断了未提交数据被其他事务读取的路径。级联回滚风险基础2PL允许事务在提交前释放X锁,若其他事务读取了该脏数据,一旦原事务回滚,将导致依赖链上的所有事务被迫回滚。CascadingRollback严格2PL要求事务持有的所有排他锁(X锁)必须在事务成功提交或完全回滚之后才能释放,从根本上杜绝了脏读和级联回滚现象。X锁延迟释放强严格2PL更为严格的工程实现,要求事务持有的所有锁(包括S锁和X锁)都必须保留到事务结束,简化了锁管理器的释放逻辑。S锁+X锁现代数据库默认选择以MySQLInnoDB和PostgreSQL为代表的主流关系型数据库,其底层并发控制模块均默认采用强严格2PL协议作为核心基石。InnoDB/PGConcurrencyControl·Limitations2PL协议的局限性与副作用尽管2PL协议在理论上完美保证了可串行化,但其严格的锁持有规则不可避免地带来了资源利用率下降和死锁风险,这促使数据库内核工程师不断探索更高级的并发控制机制。并发度受限事务在收缩期不能再申请新锁,必须在执行初期就锁定所有可能访问的数据,增加了锁冲突概率和事务等待时间。锁冲突↑死锁的必然伴生多个遵循2PL的事务交叉申请多数据项锁时,极易形成循环等待依赖,死锁成为无法彻底消除的系统级风险。循环等待锁升级开销复杂查询中事务需频繁将S锁升级为X锁,若已有其他事务持有S锁,升级操作将被阻塞,进一步加剧系统延迟。S→X阻塞长事务的灾难扫描全表的大型分析型事务会长期霸占大量锁资源,严重阻塞OLTP短事务的执行,引发系统雪崩。系统雪崩CHAPTER04死锁处理与锁粒度管理破解循环等待困境,构建多粒度锁树与意向锁机制DeadlockConditions数据库死锁的四大必要条件数据库死锁的本质是多个事务在争夺锁资源时形成的循环依赖僵局。理解其产生的四个必要条件,是设计死锁预防策略和检测算法的理论前提。互斥条件排他锁(X锁)的独占特性决定了同一数据项在同一时刻只能被一个事务修改,这是并发控制的基础机制,也是死锁产生的根本原因MUTUALEXCLUSION占有并等待事务在持有部分数据项锁的情况下,继续申请其他数据项的锁,若新锁被其他事务占用,则进入无限期等待状态HOLDANDWAIT非抢占条件事务已获得的锁只能由该事务在操作完成后主动释放,数据库系统不能像操作系统那样强行剥夺进程的资源NOPREEMPTION循环等待存在一个事务等待环路,如T1等待T2持有的锁,T2等待T3持有的锁,T3又等待T1持有的锁,导致所有相关事务永久挂起CIRCULARWAITDeadlockPrevention·Timestamp-Based死锁预防:基于时间戳的抢占策略死锁预防通过破坏循环等待条件来彻底避免死锁的发生。基于时间戳的"等待-死亡"与"伤害-等待"算法,利用事务的年龄作为优先级仲裁依据,以牺牲部分事务为代价换取系统的无死锁运行。等待-死亡(Wait-Die)Non-Preemptive非抢占式策略:当事务Ti请求被Tj持有的锁时,若Ti比Tj老(时间戳更小),则Ti等待;若Ti比Tj年轻,则Ti立即"死亡"(回滚并重启)特点与代价:保证了老事务的执行不被中断,但年轻事务可能会经历多次无谓的回滚重启,浪费CPU和I/O资源Oldwaits·Youngdies伤害-等待(Wound-Wait)Preemptive抢占式策略:当事务Ti请求被Tj持有的锁时,若Ti比Tj老,则Ti"伤害"Tj(强制Tj回滚让出锁);若Ti比Tj年轻,则Ti只能等待特点与代价:大幅减少了不必要的回滚次数,但强制回滚(伤害)操作需要复杂的Undo机制支持,且可能引发被伤害事务的级联重试Oldwounds·YoungwaitsDEADLOCKDETECTION死锁检测:等待图(Wait-forGraph)算法死锁检测策略允许系统进入死锁状态,但通过后台线程周期性构建等待图来识别循环依赖。该策略在保证高并发度的同时,通过及时干预将死锁对业务的损害降至最低。等待图的动态构建系统维护一个有向图,节点为活跃事务;当事务Ti因请求锁而被事务Tj阻塞时,在图中添加一条从Ti指向Tj的有向边。Ti→Tj周期性扫描机制数据库后台守护线程按固定频率(如每秒数次)或当等待队列超过阈值时,触发全图遍历算法进行死锁检测。LockMonitor环路检测算法采用深度优先搜索(DFS)寻找图中的有向环,若发现Ti→Tj→…→Ti的闭合路径,则确认系统已陷入死锁。DFS检测成本与权衡频繁检测会消耗大量CPU资源,降低频率则导致死锁事务长时间挂起,内核需根据负载动态调整检测触发条件。CPUCostDEADLOCKRESOLUTION死锁解除与受害者选择策略死锁解除的核心在于以最小的系统代价打破循环等待。数据库内核通过多维度的代价评估模型,精准选择"受害者"事务进行回滚,从而最大化保留已完成的有效计算工作。COSTMODEL回滚代价评估模型系统综合考量事务已执行的计算时间、已修改的数据行数、已持有的锁数量以及距离提交点的剩余工作量,计算每个事务的"回滚成本"VICTIMSELECTION最小代价受害者选择在构成死锁环路的多个事务中,优先选择回滚成本最低的事务作为"受害者",强制其中断并释放所有持有的锁资源CASCADEPREVENTION级联回滚的防范在选择受害者时,需检查是否有其他事务已读取该受害者未提交的脏数据,若有则必须将这些事务一并纳入回滚集合HUNGERHANDLING饥饿问题处理为防止某个事务反复被选为受害者而永远无法提交,系统引入重试计数器,随重试次数增加动态提升该事务的优先级LOCKGRANULARITY锁粒度(LockGranularity)的权衡锁粒度决定了数据库锁定的数据范围大小。粗粒度锁管理开销小但并发度低,细粒度锁并发度高但内存与CPU消耗大。合理的锁粒度选择是数据库性能调优的关键环节。数据库级锁锁定整个数据库实例,适用于全局DDL操作或数据库备份,但在OLTP场景下会导致所有并发事务被完全阻塞,并发度降至冰点极低并发表级锁(TableLock)锁定整张数据表,管理开销较小,适合全表扫描或批量数据导入,但会阻止其他事务对该表内任何其他行的并发访问低并发页级锁(PageLock)锁定磁盘或内存中的数据页(通常为8KB或16KB),是并发度与系统开销的折中方案,早期Sybase等数据库曾广泛采用8-16KB行级锁(RowLock)精确锁定单条数据记录,提供最高的并发访问能力,是现代OLTP数据库的标配,但需要锁管理器维护庞大的锁表结构,消耗大量内存最高并发Chapter11·ConcurrencyControl意向锁(IntentionLocks)与多粒度树意向锁是多粒度锁树中的高层级元数据锁。它通过自顶向下声明锁定意图,使得系统在判断粗粒度锁冲突时无需遍历底层节点,将冲突检测的时间复杂度从O(N)降至O(1)。包含意向锁的完整相容矩阵已持有\新请求IS意向共享IX意向排他S表级共享X表级排他IS✅✅✅❌IX✅✅❌❌S✅❌✅❌X❌❌❌❌Summary意向锁(IS/IX)之间互相相容,但IX与表级S锁互斥,高效防止了表级读与行级写的冲突。CHAPTER05高级并发控制机制时间戳排序、多版本并发控制(MVCC)与乐观并发控制ConcurrencyControl基于时间戳的排序协议TimestampOrdering时间戳排序协议是一种无锁的悲观并发控制机制。它通过为事务分配全局唯一的时间戳,并强制所有数据访问严格遵守时间戳先后顺序,从而实现无锁状态下的冲突可串行化。01时间戳分配机制事务启动时由系统分配一个全局唯一且单调递增的时间戳TS(T),作为该事务在整个调度序列中的逻辑年龄标识。02数据项的双重标记系统为每个数据项Q维护W-timestamp(Q)与R-timestamp(Q)两个时间戳。03读操作裁决规则若TS(T)<W-ts(Q),说明需读的值已被未来事务覆盖,违背时序,T必须回滚并重启。04写操作裁决规则若TS(T)<R-ts(Q),说明写入值应在过去生效,破坏已发生读取的合法性,T必须回滚。并发控制·时间戳排序Thomas写规则与时间戳协议优化Thomas写规则是对基础时间戳排序协议的重要改良。它通过识别并安全忽略"过时"的写操作,避免了大量不必要的事务回滚,在保持可串行化的前提下显著提升了系统的并发吞吐量。01基础协议的痛点在基础时间戳协议中,若事务T尝试写入数据Q且TS(T)<R-timestamp(Q),T将被无条件回滚,写密集场景中导致极高的重试开销。02Thomas写规则的核心当TS(T)<W-timestamp(Q)时,系统不再强制回滚事务T,而是直接忽略T对Q的写操作——该写入已被更新的写入覆盖,属于无效操作。03可串行化的保证忽略过时写操作不会破坏视图可串行化——被覆盖的中间值从未被后续事务读取,对最终数据库状态无任何实质性影响。04性能提升显著引入Thomas写规则后,调度从冲突可串行化扩展到更宽泛的视图可串行化,大幅降低了写冲突引发的回滚率,并发吞吐量显著提升。ConcurrencyControl多版本并发控制(MVCC)核心原理MVCC通过维护数据的多个历史版本,将"读"与"写"操作在时间维度上彻底解耦。它使得读操作无需加锁即可获取一致性快照,从根本上消除了读写冲突,是现代高并发数据库的基石。数据版本链(VersionChain)01每次更新数据时,系统不覆盖原值,而是将旧值移至UndoLog,并在原数据行生成指向旧版本的隐藏指针,形成一条按时间倒序排列的版本链。这种链式结构使得历史数据得以完整保留。02每个版本都附带创建该版本的事务ID,用于后续判断该版本对当前并发事务的可见性。通过事务ID的比对,系统能够实现精确的数据历史状态追溯与版本选择。ReadView(读视图)机制01事务在执行快照读时生成ReadView,记录当前系统中所有活跃(未提交)事务的ID列表,作为判断数据版本可见性的"时间切片"。这一机制确保了读操作的一致性视图。02通过比对版本链上的事务ID与ReadView中的活跃列表,系统能够精准定位到当前事务有权读取的最新数据版本。整个过程无需加锁,实现了高效的非阻塞一致性读。ImplementationMVCC在主流数据库中的工程实现MVCC的工程落地依赖于底层存储引擎对隐藏列、UndoLog和后台垃圾回收机制的精密配合。不同数据库在版本存储位置和GC策略上的差异,直接决定了其并发性能的天花板。隐藏列设计InnoDB为每行数据自动添加DB_TRX_ID(最近修改事务ID)和DB_ROLL_PTR(回滚指针)隐藏列,以极低的元数据开销支撑起庞大的版本链结构DB_TRX_ID事务标识UndoLog复用InnoDB将历史版本数据存储在集中的UndoLog表空间中,通过回滚指针串联,既支持了MVCC的快照读,又复用了事务回滚所需的底层数据ROLL_PTR回滚指针PostgreSQL元组设计PG直接将新旧版本作为独立的元组(Tuple)存储在数据页中,通过t_xmin和t_xmax标记可见性,读取无需跨页寻址,但易导致表膨胀t_xmin可见性标记后台垃圾回收系统必须周期性扫描并物理删除那些对所有活跃事务及未来快照读均不可见的旧版本,防止版本链无限膨胀导致存储耗尽和查询变慢GC周期性清理CONCURRENCYCONTROL乐观并发控制(OptimisticConcurrencyControl)乐观并发控制(OCC)基于'冲突罕见'的假设,将锁的开销延迟至提交阶段进行集中验证。它在高并发、低冲突的读写场景中展现出极高的吞吐优势,但在高冲突环境下会因频繁重启而性能崩塌。读阶段ReadPhase事务在执行过程中不加任何锁,读取的数据被拷贝到事务的私有工作区,所有写操作也仅在本地副本上进行,对全局数据库不可见。无锁读取验证阶段ValidationPhase事务准备提交时,系统检查该事务读取的数据项是否在其读取后被其他已提交事务修改过,若存在冲突则验证失败。冲突检测写阶段WritePhase若验证通过,事务将本地工作区中的修改批量、原子地写入全局数据库;若验证失败,则放弃所有修改并回滚重启。原子写入适用场景局限OCC非常适合数据仓库查询或缓存更新等低冲突场景,但在高频交易等写冲突密集的环境中,大量的验证失败和事务重启会导致系统资源严重浪费。低冲突场景TransactionIsolationSQL标准的四大隔离级别定义SQL标准通过定义四种隔离级别,为开发者提供了在数据一致性与系统并发度之间进行权衡的标准化接口。隔离级别与并发异常防范矩阵隔离级别脏读不可重复读幻读读未提交ReadUncommitted❌可能发生❌可能发生❌可能发生读已提交ReadCommitted✅绝对避免❌可能发生❌可能发生可重复读RepeatableRead✅绝对避免✅绝对避免❌可能发生串行化Serializable✅绝对避免✅绝对避免✅绝对避免随着隔离级别的提升,系统对并发异常的防范能力增强,但锁竞争加剧,吞吐量随之下降。第十一章并发控制快照隔离(SnapshotIsolation)的崛起快照隔离(SI)是对SQL标准隔离体系的重要补充。它基于MVCC技术提供事务级的一致性快照,在提供接近串行化安全性的同时,保持了极高的并发读写性能,成为现代商业数据库的事实标准。事务级一致性快照事务执行期间,所有读取基于启动时刻的全局快照,彻底消除不可重复读和幻读现象。保证读取一致性视图,不受并发写入影响NoPhantomRead写偏斜异常两事务基于同一快照读取不同数据项,却交叉修改对方依赖数据,导致违背业务约束。SI无法自动检测,需应用层额外处理WriteSkew首次提交者胜并发事务修改同一数据项时,先提交者成功,后提交者检测到写写冲突被强制中止。通过版本链比较实现冲突检测机制FCWStrategy可串行化快照隔离PostgreSQL引入SSI算法,检测危险依赖环,在SI基础上实现真正的可串行化保证。牺牲部分并发度换取严格串行化语义SSIAlgorithm第十一章·并发控制MySQLInnoDB的并发控制最佳实践InnoDB通过巧妙结合MVCC与Next-KeyLock机制,在默认的"可重复读"隔离级别下,既实现了无锁的高效快照读,又通过间隙锁有效遏制了当前读场景下的幻读问题。MVCC支撑快照读在普通的SELECT查询中,InnoDB利用MVCC的ReadView机制读取历史版本,无需加任何锁,保证了极高的并发查询吞吐量。每个事务根据创建ReadView时的系统版本号,判断数据行的可见性,实现读写互不阻塞。READVIEW·LOCK-FREE·高并发当前读机制执行SELECT...FORUPDATE或UPDATE/DELETE语句时,InnoDB放弃快照读,转而对最新的数据版本加锁,确保修改基于最新状态。当前读需要获取锁,与写操作互斥,保证数据一致性。FORUPDATE·加锁读·一致性Next-KeyLock临键锁InnoDB独有的锁算法,是RecordLock(行锁)与GapLock(间隙锁)的结合体,不仅锁定现有记录,还锁定记录前的索引间隙。这种双重锁定策略有效防止了幻读现象的发生。RECORDLOCK+GAPLOCK·双重防护彻底解决幻读通过Next-KeyLock锁住索引范围,InnoDB成功阻止了其他事务在锁定范围内插入新的"幻影行",使得RR级别下的当前读也能避免幻读,实现了真正的可重复读语义。RR级别·PHANTOM-FREE·事务安全INDEXCONCURRENCY索引结构对并发性能的深层影响索引不仅是查询加速的工具,其底层B+树的并发访问控制直接决定了数据库的写入瓶颈。螃蟹协议等高级锁策略通过优化锁的释放时机,有效缓解了索引根节点的热点争用问题。BOTTLENECKB+树的锁热点困境所有读写操作必须从根节点遍历,全路径加锁使根节点成为全局超级瓶颈,严重限制并发写入能力根节点争用PROTOCOL螃蟹协议Crabbing自顶向下遍历时,若子节点未满则安全释放父节点锁,锁持有范围像螃蟹一样横向收缩锁横向收缩LATCH乐观锁与Latch机制内存中B+树节点使用轻量级闩锁替代重量级事务锁,结合CAS原子指令实现无锁化并发读取CAS无锁化RISK索引缺失的灾难未命中索引时退化为全表扫描并锁定所有聚簇索引行,导致整
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年产15000套智慧电子监控装置项目可行性研究报告模板-立项备案
- 建设项目审计协议样本
- 装修施工安全措施培训课件
- 二年级科学高频考点力与运动连线题能力提升卷重难点突破版
- 二年级科学第六知识板块阶段专题物质变化综合解释题方法突破卷能力进阶版
- 2026欧盟REACH法规更新对拉拔油添加剂供应链重构影响分析
- 2026低功耗电池供电PCR仪在野外应急检测中的热管理技术瓶颈报告
- 创新生态同向发力落实产业创新发展行动方案
- 2026事业单位工勤技能-广东-广东有线广播电视机务员四级(中级工)历年参考题库含答案详解
- 2026事业单位工勤技能-山东-山东检验员五级(初级工)历年参考题库含答案详解
- 2026年秋季学期泰山版(新教材)五年级信息科技上册教学计划
- 挑四缝相关知识课件
- 老年人家庭照护服务质量提升措施
- 《时空穿梭》课件
- 2023大学-精密机械设计(庞振基黄其圣著)课后答案
- 消防工程技术标书模板(暗标)
- 高三语文教学计划上学期-高三语文教学计划进度表(14篇)
- 创新思维与方法(第2版)PPT全套完整教学课件
- 数控铣床实训教案-自动编程
- 民航危险品运输培训课件
- 追梦少年强国有我ppt
评论
0/150
提交评论