《第五章 数据库设计和ER模型.ppt》由会员分享,可在线阅读,更多相关《第五章 数据库设计和ER模型.ppt(116页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1第第7 7章章 系统实现技术系统实现技术2本章重要概念本章重要概念(1)(1)系统目录及其和)系统目录及其和DBMS各子系统的联系。各子系统的联系。(2)事事务务的的定定义义,COMMIT和和ROLLBACK的的语义,事务的语义,事务的ACID性质,事务的状态性质,事务的状态变迁图。变迁图。(3)存储器类型,稳定存储器的实现,)存储器类型,稳定存储器的实现,数数据据传传送过程。送过程。(4)恢复的定义、基本原则和实现方法,)恢复的定义、基本原则和实现方法,故障的类型,检查点技术,故障的类型,检查点技术,REDO和和UNDO操作,运行记录优先原则。操作,运行记录优先原则。3本章重要概念本章重要
2、概念(2)(5)并并发发操操作作带带来来的的三三个个问问题题,X锁锁、PX协协议议、PXC协协议议,S锁锁、PS协协议议、PSC协协议议,活活锁锁、饿饿死死和和死死锁锁,并并发发调调度度,串串行行调调度度,并并发发调调度度的的可可串串行行化化,两两段段封封锁锁法法,SQL中中事事务务的的存存取取模模式式和和隔离级别。隔离级别。(6)完完整整性性的的定定义义,完完整整性性子子系系统统的的功功能能,完完整整性性规规则则的的组组成成。SQL中中的的三三大大类类完完整整性性约约束束,SQL3中的触发器技术。中的触发器技术。(7)安全性的定义、级别,权限,)安全性的定义、级别,权限,SQL中的中的安全性
3、机制,几种常用的安全性措施,自然环境安全性机制,几种常用的安全性措施,自然环境的安全性。的安全性。4主要内容和学习要求主要内容和学习要求n7.1 7.1 系统目录系统目录n7.2 7.2 事务事务n7.3 7.3 数据库的恢复数据库的恢复n7.4 7.4 数据库的并发控制数据库的并发控制n7.5 7.5 并发事务的可串行化和可恢复性并发事务的可串行化和可恢复性n7.6 7.6 数据数据库库的完整性的完整性n7.7 7.7 数据数据库库的安全性的安全性n小结小结5系统目录系统目录n什么是系统目录什么是系统目录n系统目录的重要性系统目录的重要性n系统目录的内容系统目录的内容n元数据元数据6系统目录
4、的存储内容系统目录的存储内容n关系名,属性名,属性域(数据类型)关系名,属性名,属性域(数据类型)n各种约束,主键,辅助键,外键,空值各种约束,主键,辅助键,外键,空值/非空值非空值n视图的外部级描述,存储结构和索引的视图的外部级描述,存储结构和索引的内部级描述内部级描述n安全性和授权规则安全性和授权规则n数据完整性规则数据完整性规则注意:这些数据都以表格的形式存在注意:这些数据都以表格的形式存在7系统目录内容系统目录内容REL_AND_ATTR_CATALOGREL_NAMEATTR_NAMEATTR_TYPEMEMBER_OF_PKMEMBER_OF_FKFK_RELATION属性属性名名
5、属性属性类型类型主主键键外外键键外键外键关系关系关系关系名名RELATION_KEYSREL_NAMEINDEX_NAMEMEMBER_ATTRINDEX_TYPEATTR_NOASC_DESC(a)存储键信息的目录关系存储键信息的目录关系REL_NAMEKEY_NUMBERMEMBER_ATTRRELATION_INDEXES(b)存储索引信息的目录关系存储索引信息的目录关系VIEW_QUERIERVIEW_ATTRIBUTESVIEW_NAMEQUERYVIEW_NAMEATTR_NAMEATTR_NUM(c)存储视图信息的目录关系存储视图信息的目录关系8系统目录的扩充系统目录的扩充ERE
6、R图图属性属性键键视图属性视图属性视图关系视图关系关系关系基本关系基本关系索引索引属性名属性名键类型键类型d数据类型数据类型键编号键编号关系名关系名查询查询索引类型索引类型属性序号属性序号索引名索引名属性名属性名K_AR_IR_FI_AK_IR_AR_KV_A外键外键9 系统目录和系统目录和DBMSDBMS各子系统的联系各子系统的联系DDL编译程序编译程序DML优化程序优化程序DML命令的外命令的外部级到概念级部级到概念级映象映象DML编译程序编译程序DML分析校分析校验程序验程序DBMS处理和检查三级处理和检查三级模式两级映象模式两级映象检查查询涉及的检查查询涉及的关系名属性名等关系名属性名
7、等将查询涉及的概念将查询涉及的概念模式转换成内模式,模式转换成内模式,产生访问计划产生访问计划根据物理结构优根据物理结构优化查询执行方案化查询执行方案将查询中的视图由外将查询中的视图由外部级导到概念级映象部级导到概念级映象处理和检查权限处理和检查权限授权和安全程序授权和安全程序10主要内容主要内容n7.1 7.1 系统目录系统目录n7.27.2 事务事务n7.3 7.3 数据库的恢复数据库的恢复n7.4 7.4 数据库的并发控制数据库的并发控制n7.5 7.5 并发事务的可串行化和可恢复性并发事务的可串行化和可恢复性n7.6 7.6 数据数据库库的完整性的完整性n7.7 7.7 数据数据库库的
8、安全性的安全性n小结小结 11事务的定义事务的定义 n事事务务(transactiontransaction)是是构构成成单单一一逻逻辑辑工工作作单单元元的的操操作作集集合合,由一系列下面这些操作构成由一系列下面这些操作构成n读数据库的对象:磁盘-缓冲区-程序n对数据库的写操作:缓冲区-磁盘n在在程程序序中中,事事务务以以BEGIN BEGIN TRANSACTIONTRANSACTION语语句句开开始始,以以COMMITCOMMIT语句或语句或ROLLBACKROLLBACK语句结束。语句结束。nCOMMITCOMMIT语语句句表表示示事事务务执执行行成成功功地地结结束束(提提交交),此此时
9、时告告诉诉系系统统,数数据据库库要要进进入入一一个个新新的的正正确确状状态态,该该事事务务对对数数据据库库的的所所有有更新都已交付实施(写入磁盘)。更新都已交付实施(写入磁盘)。nROLLBACKROLLBACK语语句句表表示示事事务务执执行行不不成成功功地地结结束束(应应该该“回回退退”),此此时时告告诉诉系系统统,已已发发生生错错误误,数数据据库库可可能能处处在在不不正正确确的的状状态态,该该事事务务对对数数据据库库的的所所有有更更新新必必须须被被撤撤消消,数数据据库库应应恢恢复复该该事事务务到初始状态。到初始状态。12事务的事务的ACIDACID性质性质n性质性质n原子性原子性(Atom
10、icity):(Atomicity):事务事务是一个不可分割是一个不可分割的工作的工作单单元元。n一致性一致性(Consistency)(Consistency):即数据不会应事务即数据不会应事务的执行而遭受破坏。的执行而遭受破坏。n隔离性隔离性(Isolation)(Isolation):在多个事务并发执行在多个事务并发执行时,系统应保证与这些事务先后单独执行时,系统应保证与这些事务先后单独执行时的结果一样。时的结果一样。n持久性持久性(Durability)(Durability):一个事务一旦完成全一个事务一旦完成全部操作后,它对数据库的所有更新应永久部操作后,它对数据库的所有更新应永久
11、地反映在数据库中。地反映在数据库中。13事务及其性质事务及其性质问题:问题:设银行数据库中设银行数据库中有一转账事务有一转账事务T T,从,从账号账号A A转一笔款子转一笔款子($50$50)到账号)到账号B B。相应的操作如下:相应的操作如下:T:BEGIN TRANSACTIONT:BEGIN TRANSACTION;readread(A A);A:=A-50A:=A-50 ;writewrite(A A););if(A0)ROLLBACKif(A0)ROLLBACK;else readelse read(B B););B:=B+50 B:=B+50;writewrite(B B););C
12、OMMITCOMMIT;T:read T:read(A A);A:=AA:=A50 50 ;writewrite(A A););readread(B B);B:=B+50 B:=B+50;writewrite(B B).组合成一个事务:组合成一个事务:14事务提交和事务撤销事务提交和事务撤销n事务的所有操作都完成了,则事务提交事务的所有操作都完成了,则事务提交(COMMIT),否则事务撤销,否则事务撤销(ROLLBACK)。nBEGINTRANSACTION标志事务开始执行。标志事务开始执行。nBEGINTRANSACTION和和COMMIT或或ROLLBACK一起保证了事务的四个性质。一起保
13、证了事务的四个性质。n对数据库访问的两个基本操作:读和写,但对数据库访问的两个基本操作:读和写,但完成写操作后,数据可能暂时放在内存中,完成写操作后,数据可能暂时放在内存中,而非直接写进数据库。而非直接写进数据库。15事务的状态变迁图事务的状态变迁图活动状态活动状态局部提交局部提交状态状态提交状态提交状态失败状态失败状态异常中止状态异常中止状态READ/WRITEREAD/WRITE16主要内容主要内容n7.1 7.1 系统目录系统目录n7.2 7.2 事务事务n7.3 7.3 数据库的恢复数据库的恢复n7.4 7.4 数据库的并发控制数据库的并发控制n7.5 7.5 并发事务的可串行化和可恢
14、复性并发事务的可串行化和可恢复性n7.6 7.6 数据数据库库的完整性的完整性n7.7 7.7 数据数据库库的安全性的安全性n小结小结 17存储器类型存储器类型 n易失性存易失性存储储器(器(volatile storagevolatile storage)内存、内存、cachecache存存储储器器 n非易失性存非易失性存储储器(器(nonvolatile storagenonvolatile storage)磁磁盘盘和磁和磁带带 n稳稳定存定存储储器(器(stable storagestable storage)这这是一个理是一个理论论上的概念。存上的概念。存储储在在稳稳定存定存储储器中的
15、信息是决不会器中的信息是决不会丢丢失的。失的。n稳稳定存定存储储器器的实现的实现n数据备份数据备份n数据银行数据银行18块和块的操作块和块的操作n块、物理块和缓冲块块、物理块和缓冲块n块的操作块的操作ninputinput(A A):把把物物理理块块A A的的内内容容传传送送到到内内存的缓冲块中。存的缓冲块中。nOutputOutput(B B):把缓):把缓冲块冲块B B的内容传送到的内容传送到磁盘中恰当的物理块磁盘中恰当的物理块中中B内存内存AB磁盘磁盘input(A)output(B)块操作块操作19数据访问数据访问xiwrite(X)包含包含x的块的块Bx存在,存在,read(X)事务
16、事务系统系统开开始始请求请求read(X)事务工作区事务工作区分配分配X磁盘缓冲区磁盘缓冲区扫描内存扫描内存磁盘磁盘包含包含x的块的块Bx存在,存在,input(B)20恢复和原子性的联系恢复和原子性的联系银行转账系统银行转账系统A=2000B=1000事务事务A=A-100B=B+100output(Aoutput(A)output(B)output(B)断电或其断电或其他故障他故障假设没有事假设没有事务的原子性,务的原子性,那么重新启那么重新启动事务时,动事务时,要么要么A因为因为再执行一遍再执行一遍而为而为1800,要么,要么B因因从未执行而从未执行而保持原值。保持原值。21 恢复的基本
17、原则和实现方法恢复的基本原则和实现方法 n基本原则基本原则 :“冗余冗余”,即数据库重复存储。,即数据库重复存储。n具体具体实现实现方法方法 n平时做好两件事:转储和建立日志平时做好两件事:转储和建立日志n周期地(比如一天一次)对整个数据库进行拷贝,转储到周期地(比如一天一次)对整个数据库进行拷贝,转储到另一个磁盘或磁带一类存储介质中。另一个磁盘或磁带一类存储介质中。n 建立日志数据库。记录事务的开始、结束及数据每一次插建立日志数据库。记录事务的开始、结束及数据每一次插入、删除和修改前后的值,并写到入、删除和修改前后的值,并写到“日志日志”库中。库中。n一旦发生数据库故障,分两种情况进行处理一
18、旦发生数据库故障,分两种情况进行处理n如果数据库已被破坏,则装入如果数据库已被破坏,则装入lastlast数据库备份,再利用日数据库备份,再利用日志库将这两个数据库状态之间的所有更新重新做一遍。志库将这两个数据库状态之间的所有更新重新做一遍。n如果数据库未被破坏,但某些数据不可靠,则撤消所有不如果数据库未被破坏,但某些数据不可靠,则撤消所有不可靠的修改,把数据库恢复到正确的状态。可靠的修改,把数据库恢复到正确的状态。22故障类型和恢复方法故障类型和恢复方法n事务故障事务故障n可以预期的事务故障,如存款余额透支等可以预期的事务故障,如存款余额透支等n非预期事务故障,如运算溢出、数据错误、非预期事
19、务故障,如运算溢出、数据错误、死锁等死锁等n系统故障系统故障硬件故障、软件错误或掉电等等硬件故障、软件错误或掉电等等n介质故障介质故障(硬故障硬故障)磁盘物理故障或遭受病毒破坏磁盘物理故障或遭受病毒破坏23检查点技术检查点技术(1)(1)n什么是检查点方法什么是检查点方法n检查点类似于数据库的快照,包括以下三步n写“检查点开始“标识n将transaction table和dirty table的内容写入logn更新最新的检查点的信息n非fuzzy的检查点n检查点方法的恢复算法检查点方法的恢复算法n根据日志文件建立事务根据日志文件建立事务重做队列和事务撤销队重做队列和事务撤销队列列n对对重做队列
20、中的事务进重做队列中的事务进行行REDOREDO处理,对撤消队处理,对撤消队列中的事务进行列中的事务进行UNDOUNDO处处理理事务事务T1T1不必恢复;不必恢复;事务事务T2T2和事务和事务T4T4必须重做必须重做(REDO)(REDO);事务事务T3T3和事务和事务T5T5必须撤消必须撤消(UNDO)(UNDO)。事务事务检查点检查点故障点故障点t检查点检查点T1T1T3T3T2T2T5T5T4T4 日志n日志(LOG)n日志也称为trail或journaln每条日志记录有一个id,称为log sequence number(LSN)。日志记录顺序地存放在日志文件中,可以很快地访问到n日志
21、记录的操作信息n对页的修改、Commit信息、Abort信息、end信息、对updat的undo信息n每个日志记录包括nprevLSN:该事务的前一个操作nTransid:事务号nTypen每条记录还包括npageID,length,offset:修改的数据所在的位置nBefore-image,after-image:修改的内容 日志n补偿日志记录n补偿日志记录记录了在Undo过程中对数据库进行的修改n通过prevLSN可以获得下一个需要进行undo的操作nUndo操作不可能被再次undon其他的同恢复有关的数据结构nTransaction table:记录了每个活跃的事务在日志中的最后一条记
22、录nDirty page table:记录了所有的脏的页,以及导致该页为脏的第一个操作 恢复n恢复管理器n主要保证事务的原子性和持久性n主要目的是从system crash和media crash中恢复出来nSystem Crashn系统软件死机、掉电等造成的系统故障,存储介质是完好的nARIES算法n从System crash中恢复出来nMedia 恢复n存储介质发生了损毁 ARIES算法的介绍nAries的过程nAnalysis:找出还没有写到硬盘上的脏数据,和Crash时活跃的事务nRedo:重做已提交的操作,根据log将系统恢复到系统崩溃之前的状态nUndo:消除没有提交的事务对数据库
23、的修改n右图中T1,T3在系统崩溃时是活跃的LSDLOG10Update:T1 write P520Update:T2 write P330T2 commit40T2 end50Update:T3 write P160Update:T3 write P3CRASH,RESTART ARIES算法的介绍nARIES算法的三个原则nWrite-ahead Logging(WAL)n对数据库的所有修改在其写入数据库之前先写入lognRepeating history during redonAries在系统重起时将重做系统崩溃前所做的修改,从而将系统恢复到系统崩溃前的状态nLogging chang
24、es during undon对数据库做的undo操作将记录在log中n实际数据库管理系统中的Crash RecoverynIBM DB2,Informix,SQL Server,Oracle8,Sybase均采用WALnDB2采用Aries算法n其它的数据库管理系统采用类似Aries的方法 ARIES算法的介绍prevLsdtransIDtypepageIDLengthoffsetBefore-imageAfter-imageT1000UP500321ABCDEFT2000UP600341HIJKLMT2000UP500320GDEQRST1000UP505321TUVWXYpageidre
25、cLSNP500P600P505TransIDlastLSNT1000T2000Dirty Page TableTransaction TableLOG ARIES算法的介绍nThe write-ahead log protocolnWAL原则是保障事务的特性的重要手段n由于日志信息比数据库中的数据更集中,所以WAL将带来性能的提高 从系统Crash中恢复LOGACrash时活跃事务的最早日志记录BDirty page table中最早的日志记录C最新的检查点D系统CrashAnalysisRedoUndo 从系统Crash中恢复n分析阶段n任务n决定开始redo的log记录n确定当Crash
26、时,哪些页是脏的n确定当系统Crash时哪些事务是活跃的n步骤n从最新的检查点出发向后搜索n如果遇到一个事务结束的log记录,则将该事务从transaction表中删除n如果遇到一个事务中操作的log记录,则更新该事务的最后日志记录和是否提交的记录n如果遇到对一个新的页的修改,则将该页写入dirty page table 从系统Crash中恢复nRedo阶段n从dirty page table中的最早一条日志记录开始向后遍历n除了以下条件,对数据库重作修改n修改的页不在dirty page table中n修改的页在dirty page table中,但其recLSN大于正在检测的LSNn对应的
27、pageLSN大于正在检测的LSNn当日志记录需要被重新修改时n重做相应的操作n修改PageLSN信息 从系统Crash中恢复nUndo阶段n从最后一条日志记录出发,向前搜索n对每个活跃事务的日志记录,n如果是CLR记录,则继续向前找n对每条其它记录,取消其影响,并在日志中记录其CLR记录n事务的终止n操作过程类似于undo阶段的处理 从系统Crash中恢复n在恢复过程中出现Crashn主要根据相应的CLR信息确定还有哪些数据需要重新处理LSDLOG00,05Begin_checkpoint end_checkpoint10Update:T1 write P520Update:T2 write
28、 P330T1 abort40,45CLR:Undo T1 LSN 10,T1 end50Update:T3 write P1CRASH,RESTART60Update:T2 write P570CLR:Undo T2 LSN 6080,85CLR:Undo T3 LSN 50,T3 endCRASH,RESTART90,95CLR:Undo T2 LSN 20,T2 end Media RecoverynMedia Recovery包括两步n从数据库的备份中恢复数据库中的数据n根据日志中的记录重新对数据库进行修改37SQLSQL对事务的对事务的支持支持n无无begintransactionn
29、CommitnRollbackn游标游标38主要内容主要内容n7.1 7.1 系统目录系统目录n7.2 7.2 事务事务n7.3 7.3 数据库的恢复数据库的恢复n7.4 7.4 数据库的并发控制数据库的并发控制n7.5 7.5 并发事务的可串行化和可恢复性并发事务的可串行化和可恢复性n7.6 7.6 数据数据库库的完整性的完整性n7.7 7.7 数据数据库库的安全性的安全性n小结小结 39问题问题1-1-丢失更新丢失更新时间时间更新事务更新事务T1T1数据库中数据库中A A值值更新事务更新事务T2T2t0t0100100t1t1FIND AFIND At2t2FIND AFIND At3t3
30、A:=A-30A:=A-30t4t4A:=A*2A:=A*2t5t5UPD AUPD At6t67070UPD AUPD At7t7200200在时间在时间t7t7丢失了事务丢失了事务T1T1的更新的更新(FINDFIND表示从表示从DBDB中读值,中读值,UPDUPD表示把值写回到表示把值写回到DBDB)40问题问题2-2-读脏数据读脏数据(1)(1)时间时间更新事务更新事务T1T1数据库中数据库中A A值值读事务读事务T2T2t0t0100100t1t1FIND AFIND At2t2A:=A-30A:=A-30t3t3UPD AUPD At4t47070FIND AFIND At5t5R
31、OLLBACKROLLBACKt6t6100100事务事务T2T2在时间在时间t4t4读了读了未提交的未提交的A A值(值(7070)41问题问题2-2-读脏数据读脏数据(2)(2)时间时间更新事务更新事务T1T1数据库中数据库中A A值值更新事务更新事务T2T2t0t0100100t1t1FIND AFIND At2t2A:=A-30A:=A-30t3t3UPD AUPD At4t47070FINDFIND A At5t5A:=A*2A:=A*2t6t6UPDUPD A At7t7140140t8t8ROLLBACKROLLBACKt9t9100100事务事务T2T2在时间在时间t4t4读了
32、未提交的读了未提交的A A值,值,并在时间并在时间t8t8丢失了自己的更新丢失了自己的更新42问题问题3-3-错误求和错误求和时间时间读事务读事务T1DB中中A、B、C的值的值更新事务更新事务T2t040,50,30t1FINDAt2SUM:=At3FINDBt4SUM:=SUM+BSUM:=SUM+Bt5FINDCt6C:=C-10t7UPDCt840,50,20FINDAt9A:=A+10t10UPDAt1150,50,20COMMITt12FINDCt13SUM:=SUM+CSUM:=SUM+C 事事务务T1进进行行了了不不一一致致的的分分析析43问题问题4-4-不不可重复读可重复读时间
33、时间读事务读事务T1T1数据库中数据库中A A值值更新事务更新事务T2T2t0t0100100t1t1FIND AFIND At2t2FIND AFIND At3t3A:=A*2A:=A*2t4t4UPDUPD A At5t5200200COMMITt6t6FIND AFIND A事事务务T T1 1两次两次读读取取A A的的值值,却得到了不同的却得到了不同的结结果果 44解决方法解决方法时间时间更新事务更新事务T1T1数据库中数据库中A A值值更新事务更新事务T2T2t0t0100100t1t1FIND AFIND At2t2FIND AFIND At3t3A:=A-30A:=A-30t4t
34、4A:=A*2A:=A*2t5t5UPD AUPD At6t67070UPD AUPD At7t7200200在时间在时间t7t7丢失了事务丢失了事务T1T1的更新的更新 并发控制与事务n并发计算的目的n通过并行计算,提高系统的吞吐能力n通过并行计算,提高小查询的响应速度n串行化问题n保证并发事务的执行同事务一个一个地串行执行的结果是一样的n串行化问题不应受终止的事务的影响n事务的执行结果以对数据库的影响为标准46封锁技术封锁技术n封锁是控制并发执行的主要技术。封锁是控制并发执行的主要技术。n锁锁(locklock)是是一一个个与与数数据据项项相相关关的的变变量量,对对可可能能应应用用于于该该
35、数数据据项项上上的的操操作作而而言言,锁锁描描述述了了该数据项的状态。该数据项的状态。n通通常常在在数数据据库库中中每每个个数数据据项项都都有有一一个个锁锁。锁锁的的作作用用是是使使并并发发事事务务对对数数据据库库中中数数据据项项的的访访问问能够同步。能够同步。n封锁技术中主要有两种封锁:封锁技术中主要有两种封锁:排他型封锁排他型封锁 共享型封锁。共享型封锁。47排他型封锁(排他型封锁(X X锁)锁)X锁锁定定义义:如如果果事事务务T T对对某某个个数数据据R R(可可以以是是数数据据项项、记记录录、数数据据集集乃乃至至整整个个数数据据库库)实实现现了了X X锁锁,那那么么在在T T对对数数据
36、据R R解解除除封封锁锁之之前前,不不允允许许其其他他事事务务T T再再对对该该数数据据加加任任何类型的锁。这种锁称为何类型的锁。这种锁称为“X X锁锁”。X X锁的操作有两个:封锁操作锁的操作有两个:封锁操作“XFIND RXFIND R”解锁操作解锁操作“XRELEASE RXRELEASE R”PXPX协协议议:任任何何企企图图更更新新记记录录R R的的事事务务必必须须先先执执行行“XFIND XFIND R R”操操作作,以以获获得得对对R R的的X X锁锁,才才能能读读或或写写记记录录R R;如如果果未未获获准准X X锁锁,那那么么这这个个事事务务进进入入等等待待队队列列,一一直直到
37、获准到获准X X锁,事务才能继续做下去。锁,事务才能继续做下去。PXCPXC协协议议:X X锁锁的的解解除除操操作作应应该该合合并并到到事事务务的的结结束束(COMMITCOMMIT或或ROLLBACKROLLBACK)操作中)操作中。48共享型封锁(共享型封锁(S S锁)锁)S锁锁定定义义如如果果事事务务T T对对某某数数据据加加上上S S锁锁后后,仍仍允允许许其其他他事事务务再再对对该该数数据据加加S S锁锁,但但在在对对该该数数据据的的所所有有S S锁锁都都解解除之前决不允许任何事务对该数据加除之前决不允许任何事务对该数据加X X锁。锁。S S锁的操作有三个锁的操作有三个:封锁操作封锁操
38、作“SFIND RSFIND R”升级和写操作升级和写操作“UPDX RUPDX R”解锁操作解锁操作“SRELEASE RSRELEASE R”PSPS协协议议:任任何何要要更更新新记记录录R R的的事事务务必必须须先先执执行行“SFIND SFIND R R”操操作作,以以获获得得对对R R的的S S锁锁。当当事事务务获获准准对对R R的的S S锁锁后后,若若要要更更新新记记录录R R必必须须用用“UPDX UPDX R R”操操作作,这这个个操操作作首首先先把把S S锁锁升升级级为为X X锁锁,若若成成功功则则更更新新记记录录,否否则这个事务进入等待队列。则这个事务进入等待队列。PSCP
39、SC协议:协议:S S锁的解除操作应该合并到事务的结束。锁的解除操作应该合并到事务的结束。49使用使用X锁解决数据丢失锁解决数据丢失时间时间更新事务更新事务T1T1DBDB中中A A的值的值更新事务更新事务T2T2t0t0100100t1t1XFIND AXFIND At2t2XFIND A(XFIND A(失败失败)wait(wait(等待等待)t3t3A:=A-30A:=A-30 wait waitt4t4 wait wait t5t5UPD AUPD A wait waitt6t67070 wait waitt7t7COMMIT(COMMIT(含解锁含解锁)wait waitt8t8XF
40、IND A(XFIND A(重做重做)t9t9A:=A*2A:=A*2t10t10UPD AUPD At11t11140140COMMIT(COMMIT(含解锁含解锁)等事务等事务T1T1更新完成后再执行事务更新完成后再执行事务T2T2 50使用使用S锁解决数据丢失锁解决数据丢失时间时间更新事务更新事务T1T1DBDB中中A A的值的值更新事务更新事务T2T2t0t0100100t1t1SFIND ASFIND At2t2SFIND ASFIND At3t3A:=A-30A:=A-30t4t4A:=A*2A:=A*2t5t5 UPDX A(UPDX A(失败失败)t6t6waitwaitUPD
41、X A(UPDX A(失败失败)t7t7waitwaitwaitwaitt8t8waitwaitwaitwait更新未丢失,但在时间更新未丢失,但在时间t6t6发生了死锁发生了死锁 51封锁的相容矩阵封锁的相容矩阵注:注:N=NO,不不 相相 容容 的的 请请 求求 Y=YES,相容的请求,相容的请求X、S、:分分别别表表示示X锁,锁,S锁,无锁锁,无锁如如果果两两个个封封锁锁是是不不相相容容的的,则则后后提提出出封封锁锁的的事事务要等待。务要等待。XSXNNYSNYYYYYT1T252封锁的粒度封锁的粒度n 封锁对象的大小称为封锁的粒度封锁对象的大小称为封锁的粒度(granularitygr
42、anularity)n封锁的对象封锁的对象n逻辑单元逻辑单元:属性属性值值、属性、属性值值集合、元集合、元组组、关、关系、索引系、索引项项、整个索引、整个数据、整个索引、整个数据库库 n物理单元物理单元:页(数据页或索引页)、块页(数据页或索引页)、块n封锁粒度与系统并发度和并发控制开销密切相封锁粒度与系统并发度和并发控制开销密切相关。粒度越大,系统中能被封锁的对象就越少,关。粒度越大,系统中能被封锁的对象就越少,并发度就越小,但同时系统的开销也就越小;并发度就越小,但同时系统的开销也就越小;相反,粒度越小,并发度越高,系统开销越大相反,粒度越小,并发度越高,系统开销越大53 封锁带来的问题封
43、锁带来的问题1(1(活锁活锁)T1:XFIND AT1:XFIND AT2:XFIND AT2:XFIND AT3:XFIND AT3:XFIND AA AA已被封锁,已被封锁,不成功,等待不成功,等待A刚被释刚被释放,成功放,成功A刚被刚被T2释释放,成功放,成功T1永远等待永远等待活锁!活锁!解决方法:先来先服务解决方法:先来先服务时间时间t54 封锁带来的问题封锁带来的问题2(2(饿死饿死)事务序列事务序列A1A2A3A4A5资源资源AT2T2永远不永远不能封锁能封锁解决方法,改变授权方式:解决方法,改变授权方式:当事务当事务T2中请对数据项中请对数据项Q加加S锁时,授权加锁的条件是:锁
44、时,授权加锁的条件是:不存在在数据项不存在在数据项Q上持有上持有X锁的其他事务;锁的其他事务;不存在等待对数据项不存在等待对数据项Q加锁且先于加锁且先于T2申请加锁的事务。申请加锁的事务。每一个事务均请求每一个事务均请求A的的S锁,成功后一段锁,成功后一段时间释放时间释放请求请求A的的X锁锁55 封锁带来的问题封锁带来的问题3(3(死锁死锁)时间时间 事务事务T1 事务事务T2t0XFINDAt1XFINDBt2XFINDBt3waitXFINDAt4waitwait死锁死锁若事务依赖图若事务依赖图有环则可能死锁有环则可能死锁T1T2T3T4事务的无环依事务的无环依赖图赖图事务的有环依事务的有
45、环依赖图赖图T1T2T3T4 锁的管理n死锁n一圈事务等待前面的事务释放锁,而自己又掌握着锁不释放n死锁的预防手段n采用为每个事务定一个优先权的方法,基本方法是将其开始的时间戳作为其优先权,时间戳越早,则优先级越大n两种方案(若Ti申请锁,而Tj拥有锁)nWait-die:如果Ti的优先级高,则Ti等待,否则Ti终止nWound-die:如果Ti的优先级高,则Tj终止,否则Ti等待n对前者新的事务有可能不断被终止,但是一旦掌握所有的锁,则不会被终止 锁的管理n死锁的检测手段n一般情况下,死锁发生的概率不大,牵涉的事务不多,可以采用定期检测的方法n等待图n结点为活跃的事务nTi到Tj之间有一条边
46、,则Ti在等待Tj释放锁n等待图无环,则系统没有死锁T1T2T3T4S(A)R(A)S(B)X(B)W(B)X(C)S(C)R(C)X(B)X(A)T1T1T1T1T1T1T1T1 专门的锁技术n动态数据库和Phantom问题n前面讨论的时候不考虑数据库中数据的增加和删除n一个例子nT1要查找rating为1和2的最老的船员nT2要删除rating为2得最老的船员,并增加一个rating为1,年龄为93的船员n若T1首先锁住所有rating为1的船员(最老为71),由于锁加在页上,T2仍能插入新记录,当T2执行完删除操作(年龄为80)后,T1查到的结果为63n结果不符合串行化的要求,但不违反严
47、格的2PL协议n原因:锁的实际意义同语义不符 专门的锁技术n动态数据库和Phantom问题n解决方法n如果没有索引,T1在锁住现有相应记录的同时,还要保证不增加新的记录n如果有一个密的索引,则可以锁住相应的data entry所在的页,例如如果rating上有索引,则T1可以锁住rating为1和2的页n索引上的锁是谓词锁的一种特殊情况,它相当于锁住了满足rating=1 or rating=2的锁有记录 专门的锁技术nB+树上的并发控制n如果将树上的每个结点看作是一个物理页,而不考虑其结构特性,则在树的高层将造成大量锁的等待n考虑下面两个特点n在查询时高层的结点主要用于导向的作用,大量的数据
48、是存放在叶结点的n当做插入和删除操作时只有可能被修改的结点需要加锁n优化方法n对查询操作,当移动到下一层结点时对上层结点的锁可以释放n对插入操作,当移动到下一层结点时,如果这层结点不满,则对上层结点的锁可以释放 专门的锁技术206123*4*6*9*10*11*12*13*20*22*23*31*35*36*38*41*44*2338 441035ABFECDIHG1、查询值为38的记录2、删除值为38的记录3、插入值为45的记录 专门的锁技术n多粒度的锁n数据库的对象是有层次的,包括:表、行等,各个层次之间有包含关系n解决方法n增加Intention锁,包括:Intention Shared
49、(IS)、Intention exclusive(IX)等nIX锁与IS和IX锁之间是相容的n在要读取整个文档,但只修改其中一部分的情况下,可以使用SIX锁,SIX锁代表一个锁的变化过程n多粒度锁要遵循2PL协议的要求n当小粒度锁的数目达到一定程度时,可以将其提升成大粒度锁,称为lock escalation63 并发操作的调度并发操作的调度n事务的调度:事务的执行次序称为事务的调度:事务的执行次序称为“调度调度”。n串行调度:如果多个事务依次执行,则称为串行调度:如果多个事务依次执行,则称为事务的串行调度(事务的串行调度(SerialSchedule)。)。n并发调度并发调度:如果利用分时的
50、方法,同时处理多如果利用分时的方法,同时处理多个事务,则称为事务的并发调度个事务,则称为事务的并发调度(ConcurrentSchedule)。)。n可串行化可串行化:如果一个并发调度的执行结果与:如果一个并发调度的执行结果与某一串行调度的执行结果等价,那么这个并发某一串行调度的执行结果等价,那么这个并发调度称为调度称为“可串行化的调度可串行化的调度”,否则是,否则是“不可不可串行化的调度串行化的调度”。64两段封锁协议两段封锁协议n在对任何一个数据进行读写操作之前,在对任何一个数据进行读写操作之前,事务必须获得对该数据的封锁;事务必须获得对该数据的封锁;n在释放一个封锁之后,事务不再获得任在