[SQL Server] 特定のテーブルで 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について
iPentec all rights reserverd. (ISDC)