欢迎来到天天文库
浏览记录
ID:30779127
大小:308.65 KB
页数:7页
时间:2019-01-03
《sqlserver死锁的分析、处理与预防》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、SQLServer死锁的分析.处理与预防所谓“死锁”,在操作系统的定义是:在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。定义比较抽象,下图可以帮助你比较直观的理解死锁:出现死锁需要满足几个必要条件:a)互斥:进程独占资源,资源不共享;b)请求与保持:已经得到资源的进程可以再次申请新资源;c)不剥夺:已分配的资源不能被其它进程强制剥夺;d)环路等待:几个进程组成环路,都在相互等待正被占用的资源;对应到SQLServer中,在2个或多个任务中(insertvupdate、delete、select、al
2、tertable或Tran事务等等),如果每个任务锁定了其它任务想要锁定的资源,会造成这些任务永久阻塞,从而出现死锁。这些资源可能是:单行数据(RID、HEAP堆中的行)、索引中的键(KEY,行锁)、页(Page,8KB)、区(Extent,8个连续页)、堆或B树、表(Table,数据和索引)、文件(File,数据库文件)、整个数据库(DataBase)。如果系统中的资源不足或者资源分配策略不当,会导致因进程间的资源争用产生死锁现象。但更多的可能是程序员的程序有问题。“锁”有多种方式,如意向锁、共享锁、排他锁等等。锁还有多种粒度,如行锁、表锁。了解了死锁产生的原因
3、,就可以最大可能的避免与预防死锁。只要上述4个必要条件中有1个不满足,就不会发生死锁。所以,在系统设计、实现阶段就可以在资源分配与占用、资源访问顺序等方面采取必要措施。2、一个例子直面死锁,来看一个例子:如图1所示,新建一个查询窗口,并利用事务的原子特性和update语句的排他锁特性把2个表中的记录锁住;如图2所示,再次新建一个查询窗口,2条很简单的SQL语句长时间仍没有执行完成。1123;el78910•曰一根据事务的原子性实现4个必要条件中•L-•请求和等待□BEGINTRAN申一update语句在数据行上加排他锁一和苴它所有锁不兼容-一实现4个必要条件中的.
4、互斤-UPDATEtb_TE_BrandInformationSETIsCompensate^OUPDATEtbSET(DescriptionJ=1•d洶a
5、<278行受影响)2曰BEGINTRANUPDATEtb_TE_SizeInformationSBT(Deocription)-99UPDATEtbTEBrandlnfomAtionSETIsCoopensate0
6、Q«a)0050KT1)3、检测与排查3.1通过Profile工具看死锁Profile是SQLServer自带的跟踪分析工具,开启Profile来捕捉死锁信息可以更直观的看到相关信息。3.2通过系
7、统存储过程看死锁sp_who和sp_lock是SQLServer的2个系统存储过程,可以用它们来查询数据库中的锁情况。sp_who提供有关的数据库实例中当前用户、会话和进程的信息,如下图,我们看到spid二56的会话(UPDATE语句)被spid二54的会话阻塞。利Ieod
8、statuslograneIhostnameMc
9、dbnameIEIrequestjd25270steepssa0masterTASKMANAGER026510steepogLIYM-PCAdmr»tratorUYM-PC0masterAWAITINGCOMMANO"oJ27530steec
10、xngLIYM-PCXAdrumtratorUYM-PC0masterAWAITINGCOMMAND'oJ28540ysleeprigLIYM・PCAdmnsMorftisoendedLIYM*PCAdrniniStratorUYM-PCIJYMPC0梓JYBGDBJYBGDBAWAITINGCOMMANDUPDATE001ir0steeongLIYM•POAdmrwtratorUYM-PC0JYBGDBAWAITINGCOMMAND031590runnableLIYM•PCXAdrrwwtrMorUYM-PC0JYBGDBSELECT"osp_lock提供有
11、关锁的信息,如下图。我们可以通过spid知道是哪个会话锁住了资源,可以通过Objld知道被锁住的资源是什么。$pd
12、dM
13、ObjldIndld
14、Type
15、ResourceMode
16、Status
17、J_541100sGRANT254114216667381(Ia7dce72d522)XGRANT354114216667381(edfa0f0cd530)XGRANT454114216667381KEY](338075145b7e)X丄GRANT554118411442301(756a52cd3e14)XGRANT654114216S67381(55€198543b0a)
18、XGRAN
此文档下载收益归作者所有