使用 onstat -k 查看锁表。图 1 显示了 onstat -k 的样本输出。图 1. 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";
其中,tblsnum 为 onstat -k 返回的修改值。例如,如果 onstat -k 返回 10027f,那么 tbslnum 为 0x0010027F。
您还可以查询 sysmaster 数据库中的 syslocks 表,以获取有关每个活动锁定的信息。syslocks 表包含以下各列。
列 | 描述 |
---|---|
dbsname | 对其保持锁定的数据库 |
tabname | 对其保持锁定的表的名称 |
rowidlk | 持有锁定的行的标识(0 指示表锁定。) |
keynum | 行的关键字数 |
type | 锁定类型 |
owner | 锁定所有者的会话标识 |
waiter | 锁定的第一个等待者的会话标识 |