还剩58页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
事务处理锁-欢迎来到关于事务处理和锁的课程本次课程旨在深入探讨事务的概念、特性、并发控制以及锁在数据库管理系统中的作用通过本课程的学习ACID,你将掌握如何通过锁机制来保证数据的一致性和完整性,以及如何解决并发操作可能引发的问题让我们一起开始这段探索之旅,解锁数据管理的关键技术!课程目标理解事务基本概念掌握锁机制解决并发问题掌握事务的定义、作用理解锁的种类、粒度以学习如何预防和解决并以及在数据库管理中的及实现机制,能够运用发操作可能导致的数据核心地位,为后续深入锁解决并发问题不一致性问题,提高数学习打下基础据管理的安全性实践应用了解不同数据库管理系统中锁的实现和应用,提升实际问题解决能力事务的概念什么是事务?事务的作用事务的开始与结束事务是数据库管理系统执行过程中的一事务保证了数据库中数据的一致性和完一个事务通常由显式的开始语句(如个操作序列,被视为一个不可分割的逻整性通过事务,可以将多个操作捆绑)或隐式的开始BEGIN TRANSACTION辑工作单元要么完全执行,要么完全在一起,确保这些操作要么全部成功,条件触发事务的结束由提交(不执行例如,银行转账是一个事务,要么全部失败这避免了因部分操作失)或回滚()语句COMMIT ROLLBACK包括从一个账户扣款和向另一个账户存败而导致的数据不一致状态显式地表示提交表示事务成功完成,款两个操作回滚表示事务失败,需要撤销所有已执行的操作事务的特性ACID原子性1Atomicity事务中的所有操作要么全部完成,要么全部不完成,不允许出现部分完成的情况一致性2Consistency事务必须保证数据库从一个一致性状态转换到另一个一致性状态隔离性3Isolation多个并发事务之间相互隔离,一个事务的执行不应影响其他事务持久性4Durability一旦事务提交,其结果将永久保存在数据库中,即使发生系统故障也不会丢失原子性Atomicity定义实现方式示例原子性是指事务是一个不可分割的工作原子性通常通过事务日志(假设一个银行转账事务,包括从账户扣Transaction A单元,事务中的操作要么全部发生,要)来实现事务日志记录了事务开始款和向账户存款两个操作如果从账Log BA么全部不发生如果事务执行过程中发后所有操作的变化当事务需要回滚时户扣款成功,但向账户存款失败,原子B生错误,系统会将事务回滚到最初状态,系统会使用事务日志中的信息撤销已性保证系统会撤销从账户扣款的操作,A,就像事务从未发生过一样经执行的操作,恢复数据到事务开始前确保账户的资金不丢失A的状态一致性Consistency定义保证手段一致性是指事务必须保证数据库一致性通常通过应用各种约束和从一个一致性状态转换到另一个规则来实现,例如主键约束、外一致性状态一致性状态是指数键约束、唯一性约束、数据类型据库中的数据满足所有预定义的约束等此外,应用程序逻辑也规则、约束和完整性条件需要保证数据的一致性示例假设一个银行数据库,其中要求所有账户余额的总和必须保持不变如果一个事务从一个账户转账到另一个账户,一致性要求转账前后所有账户余额的总和必须保持不变如果转账导致总和发生变化,事务将被回滚隔离性Isolation定义隔离性是指多个并发事务之间相互隔离,一个事务的执行不应影响其他事务每个事务都应该感觉好像它是系统中唯一运行的事务隔离级别隔离性通过不同的隔离级别来实现,常见的隔离级别包括读未提交()、读已提交()、可重Read UncommittedRead Committed复读()和串行化()隔离级别Repeatable ReadSerializable越高,并发性能越低示例假设两个事务同时尝试修改同一个账户的余额隔离性保证一个事务在读取账户余额时,不会看到另一个事务尚未提交的修改这避免了因并发修改导致的数据不一致问题持久性Durability实现方式持久性通常通过将事务日志写入持久存储设备(如硬盘)来实现在事务提交之前,所有修改都会先写入事务日志2定义一旦事务提交,系统会确保日志已经写入磁盘,然后才认为事务已经完成持久性是指一旦事务提交,其结果将永1久保存在数据库中,即使发生系统故障示例也不会丢失这意味着提交后的数据必须能够经受住各种意外情况的考验假设一个在线购物事务,用户成功下单并支付持久性保证即使在订单提交后发生服务器崩溃,订单信息也不会丢失3系统重启后,可以从事务日志中恢复订单信息,确保用户的订单得到处理并发控制的必要性并发的定义并发控制的意义并发控制的目标并发是指多个事务在同一时间段内同时并发控制是指数据库管理系统管理多个并发控制的主要目标是保证并发事务的执行在多用户数据库系统中,并发是并发事务的机制,旨在保证事务的隔离特性,特别是隔离性和一致性通ACID常见的现象为了提高系统的吞吐量和性和数据的一致性如果没有并发控制过并发控制,可以避免并发事务之间的响应速度,数据库管理系统通常允许多,并发事务可能会相互干扰,导致数据数据冲突,确保每个事务都能正确地完个事务并发执行不一致,影响系统的正确性成,并保持数据库的一致状态并发可能导致的问题丢失更新Lost Update两个事务同时读取同一数据,然后各自修改并提交,导致后提交的事务覆盖了前一个事务的修改脏读Dirty Read一个事务读取了另一个事务尚未提交的数据,如果后一个事务回滚,则前一个事务读取的数据无效不可重复读Non-Repeatable Read一个事务多次读取同一数据,但在两次读取之间,数据被另一个事务修改并提交,导致两次读取的结果不一致幻读Phantom Read一个事务多次执行同一查询,但在两次查询之间,另一个事务插入或删除了满足查询条件的数据,导致两次查询的结果集不同丢失更新Lost Update问题描述示例解决方法丢失更新是指两个或多个事务读取同一假设账户余额为元,事务和可以使用锁机制来避免丢失更新例如A100T1T2数据,然后根据读取的值进行修改,最同时读取账户余额将余额增加,事务在读取数据时获取排他锁,确保A T150后提交如果多个事务的修改基于相同元,将余额减少元如果先提交在事务提交之前,其他事务无法修改该T230T1的初始值,则后提交的事务会覆盖前一,然后提交,则账户余额变为元数据另一种方法是使用乐观锁,通过T2A70个事务的修改,导致前一个事务的更新,的增加操作丢失版本号或时间戳来检测并发修改T1丢失脏读Dirty Read问题描述脏读是指一个事务读取了另一个事务尚未提交的数据如果后一个事务回滚,则前一个事务读取的数据是无效的,被称为脏数据“”示例事务修改账户余额为元,但尚未提交事务读取账户余T1A150T2A额,看到元如果回滚,则账户余额恢复为元读取150T1A100T2的元是脏数据150解决方法可以通过提高事务的隔离级别来避免脏读在读已提交(Read)隔离级别下,事务只能读取已经提交的数据这意味Committed着事务不会读取到其他事务尚未提交的修改不可重复读Non-RepeatableRead问题描述1不可重复读是指一个事务多次读取同一数据,但在两次读取之间,数据被另一个事务修改并提交,导致两次读取的结果不一致示例2事务第一次读取账户余额为元事务修改账户余额为元T1A100T2A150并提交事务第二次读取账户余额,看到元在同一个事务中T1A150T1两次读取账户,结果不一致A解决方法3可以通过提高事务的隔离级别来避免不可重复读在可重复读()隔离级别下,事务在整个事务过程中多次读取同一Repeatable Read数据,结果保持一致这意味着事务不会读取到其他事务的修改幻读Phantom Read问题描述1幻读是指一个事务多次执行同一查询,但在两次查询之间,另一个事务插入或删除了满足查询条件的数据,导致两次查询的结果集不同示例事务第一次查询满足条件的用户数量为个事务插入了个满足条件的新用户并T1X10T25X2提交事务第二次查询满足条件的用户数量,看到个在同一个事务中两次查询T1X15T1,结果集不同解决方法可以通过提高事务的隔离级别来避免幻读在串行化
(3)隔离级别下,事务完全隔离,不会出现幻读现象Serializable另一种方法是使用范围锁,锁定满足查询条件的范围,防止其他事务插入或删除数据锁的概念和作用锁的定义锁的作用锁的分类锁是数据库管理系统中用于控制并发访锁的主要作用是保证事务的隔离性和一锁可以分为多种类型,包括排他锁(问的机制通过锁,可以确保在同一时致性通过锁,可以防止丢失更新、脏)和共享锁(Exclusive LockShared间只有一个事务可以访问特定的数据资读、不可重复读和幻读等并发问题锁)排他锁用于独占访问,共享锁Lock源,从而避免并发操作导致的数据不一可以应用于不同的数据粒度,如表、行允许多个事务同时读取数据此外,锁致问题和页还可以分为悲观锁和乐观锁,用于不同的并发控制策略锁的种类排他锁ExclusiveLock定义排他锁(也称为写锁)是一种独占锁,它确保在同一时间只有一个事务可以对数据进行写操作当一个事务持有排他锁时,其他任何事务都无法对该数据进行读取或写入操作作用排他锁主要用于保护数据的完整性,防止多个事务同时修改同一数据导致的数据冲突通过排他锁,可以保证在事务修改数据期间,其他事务无法干扰,从而避免丢失更新等问题示例在银行转账事务中,当事务需要修改账户余额时,会先获取该账户的排他锁这样,在事务提交之前,其他任何事务都无法修改该账户余额,确保转账操作的正确性锁的种类共享锁Shared Lock作用共享锁主要用于提高并发读取的性能允许多个事务同时读取数据,避免了因2读取操作而导致的阻塞然而,共享锁定义不能防止写操作,因此需要与其他锁机制配合使用共享锁(也称为读锁)允许多个事务同1时读取同一数据当一个事务持有共享示例锁时,其他事务也可以获取该数据的共享锁,但不能获取排他锁在查询账户余额的事务中,事务可以获取该账户的共享锁这样,其他事务也3可以同时读取该账户余额,而无需等待但是,如果事务需要修改账户余额,则需要获取排他锁锁的粒度表级锁Table-Level Lock定义特点适用场景表级锁是指对整个表加锁当一个事务表级锁的优点是实现简单,开销小缺表级锁适用于对整个表进行批量操作的获取了表的锁时,其他事务无法对该表点是并发度低,容易导致阻塞,影响系场景,如数据导入、数据备份等在这进行任何操作,包括读取和写入统的性能些场景下,并发访问较少,使用表级锁可以简化锁管理锁的粒度行级锁Row-Level Lock定义行级锁是指对表中的特定行加锁当一个事务获取了行的锁时,其他事务无法对该行进行修改,但可以读取其他行不受影响特点行级锁的优点是并发度高,可以允许多个事务同时访问不同的行缺点是实现复杂,开销大,需要更多的锁管理适用场景行级锁适用于并发访问频繁的场景,如在线交易、用户账户管理等在这些场景下,需要保证高并发性能,使用行级锁可以最大限度地减少锁冲突锁的粒度页级锁Page-LevelLock定义1页级锁是指对数据页加锁数据页是数据库存储数据的基本单位,通常包含多行数据当一个事务获取了页的锁时,其他事务无法对该页中的任何数据进行修改特点2页级锁的并发度介于表级锁和行级锁之间实现复杂度和开销也适中页级锁在一定程度上兼顾了并发性能和锁管理开销适用场景3页级锁适用于数据访问模式具有局部性的场景如果事务经常访问同一页中的数据,使用页级锁可以减少锁冲突,提高性能例如,某些类型的报表查询可能适合使用页级锁锁的实现机制锁表锁表的定义实现方式锁表是一种用于记录锁信息的特当事务需要获取锁时,系统会在殊表每个锁表项包含锁定的数锁表中查找是否已经存在冲突的据资源、锁的类型、持有锁的事锁如果没有冲突,系统会在锁务等信息表中插入一个新的锁表项,表示事务成功获取锁当事务释放锁时,系统会从锁表中删除对应的锁表项优点与缺点锁表的优点是实现简单,易于理解缺点是锁表本身可能成为并发瓶颈,影响系统的性能此外,锁表需要额外的存储空间锁的实现机制锁管理器锁管理器的定义实现方式优点与缺点锁管理器是数据库管理系统中负责管理锁管理器通常使用高效的数据结构(如锁管理器的优点是性能高,可扩展性强锁的组件锁管理器维护锁的数据结构哈希表、树等)来存储锁信息锁管理,能够支持复杂的锁管理策略缺点是,处理锁的请求和释放,以及检测死锁器还提供,供事务请求和释放锁锁实现复杂,需要专业的开发和维护API等问题管理器还需要实现死锁检测和恢复机制两段锁协议Two-PhaseLocking,2PL定义两段锁协议是一种并发控制协议,要求每个事务必须分为两个阶段增长阶段和收缩阶段增长阶段在增长阶段,事务可以获取锁,但不能释放锁事务只能不断地获取所需的锁,直到完成所有操作收缩阶段在收缩阶段,事务可以释放锁,但不能获取锁事务只能不断地释放已经获取的锁,直到释放所有锁增长阶段2PL:等待锁如果锁已经被其他事务持有,事务进入2等待状态,直到锁被释放事务会一直获取锁等待,直到成功获取所需的锁事务开始后,需要访问数据时,首先尝1试获取相应的锁如果锁可用,事务成不能释放锁功获取锁,并继续执行后续操作在增长阶段,事务只能获取锁,不能释放已经获取的锁这保证了事务在完成3所有操作之前,不会释放任何锁,从而避免了数据不一致问题收缩阶段2PL:释放锁1事务完成所有操作后,开始释放已经获取的锁事务会逐个释放锁,直到释放所有锁不能获取锁2在收缩阶段,事务只能释放锁,不能获取新的锁这保证了事务在释放锁之后,不会再次访问数据,从而避免了与其他事务的冲突事务结束3当事务释放所有锁后,事务结束此时,事务对数据库的修改已经完成,可以安全地提交严格2PL StrictTwo-Phase Locking定义优点缺点严格两段锁协议是两段锁协议的增强版严格两段锁协议可以避免脏读和不可重严格两段锁协议的并发度较低由于事本要求事务必须在提交或回滚之后才复读问题由于事务在提交之前一直持务需要持有锁直到提交或回滚,其他事能释放所有锁有锁,其他事务无法读取未提交的数据务需要等待更长的时间才能访问数据,,从而保证了数据的一致性可能导致阻塞和性能下降强2PL StrongTwo-PhaseLocking定义强两段锁协议是严格两段锁协议的增强版本要求事务不仅在提交或回滚之后才能释放所有锁,而且必须持有写锁直到事务结束优点强两段锁协议可以避免幻读问题由于事务持有写锁直到结束,其他事务无法插入或删除满足查询条件的数据,从而保证了查询结果的一致性缺点强两段锁协议的并发度最低由于事务需要持有写锁直到结束,其他事务需要等待更长的时间才能访问数据,可能导致严重的阻塞和性能问题死锁的概念Deadlock示例事务持有资源的锁,并等待资源的T1A B2定义锁事务T2持有B资源的锁,并等待A资源的锁和互相等待,形成死锁T1T2死锁是指两个或多个事务互相等待对方1释放锁,导致所有事务都无法继续执行的状态死锁是一种常见的并发问题,可能导致系统性能下降甚至崩溃死锁的影响死锁会导致事务无法完成,占用系统资3源,影响其他事务的执行如果死锁无法解决,可能导致系统崩溃死锁产生的条件互斥条件Mutual Exclusion至少有一个资源必须处于独占模式,即一次只能被一个事务持有请求与保持条件Hold andWait事务在持有至少一个资源的情况下,又请求新的资源不可剥夺条件No Preemption资源不能被强制从事务中剥夺,只能由事务自愿释放循环等待条件Circular Wait存在一个事务集合,其中每个事务都在等待下一个事务释放资源,形成一个环路互斥条件Mutual Exclusion定义必要性示例互斥条件是指至少有一个资源必须处于互斥条件是死锁产生的必要条件之一数据库中的行锁就是一种互斥资源当独占模式,即一次只能被一个事务持有如果没有互斥条件,多个事务可以同时一个事务获取了某行的排他锁时,其他如果多个事务同时请求同一资源,只访问同一资源,就不会出现因资源竞争事务无法修改该行,必须等待锁释放有一个事务能够成功获取锁,其他事务而导致的死锁必须等待请求与保持条件Hold andWait定义请求与保持条件是指事务在持有至少一个资源的情况下,又请求新的资源这意味着事务不会释放已经获取的资源,直到获取了所有需要的资源必要性请求与保持条件是死锁产生的必要条件之一如果事务在请求新资源之前释放已经持有的资源,就可以避免因资源占用而导致的死锁示例事务持有资源的锁,并请求资源的锁在获取资源的锁之前,T1A BT1B不会释放资源的锁,这就满足了请求与保持条件T1A不可剥夺条件No Preemption定义1不可剥夺条件是指资源不能被强制从事务中剥夺,只能由事务自愿释放这意味着即使其他事务需要该资源,也必须等待持有资源的事务主动释放必要性2不可剥夺条件是死锁产生的必要条件之一如果资源可以被强制剥夺,就可以打破循环等待,避免死锁的发生示例3在数据库中,通常情况下,事务获取的锁不能被强制剥夺事务必须主动提交或回滚,才能释放锁循环等待条件Circular Wait定义1循环等待条件是指存在一个事务集合,其中每个事务都在等待下一个事务释放资源,形成一个环路例如,事务等待释放资源,等待释放资源,等待释放资源T1T2T2T3T3T1必要性2循环等待条件是死锁产生的必要条件之一如果不存在循环等待,即使满足其他三个条件,也不会发生死锁示例事务持有资源的锁,并等待资源的锁事务持有资T1A BT2B3源的锁,并等待资源的锁和形成循环等待,导致死锁A T1T2死锁检测死锁检测的定义死锁检测的方法等待图法死锁检测是指数据库管理系统定期或实常见的死锁检测方法包括等待图法和超等待图法是一种常用的死锁检测方法时地检测系统中是否存在死锁如果检时法等待图法通过构建事务等待资源系统维护一个事务等待资源的关系图测到死锁,系统需要采取措施来解除死的关系图来检测是否存在循环等待超如果图中存在环路,则表示存在死锁锁,保证系统的正常运行时法通过设置锁的超时时间,如果事务持有锁的时间超过超时时间,系统会自动释放锁,从而解除死锁死锁恢复终止进程终止进程的定义终止进程是一种死锁恢复方法,通过终止一个或多个参与死锁的事务,释放其持有的资源,从而解除死锁选择终止进程的策略选择终止进程的策略需要考虑多个因素,包括事务的优先级、事务的执行时间、事务占用的资源等通常选择终止代价最小的事务终止进程的缺点终止进程可能导致事务丢失已经完成的工作,需要重新执行这会增加系统的开销,降低系统的性能死锁恢复回滚事务选择回滚事务的策略选择回滚事务的策略与选择终止进程的策略类似,需要考虑多个因素,包括事2务的优先级、事务的执行时间、事务占回滚事务的定义用的资源等通常选择回滚代价最小的回滚事务是一种死锁恢复方法,通过回1事务滚一个或多个参与死锁的事务,撤销其已经执行的操作,释放其持有的资源,回滚事务的缺点从而解除死锁回滚事务可能导致事务丢失已经完成的工作,需要重新执行这会增加系统的3开销,降低系统的性能与终止进程相比,回滚事务可以保证数据的一致性死锁预防策略一次封锁法资源排序法超时机制One-Time ResourceTimeoutLocking OrderingMechanism要求事务在开始执行之前,一次性获对所有资源进行排序,事务必须按照为每个锁设置超时时间如果事务持取所有需要的锁如果没有获取所有顺序获取锁如果需要获取多个锁,有锁的时间超过超时时间,系统会自锁,事务不能继续执行必须按照资源的顺序依次获取动释放锁,从而避免死锁一次封锁法One-Time Locking定义优点缺点一次封锁法要求事务在开始执行之前,一次封锁法可以有效预防死锁由于事一次封锁法的并发度较低由于事务需一次性获取所有需要的锁如果没有获务一次性获取所有锁,避免了请求与保要一次性获取所有锁,可能导致其他事取所有锁,事务不能继续执行这意味持条件和循环等待条件,从而避免了死务需要等待更长的时间才能访问数据,着事务必须预先知道需要访问的所有资锁的发生影响系统的性能此外,事务需要预先源知道需要访问的所有资源,这在某些情况下是不现实的资源排序法Resource Ordering定义资源排序法对所有资源进行排序,事务必须按照顺序获取锁如果需要获取多个锁,必须按照资源的顺序依次获取这意味着事务不能先获取高序位的锁,再获取低序位的锁优点资源排序法可以有效预防死锁由于事务按照固定的顺序获取锁,避免了循环等待条件,从而避免了死锁的发生缺点资源排序法的灵活性较低由于事务必须按照固定的顺序获取锁,可能需要在不需要某些资源时,也要先获取该资源的锁,影响系统的性能此外,资源的排序需要提前确定,不易于动态调整超时机制Timeout Mechanism定义1超时机制为每个锁设置超时时间如果事务持有锁的时间超过超时时间,系统会自动释放锁,从而避免死锁这意味着即使事务发生异常,未能主动释放锁,系统也会自动释放锁,保证系统的可用性优点2超时机制可以有效预防死锁由于系统会自动释放超时的锁,避免了长时间的资源占用,从而避免了死锁的发生此外,超时机制实现简单,易于部署缺点3超时机制可能导致误释放锁如果事务在超时时间内未能完成操作,系统会自动释放锁,可能导致数据不一致此外,超时时间的设置需要谨慎,过短可能导致频繁释放锁,过长则不能有效预防死锁悲观锁Pessimistic Locking定义1悲观锁认为数据被并发修改的可能性很高,因此在读取数据时,会立即获取锁,防止其他事务修改数据悲观锁是一种保守的并发控制策略实现方式2悲观锁通常通过数据库的锁机制来实现事务在读取数据时,获取共享锁或排他锁其他事务需要等待锁释放才能访问数据适用场景悲观锁适用于并发修改频繁的场景,如在线交易、库存管理等3在这些场景下,需要保证数据的强一致性,使用悲观锁可以有效避免数据冲突乐观锁Optimistic Locking定义实现方式适用场景乐观锁认为数据被并发修改的可能性很乐观锁通常通过版本号或时间戳来实现乐观锁适用于并发修改较少的场景,如低,因此在读取数据时,不会立即获取事务在读取数据时,获取数据的版本读取多于修改的应用在这些场景下,锁只有在提交修改时,才会检查数据号或时间戳在提交修改时,检查数据使用乐观锁可以减少锁的开销,提高系是否被其他事务修改过乐观锁是一种的版本号或时间戳是否与读取时一致统的并发性能宽松的并发控制策略如果一致,则提交修改;否则,回滚事务乐观锁的实现版本号VersionNumber版本号的定义版本号是一种用于记录数据修改次数的字段每当数据被修改时,版本号会自动增加事务在读取数据时,获取数据的版本号在提交修改时,检查数据的版本号是否与读取时一致实现方式在数据库表中增加一个版本号字段事务在读取数据时,获取该字段的值在更新数据时,先比较该字段的值与读取时的值是否相等,如果相等,则更新数据,并将版本号加;否则,更新失败,事务回滚1优点与缺点版本号的优点是实现简单,易于理解缺点是需要额外维护一个版本号字段,增加存储开销此外,版本号可能存在溢出问题,需要定期维护乐观锁的实现时间戳Timestamp实现方式在数据库表中增加一个时间戳字段事务在读取数据时,获取该字段的值在更新数据时,先比较该字段的值与读取2时的值是否相等,如果相等,则更新数时间戳的定义据,并将时间戳更新为当前时间;否则时间戳是一种用于记录数据最后修改时1,更新失败,事务回滚间的字段事务在读取数据时,获取数据的时间戳在提交修改时,检查数据优点与缺点的时间戳是否与读取时一致时间戳的优点是实现简单,不需要额外维护一个计数器缺点是时间戳可能存3在冲突问题,特别是在高并发环境下此外,时间戳的精度可能不够,无法区分短时间内发生的修改多版本并发控制MVCC的定义MVCC1多版本并发控制是一种并发控制技术,通过为每个数据维护多个版本,允许多个事务同时读取和修改数据,而不会相互阻塞可以提高系统的并发性能,减少锁的开销MVCC的实现方式MVCC通常通过快照隔离来实现每个事务在开始时,创建一个数据库的快照,事务MVCC2只能访问该快照中的数据当事务修改数据时,会创建一个新的版本,但不会覆盖旧的版本其他事务仍然可以访问旧的版本,直到新版本提交的适用场景MVCC适用于读取多于修改的应用,如在线查询、报表分析等MVCC3在这些场景下,可以显著提高系统的并发性能,减少MVCC锁的开销的原理MVCC版本链事务快照隔离ID为每个数据维护一个版本链,记每个事务都有一个唯一的事务事务每个事务在开始时,创建一个数据库的MVCC ID录数据的历史版本每个版本包含数据用于标识事务创建的版本,以及判断快照快照记录了当前数据库中所有数ID的实际值、创建该版本的事务、以及事务是否可以访问某个版本事务只能据的最新版本事务只能访问该快照中ID指向前一个版本的指针通过版本链,访问事务小于等于当前事务的版本的数据,不能访问其他事务的修改ID ID可以找到数据的不同版本的优势MVCC提高并发性能允许多个事务同时读取和修改数据,而不会相互阻塞MVCC这可以显著提高系统的并发性能,减少锁的开销减少锁的开销通过快照隔离和版本链来避免锁的使用只有在极少数MVCC情况下,才需要使用锁,如更新版本链时提供更好的隔离性可以提供多种隔离级别,包括读已提交(MVCC Read)和可重复读()通过调整Committed Repeatable Read隔离级别,可以在并发性能和数据一致性之间进行权衡隔离级别读未提交Read Uncommitted优点读未提交的并发性能最高由于事务可2以读取其他事务尚未提交的数据,不需定义要等待锁释放1读未提交是最低的隔离级别事务可以读取其他事务尚未提交的数据这意味着事务可能读取到脏数据缺点读未提交的数据一致性最差事务可能3读取到脏数据,导致数据不一致隔离级别读已提交Read Committed定义1读已提交是常见的隔离级别事务只能读取其他事务已经提交的数据这意味着事务不会读取到脏数据优点2读已提交可以避免脏读事务只能读取已经提交的数据,保证了数据的一致性缺点3读已提交可能导致不可重复读如果事务在两次读取之间,数据被其他事务修改并提交,则两次读取的结果不一致隔离级别可重复读RepeatableRead定义优点缺点可重复读是较高的隔离级别事务在整可重复读可以避免不可重复读事务在可重复读可能导致幻读如果事务在两个事务过程中多次读取同一数据,结果整个事务过程中多次读取同一数据,结次查询之间,另一个事务插入或删除了保持一致这意味着事务不会读取到其果保持一致,保证了数据的一致性满足查询条件的数据,则两次查询的结他事务的修改果集不同隔离级别串行化Serializable定义串行化是最高的隔离级别事务完全隔离,不会出现任何并发问题每个事务都感觉好像它是系统中唯一运行的事务优点串行化可以避免所有并发问题,包括脏读、不可重复读和幻读事务保证了数据的一致性缺点串行化的并发性能最低由于事务需要完全隔离,可能导致其他事务需要等待更长的时间才能访问数据,影响系统的性能不同隔离级别解决的问题读未提交读已提交1无法解决任何并发问题,可能导致脏读可以解决脏读问题,但可能导致不可重
2、不可重复读和幻读复读和幻读串行化可重复读4可以解决所有并发问题,包括脏读、不3可以解决脏读和不可重复读问题,但可可重复读和幻读能导致幻读的锁机制MySQL全局锁1对整个数据库实例加锁,用于备份、恢复等操作表级锁2对整个表加锁,包括表锁和元数据锁行级锁3对表中的特定行加锁,由存储引擎实现存储引擎的锁InnoDB行级锁间隙锁锁Next-Key支持行级锁,包括共享锁和排他支持间隙锁,用于防止幻读使用锁,它是行级锁InnoDB InnoDBInnoDB Next-Key锁和间隙锁的组合,用于实现可重复读隔离级别锁升级Lock Escalation定义锁升级是指数据库管理系统自动将细粒度的锁(如行级锁)升级为粗粒度的锁(如表级锁)锁升级的目的是减少锁的数量,降低锁管理的开销触发条件锁升级通常在事务持有的锁数量达到一定阈值时触发阈值可以根据系统的配置进行调整影响锁升级可以减少锁管理的开销,但会降低系统的并发性能由于粗粒度的锁会阻塞更多的事务,可能导致系统性能下降分布式锁适用场景分布式锁适用于需要控制多个节点并发2访问共享资源的场景,如分布式任务调定义度、分布式配置管理等在这些场景下分布式锁是一种用于控制分布式系统中,需要保证数据的一致性,使用分布式1多个节点并发访问共享资源的机制分锁可以有效避免数据冲突布式锁可以保证在同一时间只有一个节点可以访问共享资源,从而避免数据不实现方式一致问题常见的分布式锁实现方式包括基于数据3库的分布式锁、基于的分布式锁Redis和基于的分布式锁ZooKeeper分布式锁的实现方式基于数据库基于Redis通过数据库的唯一约束或锁表来通过的命令和Redis SETNXLua实现分布式锁脚本来实现分布式锁基于ZooKeeper通过的临时节点来实现分布式锁ZooKeeper基于数据库的分布式锁实现方式优点缺点基于数据库的分布式锁通过在数据库表基于数据库的分布式锁实现简单,易于基于数据库的分布式锁性能较低每次中插入一条记录来实现该记录包含锁理解可以利用数据库的事务机制来保获取和释放锁都需要访问数据库,增加的名称、持有锁的节点等信息为了保证锁的可靠性系统的开销此外,数据库可能成为并证锁的互斥性,可以在锁名称字段上创发瓶颈,影响系统的性能建唯一约束基于的分布式锁Redis实现方式基于Redis的分布式锁通过Redis的SETNX命令和Lua脚本来实现SETNX命令用于设置键的值,如果键不存在,则设置成功;否则,设置失败Lua脚本用于保证获取锁和设置过期时间的操作的原子性优点基于Redis的分布式锁性能较高Redis是内存数据库,读写速度快,可以提高锁的获取和释放速度缺点基于Redis的分布式锁需要额外的维护成本需要保证Redis的高可用性,防止单点故障此外,需要处理锁的过期时间,避免死锁基于的分布式锁ZooKeeper优点基于的分布式锁可靠性高ZooKeeper是分布式协调服务,可以保ZooKeeper实现方式2证锁的一致性和可用性此外,可以自动释放锁,避免死锁基于的分布式锁通过ZooKeeperZooKeeperZooKeeper的临时节点来实现事务1在中创建一个临时节点,ZooKeeper缺点如果创建成功,则表示获取锁当事务完成操作后,删除该节点,释放锁基于的分布式锁性能相对较ZooKeeper低每次获取和释放锁都需要访问3,增加系统的开销此外ZooKeeper,的节点创建和删除操作需要ZooKeeper一定的时间,可能影响锁的响应速度。
个人认证
优秀文档
获得点赞 0