2.5.4 XA事务的记录

2.5.4.1 XA 事务过程中记录的内容

由于在Dble中采用两段提交的分布式事务,所以使用XA事务的时候对于DBLE本身就拥有了状态。状态就需要有文件或者其他方式的记录,其中关于XA事务细节的记录主要是记录以下几个部分

       1. 事务ID
       2. 事务状态
       3. 事务中每个节点的连接host
       4. 事务中每个节点的连接端口
       5. 事务中每个节点连接最后的事务状态
       6. 事务中每个节点连接的过期状态(没有实际作用)
       7. 事务中每个节点连接对应的后端数据库

这里举例一个记录的实例

{
    "id": "'Dble_Server.1.15'",
    "state": "8",
    "participants": [
        {
            "host": "10.186.24.37",
            "port": "3308",
            "p_state": "8",
            "expires": 0,
            "schema": "db3",
            "tableName": "testdb.test1",
            "repeatTableIndex": 0
        },
        {
            "host": "10.186.24.37",
            "port": "3306",
            "p_state": "8",
            "expires": 0,
            "schema": "db2",
            "tableName": "testdb.test2",
            "repeatTableIndex": 0
        },
        {
            "host": "10.186.24.37",
            "port": "3308",
            "p_state": "8",
            "expires": 0,
            "schema": "db2",
            "tableName": "testdb.test3",
            "repeatTableIndex": 0
        },
        {
            "host": "10.186.24.37",
            "port": "3306",
            "p_state": "8",
            "expires": 0,
            "schema": "db1",
            "tableName": "testdb.test4",
            "repeatTableIndex": 0
        }
    ]
}

2.5.4.2 XA事务中status的标识字典

status 状态 解释
0
TX_INITIALIZE_STATE
XA事务处于初始化状态
1
TX_STARTED_STATE

XA事务处于开始状态,在事务开始直到提交或者回滚之前

XA事务的状态一直会保持此状态

2
TX_ENDED_STATE
XA END下发成功状态
3
TX_PREPARED_STATE
XA PREPARED成功状态
4
TX_PREPARE_UNCONNECT_STATE
XA PREPARED下发过程中连接被断开
5
TX_COMMIT_FAILED_STATE
XA COMMIT 下发失败
6
TX_ROLLBACK_FAILED_STATE
XA ROLLBACK 失败
7
TX_CONN_QUIT
后端mysql连接失败
8
TX_COMMITTED_STATE
XA 事务提交成功
9
TX_ROLLBACKED_STATE
XA 事务回滚成功
10
TX_COMMITTING_STATE
XA 事务正在提交
11
TX_ROLLBACKING_STATE
XA 事务正在回滚
12
TX_PREPARING_STATE
XA 事务正在下发prepare

2.5.4.3 XA事务记录的存储方式

一、本地文件方式

顾名思义在这种方式下,xa事务的状态将以本地记录文件的方式被存放到对应的文件中,具体的路径和文件名配置是

配置与bootstrap.cnf中的{xaRecoveryLogBaseDir}/{XaRecoveryLogBaseName}.log默认条件下文件会被储存在./tmlogs/tmlogs-1.log

一般只在Dble单机状态下使用本地文件方式,使用集群时本地文件的方式将在集群状态下造成不可预知的错误

二、ZK存储方式

ZK存储方式不需要额外的配置,当Dble使用ZK配置时,自动默认XA事务记录的存储方式也会是ZK存储

具体的XA事务记录的内容保持不变,记录在dble/{clusterId}/XALOG/{myid} 的Key值中

2.5.4.4 其他补充

参与记录规则

1、仅Sharding用户执行的相关事务,参与记录(RwSplit用户不参与统计);
2、有效(真正意义上的开启或结束显式事务)的事务控制语句,如begin等,参与记录;
3、事务中,Modify类型sql,都参与记录;
4、非事务中,Modify类型且实际下发多个节点的sql,才参与记录;
(Modify定义:具有修改数据或结构的sql)

results matching ""

    No results matching ""