严格提交(STRICT_COMMIT)
📄字数 887
👁️阅读量 加载中...
引入版本
v11.0.0
功能描述
STRICT_COMMIT
用于设置客户端会话上非只读事务是否严格提交。
参数属性
属性 | 属性值 |
---|---|
参数类型 | BOOLEAN |
默认值 | FALSE |
取值范围 | TRUE,FALSE |
影响范围 | 会话级 |
修改方式 | 在线修改,立即生效 |
使用场景说明
- STRICT_COMMIT 作用及影响。
STRICT_COMMIT | 作用及影响 |
---|---|
TRUE | 严格提交 |
FALSE | 非严格提交 |
严格提交
服务端对事务提交命令,在登记事务提交日志后,挂起并等待,直到事务的Redo日志被写盘成功后,该事务提交动作才能返回给用户端。
优点
- 即使随后发生数据库宕机,重启后也能根据Redo日志正确的修复该事务,不会出现不一致的情况。
- 在非短小事务情况下,总体吞吐变化不明显。
缺点
- 在事务提交时,引入了等待确认环节,单笔事务会变慢。
- 若系统中存在大量的短小事务时,会明显的感到TPS的下降。
非严格提交
服务端对事务提交命令,在登记事务提交日志后,立刻返回给客户端提交成功。
可能触发的异常情况:
客户端发起提交事务,且收到了数据库服务端的返回信息,客户侧会认为事务正常完成。若数据库因故障导致宕机,重启后数据库端走异常宕机的修复流程,由于该事务的日志信息可能未落盘,则修复时丢失对该事务的重做操作,造成已完成事务的重做动作丢失,出现数据库侧与用户侧不一致的情况。
注意
- 交易类场景该参数应严格配置为 TRUE,其他场景可配置为 FALSE。
- 该参数在驱动程序未指定的情况下,由系统全局参数 strictly_commit 决定;
示例
- 查询当前严格提交状态
sql
SQL> SHOW STRICT_COMMIT;
+---------------+
| STRICT_COMMIT |
+---------------+
| F |
+---------------+
- 设置当前会话上非只读事务为严格提交模式
sql
SQL> SET STRICT_COMMIT ON;
Execute successful.
Use time:0 ms.
-- 或
SQL> SET STRICT_COMMIT TO TRUE;
Execute successful.
Use time:0 ms.
-- 或
SQL> SET STRICT_COMMIT TO ON;
Execute successful.
Use time:0 ms.