联 系 我 们
售前咨询
售后咨询
微信关注:星环科技服务号
更多联系方式 >
9.3 事务控制
更新时间:11/28/2024, 3:27:28 AM

我们提供自动提交、手动提交两种事务提交方式。如无指定,SQL 会以自动提交的方式提交事务。

本节主要包括 手动提交事务设置事务级别管理事务

手动提交事务

第一步:设置参数 transaction.type=holodesk

transaction.type 用于手动指定事务表的事务管理器。

引入版本:1.3 作用域:session、global

默认值:none

范围:none、holodesk、inceptor

  • 作用:设置参数为 none 时,Inceptor 会根据事务表的类型(HOLODESK)自动选择对应的事务管理器保证 ACID。

  • 限制:begin transaction手动开启一个事务时,需要先设置transaction.type手动指定事务管理器。

第二步:begin transaction

提交事务
set transaction.type=holodesk;
begin transaction;
Batchinsert into acid_test batchvalues(
values(1),
values(1)
);    ----此时事务并未提交
commit;    ----此时事务提交,数据真正写入
复制

此方式下,要求待操作的表为 Holodesk 存储格式,不可与其他存储格式的表(如 TORC)混合操作。

回滚事务
set transaction.type=holodesk;
begin transaction;
Batchinsert into acid_test batchvalues(
values(2),
values(2)
);    ----此时事务并未提交
rollback;    ----此时事务回滚,数据并未写入
复制

设置事务级别

我们提供完整的事务支持能力,用户可以通过 restful 的方式设置数据库的事务级别。

  • SerializableSnapshot,基于快照的可串行化,即 SSI

  • Serializable,基于悲观锁的可串行化

  • RepeatableRead,可以重复读

  • ReadCommitted,读提交

  • ReadUncommitted,读未提交

查看当前的事务级别
curl -X GET "<host>:<port>/bulk_transaction_isolation?[pretty]"
复制
设置事务级别
curl -X PUT "<host>:<port>/bulk_transaction_isolation?level=<isolation_level>&[timeout_s=<timeout>]"
复制

管理事务

Inceptor 支持当前锁情况的查询,以及自动分析锁等待链,提供诊断视图的能力。

下面我们提供一个功能演示:

第一步:通过两个客户端分别登陆 user1 和 user2 两个用户

第二步:在 user1 会话界面,执行下述 SQL 语句:

create table acid_test(a int) stored as holodesk; -- 指定存储格式为 holodesk,如需选择其他存储格式,可参考 DDL 建表语句

set transaction.type=holodesk;
begin transaction;
Batchinsert into acid_test batchvalues(
values(1),
values(2)
);  --不提交事务
复制

第三步:检查加锁情况

登录DBA Service 界面,点击【存储-事务】,检查加锁情况

acid test1
图 74. 可以看到 user1 加锁成功

第四步: 在user2 会话界面,执行下述 SQL 语句:

update acid_test set a = a+1 where a = 2;   --user2等锁中,等待user1事务提交才能执行成功
复制

第五步:检查锁等待链情况 登录 DBA Service 界面,点击存储-事务,查看锁等待情况

acid test2
图 75. 可以看到 user2 等待 user1 释放锁资源

第六步:在 user1 会话界面,提交事务

commit;  --user1事务提交成功,释放锁资源。此时user2拿锁并执行成功
复制

此时在 DBA Service 上可以看到,user1、user2 依次提交成功并释放锁资源。