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 │ 480 │ 0 │ 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:第二种方式优先生效。