我可以删除clickhouse数据上的分离文件夹吗

Posted

技术标签:

【中文标题】我可以删除clickhouse数据上的分离文件夹吗【英文标题】:Can I delete the detached folder on clickhouse data 【发布时间】:2020-10-16 03:57:16 【问题描述】:

分离出来的ignored文件夹很多,占用空间太多,可以删除吗?

[root@cl1-data4 billing_test]# du -h --max-depth=1 ./tb_pay_order_log_local/
40G     ./tb_pay_order_log_local/detached

【问题讨论】:

【参考方案1】:

如果您确定这些数据不会被更多使用,可以手动从文件系统中删除。

我更愿意使用专门的操作DROP DETACHED PARTITION 删除 ClickHouse 工件:

# get list of detached partitions
SELECT database, table, partition_id
FROM system.detached_parts

# drop them one by one
ALTER TABLE database.table DROP DETACHED PARTITION partition_id

或者自动化它(想法是借用CH github: Attach all detached partitions #8183):

# warning [be careful]: this script remove ALL detached parts of ALL tables
# to affect only one table need to add "WHERE table = 'tb_pay_order_log_local'"

clickhouse-client --format=TSVRaw  \
    -q"select 'ALTER TABLE ' || database || '.' || table || ' DROP DETACHED PARTITION \'' || partition_id || '\';\n' from system.detached_parts group by database, table, partition_id order by database, table, partition_id;"  \
   | clickhouse-client -mn --allow_drop_detached 1

【讨论】:

【参考方案2】:

您可以删除_ignored。

谷歌翻译:

不活动的部分不会立即删除,因为在写入新块时,不会调用fsync,即在一段时间内,新部分仅位于服务器的 RAM(OS 缓存)中。因此,如果服务器(HW)自发重启,新合并的部分可能会丢失或损坏。那么ClickHouse在启动过程中就是在检查parts的完整性,可以检测到问题,把不活跃的parts返回到active list,之后再重新合并。然后将损坏的部分重命名(添加前缀 broken)并移至分离的文件夹。如果完整性检查在合并的块中检测到没有问题,则将原始非活动块重命名(添加前缀 ignored)并移至分离的文件夹。

【讨论】:

以上是关于我可以删除clickhouse数据上的分离文件夹吗的主要内容,如果未能解决你的问题,请参考以下文章

SQLServer2008服务器数据库没有备份被分离 还分离失败,能恢复吗?

我可以使用 SCP 将数据从 Clickhouse 服务器下载到我的本地工作站吗?

如何删除SQL SERVER中的日志文件

T SQL如何删除磁盘上的分离数据库?

ClickHouse 极简教程-图文详解原理系列ClickHouse 主键索引的存储结构与查询性能优化...

ClickHouse 极简教程-图文详解原理系列ClickHouse 主键索引的存储结构与查询性能优化...