监视锁定

可以分析有关锁定的信息并通过查看包含存储锁定的内部锁表中的信息来监视锁定。

使用 onstat -k 查看锁表。图 1 显示了 onstat -k 的样本输出。

图: onstat -k 输出

Locks
address  wtlist   owner    lklist   type     tblsnum  rowid    key#/bsiz
300b77d0 0        40074140 0        HDR+S    10002    106        0
300b7828 0        40074140 300b77d0 HDR+S    10197    123        0
300b7854 0        40074140 300b7828 HDR+IX   101e4    0          0
300b78d8 0        40074140 300b7854 HDR+X    101e4    102        0
  4 active, 5000 total, 8192 hash buckets 
在此示例中,用户正在向表中插入一行。 该用户保持以下锁定(以所显示的顺序描述):
  • 对数据库的共享锁定
  • systables 系统目录表中某行的共享锁定
  • 对表的意向互斥锁定
  • 对行的互斥锁定
要确定锁定应用到的表,请执行 以下 SQL 语句。对于 tblsnum,替换上 onstat -k 输出中的 tblsnum 字段显示的值。
SELECT *
      FROM SYSTABLES
   WHERE HEX(PARTNUM) = "tblsnum";
其中,tblsnumonstat -k 返回的修改值。例如,如果 onstat -k 返回 10027f,那么 tbslnum0x0010027F

您还可以查询 sysmaster 数据库中的 syslocks 表,以获取有关每个活动锁定的信息。syslocks 表包含以下各列。

描述
dbsname 对其保持锁定的数据库
tabname 对其保持锁定的表的名称
rowidlk 持有锁定的行的标识(0 指示表锁定。)
keynum 行的关键字数
type 锁定类型
owner 锁定所有者的会话标识
waiter 锁定的第一个等待者的会话标识