2017-08-28 1 views
1

私は、デッドロックエラーで失敗したレポートがプロセスID 1017であったというトラブルシューティングを行っています。デッドロックの原因は何ですか?このテキストファイルには、エラーと同じタイムスタンプを持つステートメントがいくつもあり、すべてが同じデッドロックの一部であるように見えます。複数のSQL文がデッドロックを引き起こしていますか?このデッドロックファイルをどのように解釈するかについてのヘルプを探しています。このデッドロックテキストファイルの解釈方法を教えてください。

08/01/2017 17:47:09,spid7s,Unknown,Deadlock encountered .... Printing deadlock information 
08/01/2017 17:47:09,spid7s,Unknown,Wait-for graph 
08/01/2017 17:47:09,spid7s,Unknown, 
08/01/2017 17:47:09,spid7s,Unknown,Node:1 
08/01/2017 17:47:09,spid7s,Unknown,PAGE: 8:11:14583091   CleanCnt:2 Mode:IX Flags: 0x3 
08/01/2017 17:47:09,spid7s,Unknown,Grant List 2: 
08/01/2017 17:47:09,spid7s,Unknown,Owner:0x0000001A725D4100 Mode: IX  Flg:0x40 Ref:0 Life:02000000 SPID:1127 ECID:0 XactLockInfo: 0x0000000E8BEAD400 
08/01/2017 17:47:09,spid7s,Unknown,SPID: 1127 ECID: 0 Statement Type: UPDATE Line #: 130 
08/01/2017 17:47:09,spid7s,Unknown,Input Buf: RPC Event: Proc [Database Id = 8 Object Id = 1454029057] 
08/01/2017 17:47:09,spid7s,Unknown,Requested by: 
08/01/2017 17:47:09,spid7s,Unknown,ResType:LockOwner Stype:'OR'Xdes:0x000000090209A1C0 Mode: S SPID:1017 BatchID:0 ECID:0 TaskProxy:(0x00000008341A8540) Value:0x7380fc00 Cost:(0/0) 
08/01/2017 17:47:09,spid7s,Unknown, 
08/01/2017 17:47:09,spid7s,Unknown,Node:2 
08/01/2017 17:47:09,spid7s,Unknown,PAGE: 8:14:14546741   CleanCnt:2 Mode:S Flags: 0x3 
08/01/2017 17:47:09,spid7s,Unknown,Grant List 0: 
08/01/2017 17:47:09,spid7s,Unknown,Owner:0x0000001A6160EFC0 Mode: S  Flg:0x40 Ref:0 Life:00000001 SPID:1017 ECID:0 XactLockInfo: 0x000000090209A200 
08/01/2017 17:47:09,spid7s,Unknown,SPID: 1017 ECID: 0 Statement Type: SELECT Line #: 1 
08/01/2017 17:47:09,spid7s,Unknown,Input Buf: RPC Event: Proc [Database Id = 8 Object Id = 1584229640] 
08/01/2017 17:47:09,spid7s,Unknown,Requested by: 
08/01/2017 17:47:09,spid7s,Unknown,ResType:LockOwner Stype:'OR'Xdes:0x0000000E8BEAD3C0 Mode: IX SPID:1127 BatchID:0 ECID:0 TaskProxy:(0x0000000E3D92A540) Value:0xee1af100 Cost:(0/5112) 
08/01/2017 17:47:09,spid7s,Unknown, 
08/01/2017 17:47:09,spid7s,Unknown,Victim Resource Owner: 
08/01/2017 17:47:09,spid7s,Unknown,ResType:LockOwner Stype:'OR'Xdes:0x000000090209A1C0 Mode: S SPID:1017 BatchID:0 ECID:0 TaskProxy:(0x00000008341A8540) Value:0x7380fc00 Cost:(0/0) 
08/01/2017 17:47:09,spid16s,Unknown,deadlock-list 
08/01/2017 17:47:09,spid16s,Unknown,deadlock victim=process623b4c8 
08/01/2017 17:47:09,spid16s,Unknown,process-list 
08/01/2017 17:47:09,spid16s,Unknown,process id=process623b4c8 taskpriority=0 logused=0 waitresource=PAGE: 8:11:14583091 waittime=928 ownerId=10726052208 transactionname=SELECT lasttranstarted=2017-08-01T17:47:08.273 XDES=0x90209a1c0 lockMode=S schedulerid=6 kpid=17108 status=suspended spid=1017 sbid=0 ecid=0 priority=0 trancount=0 lastbatchstarted=2017-08-01T17:47:08.273 lastbatchcompleted=2017-08-01T17:47:08.263 clientapp=.Net SqlClient Data Provider hostname=***hostpid=8368 loginname=***isolationlevel=read committed (2) xactid=10726052208 currentdb=8 lockTimeout=4294967295 clientoption1=673185824 clientoption2=128056 
08/01/2017 17:47:09,spid16s,Unknown,executionStack 
08/01/2017 17:47:09,spid16s,Unknown,frame procname=adhoc line=1 stmtstart=2 sqlhandle=0x020000004bafe30b4e652e881b86ef71b9df0ed329054914 
08/01/2017 17:47:09,spid16s,Unknown,@1 varchar(8000)<c/>@2 smallint)SELECT * FROM [vw_OutstandingAdjustedInvoices] WHERE [VendorID][email protected] AND [ServicerRegionCodeID][email protected] 
08/01/2017 17:47:09,spid16s,Unknown,frame procname=adhoc line=1 stmtstart=2 sqlhandle=0x020000003e0235301d588b82abcced6d1ecdb62efc65b46d 
08/01/2017 17:47:09,spid16s,Unknown,SELECT * FROM vw_OutstandingAdjustedInvoices WHERE VendorID='13867' AND ServicerRegionCodeID=1076 
08/01/2017 17:47:09,spid16s,Unknown,frame procname=NewInvoice.dbo.sp_ExecuteMySQL line=41 stmtstart=2986 stmtend=3012 sqlhandle=0x03000800086d6d5eeed84b0165a500000100000000000000 
08/01/2017 17:47:09,spid16s,Unknown,EXEC (@SQL) 
08/01/2017 17:47:09,spid16s,Unknown,inputbuf 
08/01/2017 17:47:09,spid16s,Unknown,Proc [Database Id = 8 Object Id = 1584229640] 
08/01/2017 17:47:09,spid16s,Unknown,process id=process62e5dc8 taskpriority=0 logused=5112 waitresource=PAGE: 8:14:14546741 waittime=1016 ownerId=10726056691 transactionname=UPDATE lasttranstarted=2017-08-01T17:47:08.440 XDES=0xe8bead3c0 lockMode=IX schedulerid=23 kpid=30140 status=suspended spid=1127 sbid=0 ecid=0 priority=0 trancount=2 lastbatchstarted=2017-08-01T17:47:08.440 lastbatchcompleted=2017-08-01T17:47:08.440 lastattention=2017-08-01T10:26:17.713 clientapp=.Net SqlClient Data Provider hostname=****hostpid=7512 loginname=****isolationlevel=read committed (2) xactid=10726056691 currentdb=8 lockTimeout=4294967295 clientoption1=673185824 clientoption2=128056 
08/01/2017 17:47:09,spid16s,Unknown,executionStack 
08/01/2017 17:47:09,spid16s,Unknown,frame procname=NewInvoice.dbo.usp_EInvoice_UpdateReviewedDate line=130 stmtstart=8334 stmtend=9454 sqlhandle=0x0300080001b9aa5699653d00cea200000100000000000000 
08/01/2017 17:47:09,spid16s,Unknown,UPDATE 
08/01/2017 17:47:09,spid16s,Unknown,dbo.EInvoice 
08/01/2017 17:47:09,spid16s,Unknown,SET 
08/01/2017 17:47:09,spid16s,Unknown,ReviewedDate = @ReviewedDate 
08/01/2017 17:47:09,spid16s,Unknown,<c/>FirstReviewedDate = @FirstReviewedDate 
08/01/2017 17:47:09,spid16s,Unknown,<c/>EInvoiceStatusID = @EInvoiceStatusID 
08/01/2017 17:47:09,spid16s,Unknown,<c/>DateUpdated = GETDATE() 
08/01/2017 17:47:09,spid16s,Unknown,<c/>ServicerClickChargeDate = @ServicerClickChargeDate 
08/01/2017 17:47:09,spid16s,Unknown,<c/>ServicerClickChargeAmount = @ServicerClickChargeAmount 
08/01/2017 17:47:09,spid16s,Unknown,<c/>OrdinalNumForDptLoanVnd = @OrdinalNumForDptLoanVnd 
08/01/2017 17:47:09,spid16s,Unknown,<c/>OrdinalNumForDptLoanReferral = @OrdinalNumForDptLoanReferral 
08/01/2017 17:47:09,spid16s,Unknown,<c/>OrdinalNumForReferralTypeLoanVnd = @OrdinalNumForReferralTypeLoanVnd 
08/01/2017 17:47:09,spid16s,Unknown,WHERE EInvoiceID = @EInvoiceID 
08/01/2017 17:47:09,spid16s,Unknown,inputbuf 
08/01/2017 17:47:09,spid16s,Unknown,Proc [Database Id = 8 Object Id = 1454029057] 
08/01/2017 17:47:09,spid16s,Unknown,resource-list 
08/01/2017 17:47:09,spid16s,Unknown,pagelock fileid=11 pageid=14583091 dbid=8 objectname=NewInvoice.dbo.EInvoice id=lock1a6ead2200 mode=IX associatedObjectId=72057596262678528 
08/01/2017 17:47:09,spid16s,Unknown,owner-list 
08/01/2017 17:47:09,spid16s,Unknown,owner id=process62e5dc8 mode=IX 
08/01/2017 17:47:09,spid16s,Unknown,waiter-list 
08/01/2017 17:47:09,spid16s,Unknown,waiter id=process623b4c8 mode=S requestType=wait 
08/01/2017 17:47:09,spid16s,Unknown,pagelock fileid=14 pageid=14546741 dbid=8 objectname=NewInvoice.dbo.EInvoice id=lock1a5cbad580 mode=S associatedObjectId=72057596262678528 
08/01/2017 17:47:09,spid16s,Unknown,owner-list 
08/01/2017 17:47:09,spid16s,Unknown,owner id=process623b4c8 mode=S 
08/01/2017 17:47:09,spid16s,Unknown,waiter-list 
08/01/2017 17:47:09,spid16s,Unknown,waiter id=process62e5dc8 mode=IX requestType=wait 

