监视全局事务

使用 onstat -x 命令跟踪开放事务并确定它们是否已经启发式回滚。

例如,在输出中,flags 字段中的 H 标志标识启发式回滚,G 标志标识全局事务,L 标志指示松耦合方式,而 T 标志指示紧耦合方式。

curloglogposit 字段提供逻辑日志记录的准确位置。 如果事务未在回滚,那么 curloglogposit 描述最近写入的日志记录。当事务在回滚时,这些字段描述最近“撤销”的日志记录。在事务回滚时,curloglogposit 值会减少。在长事务中,logpositbeginlg 的值汇聚的速率可帮助您估计回滚将需要的更多时间量。

有关 onstat -x 输出的更多信息及其示例,请参阅 GBase 8s 管理员参考

还可以使用 onstat -uonstat -k 命令跟踪事务以及它们保存的锁。有关详细信息,请参阅《GBase 8s 性能指南》中的监视事务主题。有关 onstat -x 显示的字段的描述,请参阅 GBase 8s 管理员参考

在辅助服务器上,当启用了故障转移后完成事务(通过设置 FAILOVER_TX_TIMEOUT 配置参数)时,两个全局事务可能有相同的全局事务标识:一个是本地临时全局事务,另一个是属于恢复线程的全局事务。快速区分真正的全局事务与临时事务的方法是,如果真正的事务执行了任何操作,将有一个 B 标志。也可通过使用 onstat -g ath 命令来检查事务的所有者。调用了 xa_end() 函数之后,将删除辅助服务器上的临时全局事务。

以下 onstat 实用程序的示例输出说明了高可用性集群环境中主服务器和辅助服务器上对 XA 事务的支持。onstat -xonstat -Gonstat -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