myschool数据库设计优化参考死锁及检测_第1页
myschool数据库设计优化参考死锁及检测_第2页
myschool数据库设计优化参考死锁及检测_第3页
myschool数据库设计优化参考死锁及检测_第4页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、死锁的概念在两个或多个任务中,如果每个任务锁定了其他任务试图锁定此时会造成这些任阻塞,从而出现死死锁的概念在两个或多个任务中,如果每个任务锁定了其他任务试图锁定此时会造成这些任阻塞,从而出现死锁。例事务获取了行的共享事务获取了行的共享现在,事务A 2 的排他锁,但在事B完成其对行2 持有的共享锁之前被阻现在,事务B 1 的排他锁,但在事A完成其对行1 持有的共享锁之前被阻事务A必须在事务B完成之后才能完成,但事务被事务阻塞这种情况也称为循环依赖关系:事务A 依赖于事务B,而事B 依赖于事务 A,从而形成了一个循除非某个外部进程断开死锁,否则死锁中的两个事务都将无限SQLServerDataba

2、seEngine死锁监视器定期检去陷入死锁的任务。如果监视器检测到循环依赖关系,将选择其务作为牺牲品,然后终止其事务并提示错误。这样,其他任务就可以完成其事务。对于事务以错误终止的应用程序,它还可以重试该事务,通常要等到与它一起陷入死锁的其他事务完成后执在应用程序中使用特定编码约定可以减少应用程序导致死锁的机会。关详细在应用程序中使用特定编码约定可以减少应用程序导致死锁的机会。关详细信息,请参阅将死锁减至最少死锁经常与正常阻。事务请求被其他事务锁定的资源的锁时,。默认情况下,SQL 出请求的事务一直等到该锁事务会超时(除非设置LOCK_TIMEOUT)。因为发出请求的事务未行任何操作来阻塞拥有

3、锁以该事务是被阻塞,而不死锁。最后,拥有锁的事务将完锁,然后发出请求底事务将取锁并继续执死锁有时称为抱不只是关系数据库管理系统,任何多线程系统上都会发生死锁于数据库对象的锁之外的资源也会发生死锁。例如,多线程操的一个线程要获取一个或多个资源(例如,内存块)。如果要源当前为另一拥有,则第一个线程可能必须等待拥有线目标资源。这就是说,对于该特定资源,等待线程依赖于拥有线据库引实例中,当获取非数据库资源(例如,内存或线程)时,话会死锁在上图中,对于 表锁资源,事务 依赖于事务 T2。同样,r表锁资源,事务依赖于事务 T1。在上图中,对于 表锁资源,事务 依赖于事务 T2。同样,r表锁资源,事务依赖于

4、事务 T1。因为这些依赖关于形成了一个循环,所以在事务 和事务T2 之间存在死在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任阻塞,从而出现死锁。下图清楚地显状态,其任务T1 具有资的锁(通过从指向T1 的箭头示),并请求资源 的锁(通过从指向R2 的箭头指示)任务T2 具有资指向T2 的箭头的锁(通过示),并请求资源 的锁(通过从指向R1 的箭头指示)因为这两个任务都需要有资源可用才能继续,而这两个资源须等到其中一个任务继续才出来,所以陷入了死锁状SQLServerDatabaseEngine自动检测SQLServer 中的死锁环。数据库引选择一个会话作为死锁牺

5、牲品,然后终止当前事务(现错误)来打断死锁。可以死锁的资源每个用户会话可能有一个或它运行的任务,其中每个任务获取或等待获取各种资源。以下类型的可以死锁的资源每个用户会话可能有一个或它运行的任务,其中每个任务获取或等待获取各种资源。以下类型的资源可能会造成阻塞,并最终导致死锁锁。等待获取资源(如对象、页、行、元数据和应用程序)可能导致死锁。例如,事务 在行r1 上有共享锁(S 锁)待获取行r2 的排他锁(X 锁)。事务T2 在行r2 上有共享锁锁)并等待获取行 r1 的排他锁(X 锁)。这将导致一个锁循环,中,T1 T2 都等待对已锁定的工作线程。排队等待可用工作线程的任务可能导致死锁。如队等待

