onstat -u 命令的输出包含关于用户会话的统计信息。
通过将 onstat -x 输出的 userthread 列与 onstat -u 输出的 address 列进行匹配,可以找到事务的会话标识。onstat -u 输出中同一行的 sessid 列提供了该会话标识。
图: 在 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 值不会出现,因为对于在全局事务中访问相同数据库的所有分支,在数据库服务器中均共享一个事务结构。 一次只能有一个分支处于已连接的活动状态,并且不等待锁定,因为事务拥有不同分支持有的所有锁定。