更新时间:2024-07-24 GMT+08:00

配置ClickHouse支持事务能力

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

操作场景

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

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

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

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

参数配置

登录FusionInsight Manager页面,选择“集群 > 服务 > ClickHouse > 配置 > 全部配置 > 可靠性”,修改以下参数:

参数

参数说明

allow_transactions

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

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

_clickhouse.metrika.cluster.internal_replication

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

  • 默认值为true,只插入一个副本就返回。
  • 设置值为false,表示要两个副本都插入。
  • 通过执行语句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分布式表时,以同步方式插入数据到各个实际表中。