MSSQL·查看表鎖進程及殺死進程的腳本


閱文時長 | 0.59分鍾 字數統計 | 955.2字符
主要內容 | 1、引言&背景 2、聲明與參考資料
『MSSQL·查看表鎖進程及殺死進程的腳本』
編寫人 | SCscHero 編寫時間 | 2021/8/10 AM11:52
文章類型 | 系列 完成度 | 已完成
座右銘 每一個偉大的事業,都有一個微不足道的開始。

一、引言&背景   完成度:100%

a) 應對問題

  1. 如何查看表鎖進程?
  2. 如何查看資源等待的腳本?
  3. 如何殺死指定的表鎖進程?
  4. With Lock的如何使用?

b) 應對場景

  1. 適用於MSSQL下表鎖、資源等待的場景。
  2. 從現象上來說,表現為執行腳本或存儲過程異常緩慢。

c) 解決原理&方法

  1. 查看表鎖進程。
SELECT SPID=request_session_id, TABLENAME=OBJECT_NAME(resource_associated_entity_id), *
FROM sys.dm_tran_locks
WHERE resource_type='OBJECT';
  1. 查看資源等待的腳本。
SELECT r.session_id, s.login_name, r.status, blocking_session_id, blocks.login_name AS blockingLoginName, blocks.open_transaction_count AS blockingOpenTransCount, blocks.status AS blockingSessionStatus, r.start_time, s.client_interface_name, s.host_name, wait_type, wait_time, wait_resource, transaction_id, r.command, DB_NAME(r.database_id), CONVERT(DECIMAL(10, 2), r.estimated_completion_time / 1000.0 / 60.0 / 60.0) AS [ETA hours], CONVERT(VARCHAR(1000), (SELECT SUBSTRING(text, r.statement_start_offset / 2, CASE WHEN r.statement_end_offset=-1 THEN 1000 ELSE (r.statement_end_offset-r.statement_start_offset)/ 2 END)
FROM sys.dm_exec_sql_text(sql_handle) ))
FROM sys.dm_exec_requests r
     LEFT JOIN sys.dm_exec_sessions blocks ON r.blocking_session_id=blocks.session_id
     LEFT JOIN sys.dm_exec_sessions s ON r.session_id=s.session_id
WHERE 1=1 AND(r.status IN (N'suspended', N'running')OR blocking_session_id<>0);
  1. 殺死指定的表鎖進程。
KILL [SPID] --[SPID]即為表鎖進程ID
  1. With Lock的使用方式,在不想要鎖表的地方加上。
SELECT * FROM [TABLE] WITH(NOCOCK)

二、聲明與參考資料   完成度:100%

原創博文,未經許可請勿轉載。

如有幫助,歡迎點贊、收藏、關注。如有問題,請評論留言!如需與博主聯系的,直接博客私信SCscHero即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM