clickhouse21.7.11.3 表引擎-MergeTree-手动merge合并临时分区

手动合并分区

如果要立即合并临时分区,可通过手动 merge

语法一

optimize table 表名 final;

语法二

强制merge建议带分区

optimize table 表名 partition ID '分区id'  final;

或

optimize table 表名 partition '分区id'  final;

注意

强制merge属于CPU性操作,会相当耗费CPU资源,建议在晚上系统负载比较小的时候执行
强制merge不会有锁的概念,表还是可以正常查询写入

合并方式

将原分区的数据合并,生成一个新的目录,该目录命名规则是:分区ID_最小分区块编号_最大分区块编号_合并次数

原分区目录仍存在,是过期的,大约 8 分钟后,会自动清理掉

案例

执行合并

optimize table t_student_mt final;

执行查询

在 clickhouse-client 中执行查询:

select * from t_student_mt ;

执行结果如下:

┌─sid─┬─name───┬─age─┬─heigth─┬─────────create_time─┐
│   2 │ 韩梅梅 │  19 │    165 │ 2022-01-01 09:30:00 │
│   2 │ 李雷   │  20 │    182 │ 2022-01-01 09:30:00 │
│   5 │ 武大郎 │  25 │    178 │ 2022-01-01 10:30:00 │
└─────┴────────┴─────┴────────┴─────────────────────┘
┌─sid─┬─name───┬─age─┬─heigth─┬─────────create_time─┐
│   1 │ lucy   │  22 │    170 │ 2022-01-02 09:30:00 │
│   4 │ 张三   │  21 │    171 │ 2022-01-02 09:50:00 │
│   4 │ lili   │  22 │    171 │ 2022-01-02 09:50:00 │
│   6 │ 武二郎 │  23 │    181 │ 2022-01-02 11:50:00 │
└─────┴────────┴─────┴────────┴─────────────────────┘
┌─sid─┬─name───┬─age─┬─heigth─┬─────────create_time─┐
│   6 │ 武四郎 │  22 │    183 │ 2022-01-03 12:50:00 │
└─────┴────────┴─────┴────────┴─────────────────────┘

可以看到只有 3 个分区

查看文件

ll /program/clickhouse/data/data/default/t_student_mt/

显示如下:

20220101_2_2_0
20220101_2_3_1
20220101_3_3_0
20220102_1_1_0
20220102_1_4_1
20220102_4_4_0
20220103_5_5_0
20220103_5_5_1

其中下面目录是新生成的:

20220101_2_3_1
20220102_1_4_1
20220103_5_5_1
20220103_5_5_0

合并方式

20220101_2_2_0 和 20220101_3_3_0 会合并, 生成一个新目录,名字是:_2_3_1。目录名生成规则:最小块数是 2,最大块数是 3,合并 1 次

20220102_1_1_0 和 20220102_4_4_0 会合并, 生成一个新目录,名字是:_1_4_1。目录名生成规则:最小块数是 1,最大块数是 4,合并 1 次

查询表分区信息

SELECT
    partition,
    name,
    part_type,
    active
FROM system.parts
WHERE table = 't_student_mt'

可以看到 原分区的 active 是0,非激活状态

原分区目录的处理方式

原分区目录是过期的,但数据仍然存在,大约过8分钟后,会自动清理掉

案例2

指定分区id进行合并

optimize table t_student_mt partition ID '20220101'  final;

原文出处:/show_1IX3PhoGzqoa.html