数据仓库服务 GAUSSDB(DWS)-事务管理:两阶段事务

时间:2024-04-18 16:25:13

两阶段事务

GaussDB (DWS)属于分布式share-nothing架构,表的数据分布在不同的节点上。客户端的一条或多条语句可能会同时修改多个节点上的数据,这种情况下,会产生分布式事务。GaussDB(DWS)采用两阶段提交事务来保证分布式事务中数据的一致性和事务的原子性。顾名思义,两阶段提交就是将事务提交划分为两个阶段,通常针对的是包含写操作的事务。当写操作将数据写入不同的节点时,需要满足事务的原子性要求,要么全部提交,要么全部回滚。

不支持两阶段的场景如下:

  • 不支持显示的两阶段提交语法PREPARE TRANSACTION。
    1
    2
    3
    BEGIN;
    PREPARE TRANSACTION 'p1';
    ERRORExplicit prepare transaction is not supported.
    
  • 不支持在两阶段事务中修改系统表的文件映射关系。
    1
    2
    REINDEX TABLE pg_class;
    ERRORcannot PREPARE a transaction that modified relation mapping.
    
  • 不支持在跨节点的事务中提交导出事务快照。
    1
    2
    3
    4
    5
    BEGIN;
    CREATE TABLE t1(a int);
    SELECT pg_export_snapshot();
    END;
    ERRORcannot PREPARE a transaction that has exported snapshots.
    
support.huaweicloud.com/sqlreference-830-dws/dws_06_0117.html