答えて

3

このデータベースはREAD COMMITTED SNAPSHOT分離を使用しておらず、レポートセッションはSNAPSHOT分離を使用していないため、SELECTクエリではSロックを実行する必要があります。 RCSIでは、SELECTはロックを必要とせず、更新トランザクションと競合しません。これは、更新セッションは、この表の1ページのIXロックを所有しており、ロックオンIXを取得しようとしている

08/01/2017 17:47:09,spid16s,Unknown,frame procname=NewInvoice.dbo.usp_EInvoice_UpdateReviewedDate line=130 stmtstart=8334 stmtend=9454 sqlhandle=0x0300080001b9aa5699653d00cea200000100000000000000 
08/01/2017 17:47:09,spid16s,Unknown,UPDATE 
08/01/2017 17:47:09,spid16s,Unknown,dbo.EInvoice 
08/01/2017 17:47:09,spid16s,Unknown,SET 
08/01/2017 17:47:09,spid16s,Unknown,ReviewedDate = @ReviewedDate 
08/01/2017 17:47:09,spid16s,Unknown,<c/>FirstReviewedDate = @FirstReviewedDate 
08/01/2017 17:47:09,spid16s,Unknown,<c/>EInvoiceStatusID = @EInvoiceStatusID 
08/01/2017 17:47:09,spid16s,Unknown,<c/>DateUpdated = GETDATE() 
08/01/2017 17:47:09,spid16s,Unknown,<c/>ServicerClickChargeDate = @ServicerClickChargeDate 
08/01/2017 17:47:09,spid16s,Unknown,<c/>ServicerClickChargeAmount = @ServicerClickChargeAmount 
08/01/2017 17:47:09,spid16s,Unknown,<c/>OrdinalNumForDptLoanVnd = @OrdinalNumForDptLoanVnd 
08/01/2017 17:47:09,spid16s,Unknown,<c/>OrdinalNumForDptLoanReferral = @OrdinalNumForDptLoanReferral 
08/01/2017 17:47:09,spid16s,Unknown,<c/>OrdinalNumForReferralTypeLoanVnd = @OrdinalNumForReferralTypeLoanVnd 
08/01/2017 17:47:09,spid16s,Unknown,WHERE EInvoiceID = @EInvoiceID 

