更新时间:2025-06-11 GMT+08:00

配置ClickHouse支持事务能力

操作场景

原子性是指事务是一个不可分割的工作单元,一个事务可以包含多个操作,这些操作要么全部执行,要么全都不执行。但是由于事务在执行过程中,可能出现一些意外,例如用户回滚了事务、连接断开、断电等,导致事务被中断执行。

ClickHouse支持原子性写入能力,支持事务能力。实现事务的原子性,在事务的某个操作失败后,支持回滚到事务执行之前的状态。

本章节主要介绍如何开启ClickHouse事务。

  • 使用本地表场景进行数据写入性能更优,故推荐本地表的数据增、删、改、查场景的多副本分布式事务支持。
  • 对于使用分布式表进行数据写入场景的分布式事务,需要结合分布式表事务insert_distributed_sync+本地表事务(Mergetree/ReplicateMergeTree)完整的事务支持数据写入。

约束与限制

本章节仅适用于MRS 3.3.0-LTS及之后版本。

参数配置

  1. 登录FusionInsight Manager系统。

    详细操作请参考访问集群Manager

  2. 选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > 可靠性”,修改以下参数:

    参数

    参数说明

    取值示例

    allow_transactions

    此参数应用于是否支持事务, 取值范围:0,1。

    • 默认值为0,不支持事务。
    • 设置参数值为1,保存配置,重启服务生效支持事务。

    1

    _clickhouse.metrika.cluster.internal_replication

    表示是否只将数据写入其中一个副本, 取值范围:true,false。

    • 默认值为true,只插入一个副本就返回。
    • 设置值为false,表示要两个副本都插入。

    true

  1. 修改参数配置后,单击“保存”,根据界面提示操作后,等待配置保存成功。
  2. 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分布式表时,以同步方式插入数据到各个实际表中。