显示有关用户会话的统计信息

onstat -u 命令的输出包含关于用户会话的统计信息。

通过将 onstat -x 输出的 userthread 列与 onstat -u 输出的 address 列进行匹配,可以找到事务的会话标识。onstat -u 输出中同一行的 sessid 列提供了该会话标识。

例如:图 1 显示 onstat -x 输出的 userthread 列中的地址为 a335898 。具有相同地址的 onstat -u 的输出行,其 sessid 列显示会话标识 15

图: 在 onstat -x 输出中获取用户线程的会话标识

onstat -x

Transactions
address  flags userthread locks   beginlg curlog  logposit   isol    retrys coord
a366018  A---- a334018    0      0       1       0x22b048  COMMIT  0      
a3661f8  A---- a334638    0      0       0       0x0       COMMIT  0      
a3663d8  A---- a334c58    0      0       0       0x0       COMMIT  0      
a3665b8  A---- a335278    0      0       0       0x0       COMMIT  0      
a366798  A---- a335898    2      0       0       0x0       COMMIT  0      
a366d38  A---- a336af8    0      0       0       0x0       COMMIT  0      
  6 active, 128 total, 9 maximum concurrent


onstat -u

address  flags    sessid  user     tty     wait     tout locks nreads   nwrites
a334018  ---P--D 1        gbasedbt -        0        0    0     20       6
a334638  ---P--F 0        gbasedbt -        0        0    0     0        1
a334c58  ---P--- 5        gbasedbt -        0        0    0     0        0
a335278  ---P--B 6        gbasedbt -        0        0    0     0        0
a335898  Y--P--- 15       gbasedbt 1        a843d70  0    2     64       0
a336af8  ---P--D 11       gbasedbt -        0        0    0     0        0
  6 active, 128 total, 17 maximum concurrent

对于以松耦合方式执行的事务,onstat -u 输出中 flags 列的第一个位置可能会显示 T 值。该 T表示全局事务中的一个分支正在等待其他分支完成。如果全局事务中有两个不同的分支,它们使用同一个数据库并试图同时对同一个全局事务进行操作,就会出现这种情况。

对于在紧耦合方式下执行的事务,此 T 值不会出现,因为对于在全局事务中访问相同数据库的所有分支,在数据库服务器中均共享一个事务结构。 一次只能有一个分支处于已连接的活动状态,并且不等待锁定,因为事务拥有不同分支持有的所有锁定。