dbo.EInvoice

テーブルを更新しているストアドプロシージャと競合だ Snapshot Isolation in SQL Server

を参照してください。この表の別のページ。おそらく、それは複数のステートメントのトランザクションであり、すでに他のEInvoiceの行を更新しています。

オプション:

  • スイッチRCSIにデータベースが、これはテストが必要です。
  • SNAPSHOT分離を使用するようにレポートを切り替えますが、これにはアプリケーションコードの変更が必要です。
  • セッションの1つに強制的にテーブルロックを使用すると、競合するロックを取得する前にブロックされます。
1

私はデッドロックの解読を手伝うことができません。デッドロックグラフのテキストバージョンのように見えます。

デッドロックには、常に複数のステートメントが含まれます。 SQL Serverの世界では、デッドロックは2つ以上のプロセス間のリソース(ロック)の競合です。デッドロックの被害者が選ばれるたびに、それは選択声明になります。選択コマンド(読み込み)は最小限のリソースを保持し、ロールバックするのが最も簡単です。 SQL Serverは、最小量のリソースを保持するプロセスをロールバックします。これはおそらくあなたの報告手続きが選ばれた犠牲者であったためです。表示されている他のプロセスのコマンドは、レポートを実行したときにアクティブなクエリでした。

デッドロックグラフの読み込みは簡単ではありません。デッドロックは、通常、重い書き込みの時間中に長い読み取りプロセスが実行されている場合に発生します。デッドロックを防止する方法があります。 deadlock preventionのWeb検索を実行すると、その件に関するいくつかの有益な情報が見つかるはずですが、何らかの予防措置を取っても、システムが十分にビジー状態になると、1つまたは複数のデッドロックが発生します。

重い書き込みの重いシステムをOLTPとOLAPの2つの世界に分割しようとするのが理想的ですが、これは必ずしも実用的ではありません。

レポートが悪影響を、あなたはあなたの結合とテーブルのselect文にNOLOCKヒントを置くか、あなたのストアドプロシージャのread uncommitted transaction isolation levelを指定することで、レポートのストアドプロシージャでこの問題を回避することができます可能性がコミットされていないデータを読むことによって影響されることはありません場合。これは必ずしも理想的ではありませんが、どちらもデッドロックではありません:)

+0

私が大部分を混同しているのは、テキストバージョンのデッドロックグラフに複数のステートメントがあるということです。デッドロックのシナリオでは、あるステートメントが複数のステートメントではなく、別のステートメントをブロックしていると思います。 –

+2

@HunterNelson、デッドロックは定義上2つ(またはそれ以上)のステートメントが互いにブロックしています。 1つのステートメントが別のステートメントをブロックしているときは、デッドロックではなくブロックしているだけです。 –

関連する問題