程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase綜合文章 >> 判斷阻塞發生在某張表上

判斷阻塞發生在某張表上

編輯:SyBase綜合文章
1. 使用sp_lock進行察看,如果 輸出信息 locktype 中包含 -blk 字符,說明當前表 table_id 的 page 上的鎖對其他進程造成了阻塞
2. 通過察看 master..syslocks 系統表

id dbid page type spid class fid context row loid
----------- ------ ----------- ------ ------ ------------------------------ ------ ------- ------ -----------
512004855 6 0 3 13 Non Cursor Lock 0 0 0 26
512004855 6 0 4 12 Non Cursor Lock 0 0 0 24
512004855 6 0 3 10 Non Cursor Lock 0 0 0 20
512004855 6 793 261 13 Non Cursor Lock 0 8 0 26

從spid可知道當前阻塞及被阻塞的進程,並且從type字段可以知道鎖的類型,見下表:
1 0x1 排它表鎖
2 0x2 共享表鎖
3 0x3 排它意圖鎖
4 0x4 共享意圖鎖
5 0x5 排它頁鎖
6 0x6 共享頁鎖
7 0x7 更新頁鎖
8 0x8 排它行鎖
9 0x9 共享行鎖
10 0xA 更新行鎖
11 0xB 共享下一鍵鎖
256 0x100 鎖在阻塞另一個進程
512 0x200 請求鎖

所以你可以通過下面的查詢獲得阻塞表信息
select b.name as dbname,a.id as table_id,page,spid from syslocks a,sysdatabases b
where b.dbid = a.dbid
and a.type & 256 = 256

你也可以寫成一個存儲過程,不過一定要在master中執行。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved