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を実行します。
プロセスを終了後、テーブルが書きこみ可能になっているか確認します。