ある時ManagementStudioでselect文を実行したが、結果が返ってこないという事象が発生した。
恐らくデッドロックだろうと思い、調査を実施した。その際の覚え書き。
1. テーブル名からlock一覧とそのセッションのsession idを取得
SELECT *
FROM sys.dm_tran_locks
WHERE resource_associated_entity_id =(SELECT TOP 1 object_id FROM sys.partitions WHERE OBJECT_NAME(object_id)='テーブル名';
引用元
https://qiita.com/hexia/items/98c9b603e91c5eadb025
上記を実行するとsession idが表示される。
2. 利用状況モニター起動
Management Studioの上部のグラフのようなアイコンをクリック。
3. 該当セッションを強制終了
上記で取得したsession idの行が該当セッションとなる。ipアドレスやアプリの情報が表示されているため、そのアプリを終了するなどの対処を実施する。場合によってはセッション強制終了を行う。確か利用状況モニターの該当行を右クリックから強制終了出来たはず。
まぁDB再起動でもいいんだが、原因は知っといた方がいいので。
因みに今回はデッドロックではなく、手動でbegin transactionしてcommitが漏れてたというオペミスだった。
この場合は残っていたクエリウィンドウでcommitが正しい対処。
0 件のコメント:
コメントを投稿