SQLServerのロックについて

SQLServerのロックについてメモです。

SQLServerを使用していて稀にロックがかかり、SQLがロックされタイムアウトでエラーになることがあります。
その調査として下記のクエリでロックの有無を確認するsys.dm_tran_locksシステムビューですぐに確認できます。
SELECT * FROM sys.dm_tran_locks

わかりやすくしたクエリが下記です。
SELECT
resource_type AS type –オブジェクトの種類
,resource_associated_entity_id as entity_id –エンティティID
,( CASE WHEN resource_type = ‘OBJECT’ THEN
OBJECT_NAME( resource_associated_entity_id )
ELSE
( SELECT
OBJECT_NAME( OBJECT_ID )
FROM
sys.partitions
WHERE
hobt_id=resource_associated_entity_id )
END)
AS object_name
,request_mode –ロックの種類
,request_type –要求の種類
,request_status –状態
,request_session_id AS Session_id –セッションID
,(SELECT hostname
FROM sys.sysprocesses
WHERE spid = request_session_id) AS ProcessName
FROM
sys.dm_tran_locks
WHERE
resource_type ‘DATABASE’
ORDER BY
request_session_id

ロックされたテーブルを確認できたら削除を実行します。

上記でセッションIDが把握できれば下記で削除コマンドを実行します。
KILL ;

これでロック状態が解除できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です