233
7.5 Blocages et deadlocks
CREATE TABLE dbo.testblocage ( id int )
BEGIN TRAN
INSERT dbo.testblocage ( id ) VALUES( 1 )
GO
-- dans une autre session
SELECT * FROM sandbox.dbo.testblocage
Le SELECT est mis en attente de libération du verrou exclusif posé par la transaction d’insertion. Au bout du temps déterminé par l’option 'blocked process threshold', la notification d’événement posera une ligne dans la file d’attente
NotifyQueue. Nous pouvons simplement faire un SELECT sur cette queue :
SELECT CAST(message_body as XML) as msg
FROM NotifyQueue;
Le résultat est le suivant :

BLOCKED_PROCESS_REPORT
2008-05-15T13:16:40.797
4



waitresource="RID: 7:1:204:0" waittime="13843" ownerId="289041"
transactionname="SELECT" lasttranstarted="2008-05-15T13:16:26.950"
XDES="0x102331d0" lockMode="S" schedulerid="2" kpid="4224"
status="suspended" spid="54" sbid="0" ecid="0" priority="0"
transcount="0" lastbatchstarted="2008-05-15T13:16:26.950"
lastbatchcompleted="2008-05-15T13:11:12.077"
lastattention="2008-05-15T13:11:12.077"
clientapp="Microsoft SQL Server Management Studio - Query"
hostname="BABALUGA-XPS" hostpid="1804" loginname="BABALUGA-XPS\rudi"
isolationlevel="read committed (2)" xactid="289041" currentdb="1"
lockTimeout="4294967295" clientoption1="671090784"
clientoption2="390200">

sqlhandle="0x0200000077178b24288485b9f690b6810f187eb9cd7ba294" />


SELECT * FROM sandbox.dbo.testblocage




priority="0" transcount="1" lastbatchstarted="2008-05-15T13:16:19.700"
lastbatchcompleted="2008-05-15T13:16:19.700"
clientapp="Microsoft SQL Server Management Studio - Query"
hostname="BABALUGA-XPS" hostpid="1804" loginname="BABALUGA-XPS\rudi"
isolationlevel="read committed (2)" xactid="289008" currentdb="7"
Précédent

- 245/334

Suivant