onstat -k 命令:打印活动的锁信息

可以使用 onstat -k 命令打印活动锁的信息,包括锁表中的该锁的地址。

语法:

示例输出

可用锁的最大数量由 onconfig 文件中的 LOCKS 配置参数进行指定。

图: onstat -k 命令输出

            Locks
            address  wtlist   owner    lklist   type     tblsnum  rowid    key#/bsiz
            a095f78  0        a4d9e68  0        HDR+S    100002   203         0   
            1 active, 2000 total, 2048 hash buckets, 0 lock table overflows
在以下输出中,最后一行的数字 2 显示的是一个 Enterprise Replication 伪锁:
Locks 
          address  wtlist    owner    lklist   type    tblsnum  rowid    key#/bsiz
          a1993e8  0         5c2f03d0 a19be30     S         2   1c05a            0

输出描述

address
锁表中锁的地址

如果用户线程正在等待该锁,那么锁的地址出现在 onstat -u (用户)输出的 wait 字段中。

wtlist
是正在等待锁的用户线程(如果有)列表中的第一项
owner
是正持有锁的线程的共享内存地址

此地址对应于 onstat -u (用户)输出的 address 字段中的地址。当 owner 值显示在括号中时,它代表事务结构的共享内存地址。只有锁是为全局事务而分配时,才会出现这种情况。该地址对应于 onstat -G 的输出的地址字段

lklist
是刚才列出的所有者所持有的链接列表中的下一个锁
type
使用以下代码指定锁的类型:
HDR
B
字节
S
共享
X
互斥
I
意向
U
更新
IX
意向—互斥
IS
意向—共享
SIX
共享,意向—互斥
tblsnum
是锁定资源的 tblspace 编号。如果数值小于 10000,那么它表示 Enterprise Replication 伪锁
rowid
是行标识号

Rowid 提供以下锁的信息:

  • 如果 rowid 等于 0 那么该锁为表锁
  • 如果 rowid 以两个 0 结束,那么该锁为页锁
  • 如果 rowid 为 6 个数字或更少且不以 0 结束,那么该锁很可能是行锁
  • 如果 rowid 多于 6 个数字,那么该锁很可能是索引键值锁
key#/bsiz
是索引键号或对于 VARCHAR 锁的已锁定字节数

如果该字段包含 'K-' ,后跟值,那么是键锁。值标识哪个索引正在被锁定。例如:K-1 表示对表所定义的第一个索引上的锁。