1

Service Broker 使用時のデッドロックの問題

テーブルのセットに複数の更新と挿入を作成する必要があるという要件があります。 このため、処理のために受信した一連のデータに基づいて、ネストされたトランザクション内で
複数のストアド プロシージャを呼び出すマスター ストアド プロシージャが呼び出されます。
マスター プロシージャを 1 つずつ呼び出すと時間がかかるため、Service Broker を使用しています。
マスター ストアド プロシージャ内で、レコードを 3 つのテーブルに挿入し、他の 3 つを更新するいくつかのストアド プロシージャを呼び出します。
関連するすべてのテーブルにインデックスが付けられます。これには Service Broker を使用していますが、デッドロックの状況に直面しています。各 SP 呼び出しは、常に一意のレコードで常に機能します。

デッドロック グラフの詳細

<Column name="TextData" id="1">
<deadlock-list> 
<deadlock victim="process387bab0"> 
<process-list> 
<process id="process387bab0" taskpriority="0" logused="50076" waitresource="KEY: 8:72057599133024256 (53975579c7be)" 
waittime="3458" ownerId="1880362" transactionname="ACTIVATE_ENTITY" lasttranstarted="2012-04-16T12:56:06.713" 
XDES="0x3d5cf590" lockMode="U" schedulerid="1" kpid="7036" status="background" spid="21" sbid="0" ecid="0" 
priority="0" trancount="2"> 
<executionStack> <frame procname="unknown" sqlhandle="0x000000000000000000000000000000000000000000000000"> unknown </frame> 
<frame procname="CMS.dbo.IntOnCaseCreationMessageReceive" line="102" stmtstart="6488" stmtend="6594" 
sqlhandle="0x0300080076459b5a8f92150131a000000100000000000000"> EXECUTE [dbo].MasterSP @MessageBody, 1 </frame> 
</executionStack> <inputbuf> </inputbuf> </process> <process id="process8588388" taskpriority="0" logused="64476" 
waitresource="KEY: 8:72057599261540352 (9fea6888fb07)" waittime="1573" ownerId="1879248" 
transactionname="ACTIVATE_ENTITY" lasttranstarted="2012-04-16T12:56:02.140" XDES="0xc313860" 
lockMode="RangeS-S" schedulerid="1" kpid="7372" status="background" spid="20" sbid="0" ecid="0" 
priority="0" trancount="2"> <executionStack> <frame procname="unknown" sqlhandle="0x000000000000000000000000000000000000000000000000"> unknown </frame> 
<frame procname="CMS.dbo.IndividualSPToBeCalled" line="102" stmtstart="6488" stmtend="6594" 
sqlhandle="0x0300080076459b5a8f92150131a000000100000000000000"> EXECUTE [dbo].IntCreateCases_SB @MessageBody, 1 </frame> </executionStack> 
<inputbuf> </inputbuf> </process> </process-list> <resource-list> <keylock hobtid="72057599133024256" dbid="8" 
objectname="CMS.dbo.TABLE1" indexname="PK_TABLE1" id="lock1e393540" mode="X" associatedObjectId="72057599133024256"> <owner-list> 
<owner id="process8588388" mode="X"/> </owner-list> <waiter-list> <waiter id="process387bab0" mode="U" requestType="wait"/> 
</waiter-list> </keylock> <keylock hobtid="72057599261540352" dbid="8" objectname="CMS.dbo.TABLE2" indexname="IX_TABLE2_ON_ID" 
id="lock42febd80" mode="X" associatedObjectId="72057599261540352"> <owner-list> <owner id="process387bab0" mode="X"/> </owner-list> 
<waiter-list> <waiter id="process8588388" mode="RangeS-S" requestType="wait"/> </waiter-list> </keylock> </resource-list> </deadlock> 
</deadlock-list> </Column>
4

0 に答える 0