6、的任务拥有阻塞所有工作线程的资源,则将导致死锁。会话S1 启动事务并获r1 的共享锁(S 锁)后,进入睡态。在所有可用工作线程上运行的活动会话正尝试获取行 r1 的排锁(X 锁)。因为会话S1 无法获取工作以无法提r1 的锁。这将导并内存。当并发请求等待获得内存,而当前的可用内其需要时,可能发生死锁。例如,两个并发查询(Q1 和 Q2)作为户定义函数执行,分别获取10MB 20MB 的内存。如询需要30MB 而可用总内存为20MB,则Q1 Q2 必须等待方内存,这将导致死并行查询执行的相关资源。通常与交换端口关联的处理协调发生器或使用者并行查询执行的相关资源。通常与交换端口关联的处理协调发生器

7、或使用者线程至少包含一个不属于并行查询的进程时,可能相互阻塞,从而导 请求(请参阅批处理执行环境MARS)用户资源。线程等待可能被用户应用程序控制的资源时该资源将被视为外部资源或用户资源,并将按锁进行处会话互斥体。在一个会话中运行的任务是交叉的,意味在某一给定时间只能在该会话中运行一个任务。任务必须独会话互斥体,才能运行事务互斥体。在一个事务中运行的所有任务是交叉的,味着在某一给定时间只能在该事务中运行一个任务。任务必须独占事务互斥体,才能运任务必须获取会话互斥体,才能在 MARS 下运行。如果任务在下运行,则它必须获取事务互斥体。这将确保在某一给定会话事务中一次仅有一个任务处于活动状态。获取

8、所需互斥体后可以执行了。任务完成或在请求过程中生成时,它将按获取的序事务互斥体,然会话互斥体。但是,这些资源致死锁。在下面的代码示例中,两个任务(用户请求 U1 和用户求 U2)在同一会话中运行用户请求U1 执行过程已获取会话互斥体。如果执行过程花费了很长时间,则数据库引用户请求U1 执行过程已获取会话互斥体。如果执行过程花费了很长时间,则数据库引会认过程正在等待用户入。用户等待U2 的结果集时,用户请求U2 正在等待会话正在等待用户资源。这在逻辑上是死锁状态,如下所示:死锁检测上面列出的所有资源均参与数据库引死锁检测方案。死锁检测锁监视器线程执行的,该线程定期搜索数据库引实例的所有任务以下几

