ClickHouse合并分区后不活动分区如何立刻删除

 

ClickHouse合并分区后不活动分区如何立刻删除

 

CK中MergeTree系列分区目录合并后,会将旧的分区标记为active=0(system.parts的字段)表示不活动。

旧分区,即active=0的分区会默认保留8min,防止服务器意外关闭或宕机后下次启动,新分区(active=1)的数据丢失或损坏,所以旧分区数据不会立刻删除。

 

那么如何设置旧分区数据从OS上立刻删除呢?

通过设置参数old_parts_lifetime来控制,单位s。

复制代码
dev-app81 :) select * from system.merge_tree_settings where name='old_parts_lifetime';

SELECT *
FROM system.merge_tree_settings
WHERE name = 'old_parts_lifetime'

Query id: 42ff9991-14b6-4aaa-8559-ec8dc70f4842

┌─name───────────────┬─value─┬─changed─┬─description──────────────────────────────┬─type────┐
│ old_parts_lifetime │ 4800 │ How many seconds to keep obsolete parts. │ Seconds │
└────────────────────┴───────┴─────────┴──────────────────────────────────────────┴─────────┘

1 rows in set. Elapsed: 0.004 sec. 
复制代码

 

修改方式1:

更改/etc/clickhouse-server/config.xml(或confid.d文件夹分离配置)的merge_tree标签控制,范围是全局都受影响。

vi /etc/clickhouse-server/config.xml
    <merge_tree>
        <old_parts_lifetime>0</old_parts_lifetime>
    </merge_tree>

 

修改方式2:

建表时候通过SETTINGS选项设定。

复制代码
dev-app81 :) create table  test ( id int ) engine=MergeTree() order by id settings old_parts_lifetime = 30;

CREATE TABLE test
(
    `id` int
)
ENGINE = MergeTree
ORDER BY id
SETTINGS old_parts_lifetime = 30

Query id: 583d8f06-8be5-4e9c-90d3-e2f5cb851389

Ok.

0 rows in set. Elapsed: 0.005 sec. 
复制代码

 

PS:第二种方式优先生效。

 

posted @   PiscesCanon  阅读(319)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示