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:第二种方式优先生效。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?