9、点说明了搜默认时间5 秒如果锁监视器线程查找死锁,根据死锁的频率,死锁检测时隔将从5 秒开始减小,最100 毫秒如果锁监视器线程停止查找死数据库将两个搜索间的时间间隔增加到5 秒如果刚刚检测到死锁,则假定必须等待锁的下一个线程正进锁循环。检测到死锁后,第一对锁等待将立即触发死锁搜索等待下一个死锁检测时间间隔。例如,如果当前时间间隔为 5 秒mand1.Execute(insertsometableEXEC mand2.Execute(select c刚刚检测到死锁,则下一个锁等待将立即触发死锁检测器。如果锁等待是死锁的一部分刚刚检测到死锁,则下一个锁等待将立即触发死锁检测器。如果锁等待是死锁的

10、一部分,则将会立即检测它,而不是在下一个搜索期间才检测通常,数据库引仅定期执行死锁检测。因为系统中遇到的死锁常很少,定期死锁检测有助于减少系统中死锁检测的开销。锁监视器对特定线程启动死锁搜索时,会标识线程正在等待的资源。后,锁监视器查找特定资源的所有者,并递归地继续执行对那死锁搜索,直到找到一个循环。用这种方式标识的循环形成一检测到死锁后,数据库引通过选择其中一个线程作为死锁牺牲品来结束死锁。数据库引终止正为线程执行的当前批处理,回滚死锁牲品的事务并将 1205 错误返回到应用程序。回滚死锁牺牲会事务持有的所有锁。这将使其他线程的事,并继死锁牺牲品错误将有关死锁涉及的线程和资源的信在误日志中默

11、认情况下,数据库引选择运行回滚开销最小的事务的会话作为死锁牺牲品。此外,用户也可SETDEADLOCK_PRIORITY句指定死锁情况下会话的优先级。可以将 DEADLOCK_PRIORITY 置为LOW、NORMAL HIGH,也可以将其设置为范围(-10 10)间的任一整数值。死锁优先级的默认设置NORMAL。如果两会话的死锁优先级不同,则会选择优先级较低的会话作为死锁如果两个会话的死锁优先级相同,则会选择回滚开销最低的事作为死锁牺牲品。如果死锁循环中会话的死锁如果两个会话的死锁优先级相同,则会选择回滚开销最低的事作为死锁牺牲品。如果死锁循环中会话的死锁优先级和开销都相同,会随机选择死锁牺

12、牲品使用 CLR 时,死锁监视器将自动检测托管过程的同步资源(器/编写器锁和线程联接)的死锁。但是,死锁是通过在已视器选为死锁牺牲品的过程异常来解决的。因此,请务必理会自牺牲品当前拥有的资源;必须资源。用于牺牲品的异常与异常行为一样获和解死锁信息工具数据库引提供了三个用于查看死锁信息的工具。Deadlock graph。SQL rofiler 中对任务和死锁涉及的资进行图形说明的事件。有关详细信息,请参阅使用 SQL Profiler 分析死锁Trace 1204.返回参与死锁的锁的类型以及当前受影于 SQL Server 2005 错误日志中。在涉及死锁的测试事例果标志1204 时的输出以下

13、示例显示了启Deadlock encountered Pringdeadlock RID:t:3Trace 1222.返回参与死锁的锁的类型以及当前受影Trace 1222.返回参与死锁的锁的类型以及当前受影式类似于 XML且不符合任何 SQL架构结2005错误日志中下列特性说明标志1222 输出的主要属性victim。表示选为死锁牺牲品的任务的物理内存地址(请参sys.dm_os_tasks)。如果任务为无的死可能0(零)。不能选择正在回滚的任务作为死锁牺牲品Flags:GrantListOwner:0 x03364B20 Mode: X:0 x0Ref:0 Life:02000000 S:

14、59 ECID:0 XactLockInfo: 0 x059D67D4:59ECID:0ementType:#: InputBuf:LanguageEvent:execp2 Requested By:ResType:LockOwnerStype:ORXdes:0 x059D6248 Mode: U S:57 BatchID:0 ECID:0TaskProxy:(0 x04AEE33C)Value:0 x335cfe0Cost:(0/216) RID:t:2Flags:GrantListOwner:0 x03364620 Mode: X:0 x0Ref:0 Life:02000000 S:57

15、ECID:0 XactLockInfo: 0 x059D626C:57ECID:0ementType:#: InputBuf:LanguageEvent:execp1 Requested By:ResType:LockOwnerStype:ORXdes:0 x059D67B0 Mode: U S:59 BatchID:0 ECID:0TaskProxy:(0 x05FD433C)Value:0 x33645e0Cost:(0/116) Victim Resource Owner:Mode: U S:59 BatchID:0 ECID:0TaskProxy:(0 x05FD433C) Value

16、:0 x33645e0 priority。表示死锁优先级。在某些情况下,数据库引可能短时间内改变死锁优先级以更好地实priority。表示死锁优先级。在某些情况下,数据库引可能短时间内改变死锁优先级以更好地实现并发。logused。任务使用的日志空间owner id。可控制请求的事务的 IDwaitresource。任务需要waittime。等待资源的时间(毫秒)schedulerid。与此任务关联的计划程序。请参阅sys.dm_os_schedulerslastbatchstarted。客户端进程上次启动批处理执行的时间。pleted。客户端进程上次完成批处理执行的时间cntoption1

17、ntoption2。此客户端连接上的Set XACTABORT)通常控制的tedObjectId。表示HoBT(堆或B 树)ID1222 时在涉及死锁的测试事例中,以下示例显示了启输出deadlock-deadlockvictim=pro s s279b098logused=116waitresource=RID:7:1:141:0 waittime=10000 ownerId=22637XDES=0 x529e7e0lockMode=Uschedulerid=2ksuspended=55sbid=0ecid=0lastbatchstarted=2005-01-pleted=2005-01-c

18、ntapp=SQLServerManagementStudio -hostname=USER13=2852isolationlevel=read committed (2) xactid=236223201313 deadlockvictim=pro s s279b098logused=116waitresource=RID:7:1:141:0 waittime=10000 ownerId=22637XDES=0 x529e7e0lockMode=Uschedulerid=2ksuspended=55sbid=0ecid=0lastbatchstarted=2005-01-pleted=2005-01-cntapp=SQLServerManagementStudio -hostname=USER13=2852isolationlevel=read committed (2) xactid=236223201313 currentdb=7 lockTimeout=cntoption1=671090784c ame=general.dbo.p2stmtstart=186UPDATEt1SETexecexec p2ame=adhoca0s s279b168logused=216 waitresource=RID: 7:1:144:0 owner

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论