[SQL SERVER] 找出LOCK方法懶人包

話說休假回公司才不到兩天SQL SERVER就出狀況 Orz

昨天同事跟我說文件系統不能存取ID, 第一件事當然想到是存放ID的資料表LOCK住了.

要查出LOCK方法其實有很多, 以下是小弟歸納的網路資源, 希望幫到大家

什麼是LOCK?
德瑞克大的解釋很詳細: http://sharedderrick.blogspot.com/2007/12/blocked-lock-connectoin.html

sp_lock:
使你對系統中發生的LOCK有深入的了解。它會從master資料庫中的syslockinfo中截取與LOCK相關的大量訊息[1]. 不過我認為由於這個功能的資訊太多, 而且資料沒有好好的做sorting, 所以在危急關頭未必有閒去慢慢看.
在sp_lock會看到spid、dbid、objid、indid、type、resource、mode和status共八個欄位[2].

  • spid: 連線ID. 可配塔sp_who找出用那些用戶和該連線(spid)有關連.
  • dbid: 資料庫的唯一編號
  • Objid: 資料表的唯一編號, 可用select object_id('<table name>') 找到資料表相關Objid
其他的欄位可以在這裡找到相關意思.

sp_who2
sp_who的加強版本. sp_who主要提供 Microsoft SQL Server Database Engine 執行個體中有關目前使用者、工作階段和處理序的資訊[3]。而sp_who2比較像是sp_who的view, 把sp_who的資料整理得比較好. 小弟經常用它來找出那台PC的發出的process產生了LOCK. 然後毆飛那個user


列出最初導致一連串其它處理序被鎖住的起始源頭(Blocking locks)
很多時候LOCK住的原因是其他的LOCK引發的, 要找出這種關係可以用下面網址的SQL


取得 SQL Server 資料庫正在執行的 T-SQL 指令與詳細資訊
個人認為這是最有用的TSQL. 很多時候除了要找出那個process發生問題以外, 重點是找出那一條在執行的SQL出了狀況 然後把programmer砍掉,  這次小弟就是使用WILL保哥的SQL解決問題啦


好好學習SQL Server Lock的類型



[1] 用sp_lock診斷SQL Sever的性能問題-Mssql數據庫教程
[2] msdn sp_lock
[3] msdn sp_who

Popular posts from this blog

[SQL Server] 解決log檔(ldf file)過度膨脹的實戰經驗

[Windows7] 跨距磁碟區, 等量磁碟區, 鏡像磁碟區之區別