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 @ 2023-03-28 16:43  PiscesCanon  阅读(240)  评论(0编辑  收藏  举报