特定のテーブルで Insert や Updateがタイムアウトする - SQL Server

SQL Serverで特定のテーブルだけでInsertやUpdateがタイムアウトになり、レコードの追加や編集ができない場合の対処法について紹介します。

原因

原因はいくつか考えられますが、特定のテーブルで編集コマンド(Insert, Update)のSQLにタイムアウトになる場合は、テーブルがロックされている可能性が高いです。何らかのきっかけでテーブルがロックされたままになっている可能性があります。
補足
データベースやサーバーを再起動してもロックは保持されるため、サーバーの再起動では解決しません。

対処法

ロックの状態を確認する

データベースのロック状態を確認します。下記のSQLを実行します。
select DB_NAME(resource_database_id),resource_type, request_type,request_session_id 
  from sys.dm_tran_locks

解説

sys.dm_tran_locks でロックされている要素の一覧を取得します。(sys.dm_tran_locks は現在アクティブなロック マネージャーのリソースを返します。)
resource_database_id は対象となる、データベースIDですが、ID番号ではどのデータベースか判別しづらいため、DB_NAME関数の引数に与えデータベース名に変換します。


結果は以下の表示となります。


結果の一覧から、編集のできないデータベース名の要素を探し "request_session_id" の番号を控えます。

プロセスの終了

kill コマンドを使用してプロセスを終了します。

書式

kill (プロセス番号)

先の例で、14行目のロックされている要素のプロセスを削除する場合は
kill 61
のSQLを実行します。

動作確認

プロセスを終了後、テーブルが書きこみ可能になっているか確認します。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2024-01-07
作成日: 2014-11-02
iPentec all rights reserverd.