
# 配置ClickHouse支持事务能力
#### 操作场景
原子性是指事务是一个不可分割的工作单元，一个事务可以包含多个操作，这些操作要么全部执行，要么全都不执行。但是由于事务在执行过程中，可能出现一些意外，例如用户回滚了事务、连接断开、断电等，导致事务被中断执行。
ClickHouse支持原子性写入能力，支持事务能力。实现事务的原子性，在事务的某个操作失败后，支持回滚到事务执行之前的状态。
本章节主要介绍如何开启ClickHouse事务。
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
- 使用本地表场景进行数据写入性能更优，故推荐本地表的数据增、删、改、查场景的多副本分布式事务支持。
- 对于使用分布式表进行数据写入场景的分布式事务，需要结合分布式表事务insert_distributed_sync+本地表事务（Mergetree/ReplicateMergeTree）完整的事务支持数据写入。
 
#### 约束与限制
本章节仅适用于MRS 3.3.0-LTS及之后版本。
#### 参数配置
1. 登录FusionInsight Manager系统。 
   详细操作请参考[访问集群Manager](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2124.html)。
   
   
2. 选择"集群 \> 服务 \> ClickHouse \> 配置 \> 全部配置 \> 可靠性"，修改以下参数： 
   
   | 参数                                               | 参数说明                                                                                                                                                                                                                                                                                  | 取值示例 |
   |:---|:---|:---|
   | allow_transactions                               | 此参数应用于是否支持事务， 取值范围：0，1。 - 默认值为0，不支持事务。  - 设置参数值为1，保存配置，重启服务生效支持事务。                    | 1    |
   | _clickhouse.metrika.cluster.internal_replication | 表示是否只将数据写入其中一个副本， 取值范围：true，false。 - 默认值为true，只插入一个副本就返回。  - 设置值为false，表示要两个副本都插入。   | true |
      
   
   

3. 修改参数配置后，单击"保存"，根据界面提示操作后，等待配置保存成功。
4. ClickHouse服务端配置更新后，如果"配置状态"为"配置过期"，则需重启组件以使配置生效。 
   图1修改ClickHouse配置   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002312036422.png "点击放大")
   在ClickHouse服务概览页面，选择"更多 \> 重启服务/滚动重启服务"，验证管理员密码后，等待服务重启成功。
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/warning_3.0-zh-cn.png)
   组件重启期间将无法对外提供服务，可能会影响集群的上层业务正常运行，请在业务空闲期或确认操作无影响后再执行本操作。
   
   
 
#### 使用方法
- 通过执行语句**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分布式表时，以同步方式插入数据到各个实际表中。
  
 
