2017-01-12 4 views
2

プロダクトSQLインスタンスを2012年から2016年にアップグレードしました。それが存在する場合にはデッドロックを見つけるために努力してきたように、私はちょうど直面しているし、何が起こっているかを理解していません。私は問題を理解していない理由は、1つのセッションが別のセッションをブロックしているが、ブロッキングセッションが選択クエリセッションです。別のセッションがテーブルを挿入するのを防ぎます。SELECTクエリはSQL Serverのテーブルまたはページをロックしますか?

ブロックされたセッションクエリは次のとおりです。

INSERT INTO [AUDITHISTORYLOG_BACKUP_2017_1]([TABLE_NAME],[OPERATION_TYPE],[HOST_NAME],[USER_NAME],[PRIMARY_KEY],[FIELD],[OLD_VALUE],[NEW_VALUE],[CREATE_DATE]) values(@1,@2,@3,@4,@5,@6,@7,@8,@9) 

ブロックセッションのクエリは、次のとおりです。

SELECT * FROM AuditDB.dbo.AUDITHISTORYLOG_BACKUP_2017_1 WHERE CREATE_DATE>CAST(GETDATE()-30 AS DATE) ORDER BY CREATE_DATE DESC 

この選択クエリは、挿入トランザクションをどのようにブロックしますか?

Wait_Type:LCK_M_IX
Wait_Resource:PAGE:10:1:20598647
トランザクション分離レベル:読み取り

をコミット誰が助けることはできますか?

答えて

5

この選択クエリは、挿入トランザクションをどのようにブロックしますか?

はい、ロックの種類には互換性がありません。 SELECTクエリはSHAREDのロックが必要ですが、INSERTのロックはEXCLUSIVEのロックが必要です。両方とも互換性がありません。つまり、排他ロックが要求されている同じリソース(あなたのケースではAUDITHISTORYLOG_BACKUP_2017_1テーブル)に存在する共有ロックです。共有ロックが解除されるか共有ロックが解除されるまで、その排他ロックは許可されません。

+0

排他ロックでは共有ロックを解除する必要があることはわかりませんでした。また、このアップグレードの前にこの種の問題に直面したことはありません。それが質問の原因を掘り起こす理由です。 –

+0

https://technet.microsoft.com/en-us/library/ms186396(v=sql.105).aspx –

+0

回答ありがとうございます。 –

関連する問題