配置ClickHouse支持事务能力
操作场景
原子性是指事务是一个不可分割的工作单元,一个事务可以包含多个操作,这些操作要么全部执行,要么全都不执行。但是由于事务在执行过程中,可能出现一些意外,例如用户回滚了事务、连接断开、断电等,导致事务被中断执行。
ClickHouse支持原子性写入能力,支持事务能力。实现事务的原子性,在事务的某个操作失败后,支持回滚到事务执行之前的状态。
本章节主要介绍如何开启ClickHouse事务。

- 使用本地表场景进行数据写入性能更优,故推荐本地表的数据增、删、改、查场景的多副本分布式事务支持。
- 对于使用分布式表进行数据写入场景的分布式事务,需要结合分布式表事务insert_distributed_sync+本地表事务(Mergetree/ReplicateMergeTree)完整的事务支持数据写入。
约束与限制
本章节仅适用于MRS 3.3.0-LTS及之后版本。
参数配置
- 登录FusionInsight Manager系统。
详细操作请参考访问集群Manager。
- 选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > 可靠性”,修改以下参数:
参数
参数说明
取值示例
allow_transactions
此参数应用于是否支持事务, 取值范围:0,1。
- 默认值为0,不支持事务。
- 设置参数值为1,保存配置,重启服务生效支持事务。
1
_clickhouse.metrika.cluster.internal_replication
表示是否只将数据写入其中一个副本, 取值范围:true,false。
- 默认值为true,只插入一个副本就返回。
- 设置值为false,表示要两个副本都插入。
true
- 修改参数配置后,单击“保存”,根据界面提示操作后,等待配置保存成功。
- ClickHouse服务端配置更新后,如果“配置状态”为“配置过期”,则需重启组件以使配置生效。
图1 修改ClickHouse配置
在ClickHouse服务概览页面,选择“更多 > 重启服务/滚动重启服务”,验证管理员密码后,等待服务重启成功。
组件重启期间将无法对外提供服务,可能会影响集群的上层业务正常运行,请在业务空闲期或确认操作无影响后再执行本操作。
使用方法
- 通过执行语句set implicit_transaction='true';,可以使用会话级别的隐式事务。ClickHouse目前没有alter queries中断机制,所以alter queries(如:lightweight delete)执行过程中被中断之后,即便开启隐式事务能力,也无法回滚,与开源保持一致。
- 分布式表事务性插入使用方法:
登录FusionInsight Manager页面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置”,修改参数_clickhouse.metrika.cluster.internal_replication值为false,表示insert分布式表时,会在分片的所有副本都写入一份。
会话级别通过set insert_distributed_sync='true';,表示insert分布式表时,以同步方式插入数据到各个实际表中。