使用 onstat -x 命令跟踪开放事务并确定它们是否已经启发式回滚。
例如,在输出中,flags 字段中的 H 标志标识启发式回滚,G 标志标识全局事务,L 标志指示松耦合方式,而 T 标志指示紧耦合方式。
curlog 和 logposit 字段提供逻辑日志记录的准确位置。 如果事务未在回滚,那么 curlog 和 logposit 描述最近写入的日志记录。当事务在回滚时,这些字段描述最近“撤销”的日志记录。在事务回滚时,curlog 和 logposit 值会减少。在长事务中,logposit 和 beginlg 的值汇聚的速率可帮助您估计回滚将需要的更多时间量。
有关 onstat -x 输出的更多信息及其示例,请参阅 GBase 8s 管理员参考。
还可以使用 onstat -u 和 onstat -k 命令跟踪事务以及它们保存的锁。有关详细信息,请参阅《GBase 8s 性能指南》中的监视事务主题。有关 onstat -x 显示的字段的描述,请参阅 GBase 8s 管理员参考。
在辅助服务器上,当启用了故障转移后完成事务(通过设置 FAILOVER_TX_TIMEOUT 配置参数)时,两个全局事务可能有相同的全局事务标识:一个是本地临时全局事务,另一个是属于恢复线程的全局事务。快速区分真正的全局事务与临时事务的方法是,如果真正的事务执行了任何操作,将有一个 B 标志。也可通过使用 onstat -g ath 命令来检查事务的所有者。调用了 xa_end() 函数之后,将删除辅助服务器上的临时全局事务。
以下 onstat 实用程序的示例输出说明了高可用性集群环境中主服务器和辅助服务器上对 XA 事务的支持。onstat -x、onstat -G 和 onstat -ath 命令会单独记录,但是组合的 onstat -xG 命令的输出专门针对全局事务。示例显示了重定向事务的每种状态。
在示例中,所显示的在辅助服务器上运行的全局事务是临时事务。临时事务用于支持在辅助服务器上执行的 SQL 语句(而非重定向到主服务器的事务)。仅当用户线程主动与全局事务分支关联时,才会显示临时事务。
以下示例显示运行 xa_start() 函数之后在辅助服务器上运行的 onstat -xG 命令生成的输出:
Transactions est. address flags userthread locks begin_logpos current logpos isol rb_time retrys coord 7000000104d4190 AT--G 7000000104a7b68 0 - - LC - 0 7000000104d8bd0 ALB-G 7000000104a5aa8 1 180:0x0 180:0x4eb018 DIRTY 0:00 0 Global Transaction Identifiers address flags isol timeout fID gtl bql data 7000000104d4190 AT--G COMMIT 0 5067085 15 4 000102030405060708090A0B0C0D0E0F000000 7000000104d8bd0 ALB-G DIRTY 0 5067085 15 4 000102030405060708090A0B0C0D0E0F000000
在辅助服务器上运行的 onstat -g ath 生成的输出:
Threads: tid tcb rstcb prty status vp-class name 317 7000001500902c8 7000000104a7b68 1 cond wait netnorm 1cpu sqlexec 84 7000001403a7dc0 7000000104a5aa8 3 sleeping secs: 1 5cpu xchg_2.0
在主服务器上运行的 onstat -xG 生成的输出:
Transactions est. address flags userthread locks begin_logpos current logpos isol rb_time retrys coord 7000000104d9e60 ATB-M 7000000104a8bc8 2 180:0x4ea018 180:0x4eb018 COMMIT 0:00 0 Global Transaction Identifiers address flags isol timeout fID gtl bql data 7000000104d9e60 AT--M COMMIT 0 5067085 15 4 000102030405060708090A0B0C0D0E0F000000
以上示例中的 M 标志指示全局事务是从辅助服务器启动的。在主服务器上启动的全局事务会显示 G 标志。M 标志仅在主服务器上显示。
onstat -g ath|grep 7000000104a8bc8 命令生成的输出:
196 70000013012d3a8 7000000104a8bc8 1 sleeping secs: 1 4cpu proxyTh
以下示例显示运行 xa_end() 函数之后在辅助服务器上运行 onstat -xG 命令生成的输出:
Transactions est. address flags userthread locks begin_logpos current logpos isol rb_time retrys coord 7000000104d8bd0 ALB-G 7000000104a5aa8 1 180:0x0 180:0x4ee018 DIRTY 0:00 0 Global Transaction Identifiers address flags isol timeout fID gtl bql data 7000000104d8bd0 ALB-G DIRTY 0 5067085 15 4 000102030405060708090A0B0C0D0E0F000000
在主服务器上运行 onstat -xG 命令生成的输出:
Transactions est. address flags userthread locks begin_logpos current logpos isol rb_time retrys coord 7000000104d9e60 -TB-M 0 2 180:0x4ea018 180:0x4ee018 COMMIT 0:00 0 Global Transaction Identifiers address flags isol timeout fID gtl bql data 7000000104d9e60 -T--M COMMIT -1 5067085 15 4 000102030405060708090A0B0C0D0E0F000000
运行 xa_prepare() 函数之后在辅助服务器上运行 onstat -xG 命令生成的输出:
Transactions est. address flags userthread locks begin_logpos current logpos isol rb_time retrys coord 7000000104d8bd0 ALX-G 7000000104a5aa8 1 180:0x0 180:0x4ef018 DIRTY 0:00 0 Global Transaction Identifiers address flags isol timeout fID gtl bql data 7000000104d8bd0 ALX-G DIRTY 0 5067085 15 4 000102030405060708090A0B0C0D0E0F000000
在主服务器上运行 onstat -xG 命令生成的输出:
Transactions est. address flags userthread locks begin_logpos current logpos isol rb_time retrys coord 7000000104d9e60 -TX-M 0 2 180:0x4ea018 180:0x4ef018 COMMIT 0:00 0 Global Transaction Identifiers address flags isol timeout fID gtl bql data 7000000104d9e60 -TX-M COMMIT -1 5067085 15 4 0