ClickHouse_ClickHouse常见系统表与磁盘自动迁移问题排查

ClickHouse_ClickHouse常见系统表与磁盘自动迁移问题排查

1.常见ClickHouse系统表及其字段

1.1 system.clusters

system.clusters表中记录了配置文件中所配置好的集群和服务器相关的信息,主要字段如下:

1
2
3
4
5
6
7
8
9
10
cluster (String) — 集群名称。
shard_num (UInt32) — 集群分片数,从1开始。
shard_weight (UInt32) — 写入数据时分片的相对权重。
replica_num (UInt32) — 分片的副本编号,从1开始。
host_name (String) — 主机名,也可以在配置中指定。
host_address (String) — 从DNS获得的主机IP地址。
port (UInt16) — 用于连接到服务器的端口。
user (String) — 用于连接到服务器的用户。
errors_count (UInt32) — 此主机无法到达副本的次数。
estimated_recovery_time (UInt32) — 副本错误计数归零剩下的秒数,它被认为是恢复正常。

表实例:

cluster shard_num shard_weight replica_num host_name host_address port is_local user default_database errors_count slowdowns_count estimated_recovery_time
ZYX_CK_Pub_08 1 1 1 10.199.136.101 10.199.136.101 9600 0 default 0 0 0
ZYX_CK_Pub_08 1 1 2 10.199.136.5 10.199.136.5 9700 0 default 0 0 0
ZYX_CK_Pub_08 1 1 3 10.199.136.52 10.199.136.52 9800 0 default 0 0 0
ZYX_CK_Pub_08 2 1 1 10.199.136.5 10.199.136.5 9600 0 default 0 0 0
ZYX_CK_Pub_08 2 1 2 10.199.136.52 10.199.136.52 9700 0 default 0 0 0
ZYX_CK_Pub_08 2 1 3 10.199.136.101 10.199.136.101 9800 0 default 0 0 0
ZYX_CK_Pub_08 3 1 1 10.199.136.52 10.199.136.52 9600 0 default 0 0 0
ZYX_CK_Pub_08 3 1 2 10.199.136.101 10.199.136.101 9700 0 default 0 0 0
ZYX_CK_Pub_08 3 1 3 10.199.136.5 10.199.136.5 9800 0 default 0 0 0

从上图可以看出ZYX_CK_Pub_08是一个三副本集群,也可以看出每个分片编号和副本编号及其对应的ip和端口号。

1.2 system.settings

system.settings表中记录了该ClickHouse集群的配置文件中的配置信息,就比如hbase集群的core-default.xml、hbase-site.xml配置文件中的各种集群配置项,该表的主要字段如下:

1
2
3
4
5
6
7
8
9
name (String) — 设置项名称。
value (String) — 设置的值。
changed (UInt8) — 显示设置是否从其默认值更改。
description (String) — 设置项的简单描述。
min (Nullable(String)) — 设置的最小值,如果通过约束设置的话。如果设置没有最小值,则为NULL。
max (Nullable(String)) — 设置的最小值,如果通过约束设置的话。如果设置没有最小值,则为NULL。
readonly (UInt8) — 显示当前用户是否可以更改设置:
0 — 当前用户可以更改设置。
1 — 当前用户无法更改设置。

表实例,此处只截取部分,一般这种集群配置项可以多达四五百项:

name value changed description min max readonly type
min_compress_block_size 65536 0 The actual size of the block to compress, if the uncompressed data less than max_compress_block_size is no less than this value and no less than the volume of data for one mark. 0 UInt64
max_compress_block_size 1048576 0 The maximum size of blocks of uncompressed data before compressing for writing to a table. 0 UInt64
max_block_size 65505 0 Maximum block size for reading 0 UInt64
max_insert_block_size 1048545 0 The maximum block size for insertion, if we control the creation of blocks for insertion. 0 UInt64
min_insert_block_size_rows 1048545 0 Squash blocks passed to INSERT query to specified size in rows, if blocks are not big enough. 0 UInt64
min_insert_block_size_bytes 268427520 0 Squash blocks passed to INSERT query to specified size in bytes, if blocks are not big enough. 0 UInt64
min_insert_block_size_rows_for_materialized_views 0 0 Like min_insert_block_size_rows, but applied only during pushing to MATERIALIZED VIEW (default: min_insert_block_size_rows) 0 UInt64
min_insert_block_size_bytes_for_materialized_views 0 0 Like min_insert_block_size_bytes, but applied only during pushing to MATERIALIZED VIEW (default: min_insert_block_size_bytes) 0 UInt64
max_joined_block_size_rows 65505 0 Maximum block size for JOIN result (if join algorithm supports it). 0 means unlimited. 0 UInt64

1.3 system.parts

system.parts表中记录了集群中所有MergeTree引擎表的分区信息,对于ClickHouse一个partition分区就是一个文件夹,也是ClickHouse中数据变更的最小存储单元,该表的主要字段如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
partition (String) – 分区的名称。要了解分区是什么,参考ALTER查询的描述。格式:
YYYYMM 按月自动分区。
any_string 当手动分区。
name (String) – 数据片段的名称。
active (UInt8) – 指示数据片段是否处于激活状态的标志。如果数据片段是激活的,则在表中可以使用它。否则它是被删除状态。未激活的数据片段在合并后仍然存在。
marks (UInt64) – 标记的数量。要获得数据片段的大概行数,可以用索引粒度乘以标记(通常是8192)(这个提示不适用于自适应粒度)。
rows (UInt64) – 行数。
bytes_on_disk (UInt64) – 所有数据片段文件的总大小,单位字节。
data_compressed_bytes (UInt64) – 数据片段占用压缩数据的总大小。所有的附属文件不包括在内(例如,标记文件)。
data_uncompressed_bytes (UInt64) – 数据片段中未压缩数据的总大小。所有的附属文件不包括在内(例如,标记文件)。
marks_bytes (UInt64) – 标记的文件的大小。
modification_time (DateTime) – 修改包含数据片段的目录的时间。这通常对应于创建数据部分的时间。
remove_time (DateTime) – 数据片段变为非激活状态的时间。
refcount (UInt32) – 使用数据片段的位置数量。大于2的值表示数据部分用于查询或合并。
min_date (Date) – 数据片段中日期键的最小值。
max_date (Date) – 数据片段中日期键的最大值。
min_time (DateTime) – 数据片段中日期和时间键的最小值。
max_time(DateTime) – 数据片段中日期和时间键的最小值。
partition_id (String) – 分区的ID。
min_block_number (UInt64) – 合并后组成当前片段的最小数据块编号。
max_block_number (UInt64) – 合并后组成当前片段的最大数据块编号。
level (UInt32) – 合并树的深度。零意味着当前片段是通过插入创建的,而不是通过合并其他片段创建的。
data_version (UInt64) – 用于确定应用于数据片段变化的数字(变化版本高于data_version)。
primary_key_bytes_in_memory (UInt64) – 主键值使用的内存量(以字节为单位)。
primary_key_bytes_in_memory_allocated (UInt64) – 为主键值保留的内存量(以字节为单位)。
is_frozen (UInt8) – 表明存在分区数据备份的标志。1、备份存在。0,备份不存在。更多详细信息,请参考FREEZE PARTITION
database (String) – 数据库名称
table (String) – 表名
engine (String) – 表引擎,没有参数。
path (String) – 数据片段文件的文件夹绝对路径。
disk (String) – 存储数据部分的磁盘的名称。
hash_of_all_files (String) – sipHash128压缩文件。
hash_of_uncompressed_files (String) – sipHash128的未压缩文件(带有标记文件、索引文件等)。
uncompressed_hash_of_compressed_files (String) – sipHash128压缩文件中的数据,就好像它们是未压缩的一样。
bytes (UInt64) – bytes_on_disk别名。
marks_size (UInt64) – marks_bytes别名。

表实例:

partition name uuid part_type active marks rows bytes_on_disk data_compressed_bytes data_uncompressed_bytes marks_bytes secondary_indices_compressed_bytes secondary_indices_uncompressed_bytes secondary_indices_marks_bytes modification_time remove_time refcount min_date max_date min_time max_time partition_id min_block_number max_block_number level data_version primary_key_bytes_in_memory primary_key_bytes_in_memory_allocated is_frozen database table engine disk_name path hash_of_all_files hash_of_uncompressed_files uncompressed_hash_of_compressed_files delete_ttl_info_min delete_ttl_info_max move_ttl_info.expression move_ttl_info.min move_ttl_info.max default_compression_codec recompression_ttl_info.expression recompression_ttl_info.min recompression_ttl_info.max group_by_ttl_info.expression group_by_ttl_info.min group_by_ttl_info.max rows_where_ttl_info.expression rows_where_ttl_info.min rows_where_ttl_info.max projections
2022-10-04 0028c85aeceda9adb3d5f1cb7cd84356_1_29_2 7c4c09c7-ee72-41c9-bb80-dff8a8856748 Wide 1 178 1441935 206586355 206541431 341693021 38448 0 0 0 2022-10-05 09:43:36.000 1970-01-01 08:00:00.000 1 1970-01-01 1970-01-01 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 0028c85aeceda9adb3d5f1cb7cd84356 1 29 2 1 12096 25088 0 SZ .inner.ck_sz_flow_prod_traffics_sum_mv_unif ReplicatedAggregatingMergeTree default /data4/jdolap/clickhouse/data/data/SZ/%2Einner%2Eck_sz_flow_prod_traffics_sum_mv_unif/0028c85aeceda9adb3d5f1cb7cd84356_1_29_2/ 64054bade4700f3b8cce14f7acf989ab e11aa9565de94329c556ff1fc92bedc3 2ad5dca75e75069f6ff2c2ec303d0387 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 [] [] [] LZ4 [] [] [] [] [] [] [] [] [] []
2022-10-04 0028c85aeceda9adb3d5f1cb7cd84356_30_35_1 7da68bd2-f7b0-4173-b549-6287feb95f15 Wide 1 57 452312 61955957 61941531 102444781 12312 0 0 0 2022-10-05 09:43:38.000 1970-01-01 08:00:00.000 1 1970-01-01 1970-01-01 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 0028c85aeceda9adb3d5f1cb7cd84356 30 35 1 30 3863 19712 0 SZ .inner.ck_sz_flow_prod_traffics_sum_mv_unif ReplicatedAggregatingMergeTree default /data4/jdolap/clickhouse/data/data/SZ/%2Einner%2Eck_sz_flow_prod_traffics_sum_mv_unif/0028c85aeceda9adb3d5f1cb7cd84356_30_35_1/ f9d024fb18e4c17037cdff66b7aacfc9 a49eab6675e11b7d8e04d7a806c10707 08e65d2b8f9613883cb2e289fdbc555c 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 [] [] [] LZ4 [] [] [] [] [] [] [] [] [] []
2022-10-04 0028c85aeceda9adb3d5f1cb7cd84356_36_36_0 10275fdf-9491-4b91-a4a2-e63d38505288 Wide 1 11 80825 10929758 10926905 17213806 2376 0 0 0 2022-10-05 09:43:39.000 1970-01-01 08:00:00.000 1 1970-01-01 1970-01-01 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 0028c85aeceda9adb3d5f1cb7cd84356 36 36 0 36 755 17088 0 SZ .inner.ck_sz_flow_prod_traffics_sum_mv_unif ReplicatedAggregatingMergeTree default /data4/jdolap/clickhouse/data/data/SZ/%2Einner%2Eck_sz_flow_prod_traffics_sum_mv_unif/0028c85aeceda9adb3d5f1cb7cd84356_36_36_0/ 7603db913ce9f461e12cfae91c787357 a99b1c8484c16115393ffc2c2e13d949 d7ee39c167442be26b38efa6e00b13ae 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 [] [] [] LZ4 [] [] [] [] [] [] [] [] [] []
2022-11-16 01cec265be808584624dfbb996210ddc_0_28_2 d2f4468b-7529-4df7-b52a-52f6c99403f0 Wide 1 205 1667781 222218419 222166704 389719346 44280 0 0 0 2022-11-17 09:44:40.000 1970-01-01 08:00:00.000 1 1970-01-01 1970-01-01 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 01cec265be808584624dfbb996210ddc 0 28 2 0 13919 27136 0 SZ .inner.ck_sz_flow_prod_traffics_sum_mv_unif ReplicatedAggregatingMergeTree default /data4/jdolap/clickhouse/data/data/SZ/%2Einner%2Eck_sz_flow_prod_traffics_sum_mv_unif/01cec265be808584624dfbb996210ddc_0_28_2/ 9d8b76be597d753d1c3356c17df781fb 24fbd9da0257de8e2922fb029cb84298 909dd97ae772ffdcbcec6a5c5818830b 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 [] [] [] LZ4 [] [] [] [] [] [] [] [] [] []
2022-11-16 01cec265be808584624dfbb996210ddc_29_35_1 77072487-2ad2-41d4-8b18-428485a97d3d Wide 1 80 641196 76781796 76761559 137624645 17280 0 0 0 2022-11-17 09:44:42.000 1970-01-01 08:00:00.000 1 1970-01-01 1970-01-01 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 01cec265be808584624dfbb996210ddc 29 35 1 29 5442 20736 0 SZ .inner.ck_sz_flow_prod_traffics_sum_mv_unif ReplicatedAggregatingMergeTree default /data4/jdolap/clickhouse/data/data/SZ/%2Einner%2Eck_sz_flow_prod_traffics_sum_mv_unif/01cec265be808584624dfbb996210ddc_29_35_1/ a9734f74cf97edcd91fbf55afacebeea 243f9f307cc035c95e164462b920e095 4a2a2498e76a90951d3913706aaf3f9a 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 [] [] [] LZ4 [] [] [] [] [] [] [] [] [] []
2022-11-16 01cec265be808584624dfbb996210ddc_36_38_1 9fa94415-761b-4ff4-8307-375d206e751b Wide 1 28 214776 27538566 27531444 46496187 6048 0 0 0 2022-11-25 17:33:13.000 1970-01-01 08:00:00.000 1 1970-01-01 1970-01-01 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 01cec265be808584624dfbb996210ddc 36 38 1 36 1895 18048 0 SZ .inner.ck_sz_flow_prod_traffics_sum_mv_unif ReplicatedAggregatingMergeTree default /data4/jdolap/clickhouse/data/data/SZ/%2Einner%2Eck_sz_flow_prod_traffics_sum_mv_unif/01cec265be808584624dfbb996210ddc_36_38_1/ 638561282f589bcf0ac84764bc411d69 6e5965b7a49d44ccf399336c2ee908e2 250d570e1da112583e661b2054aaba9a 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 [] [] [] LZ4 [] [] [] [] [] [] [] [] [] []
2022-10-22 056b70d640bb3c90db641200d3c92353_1_29_2 5135e64c-48ff-431f-99d2-5191366a43e7 Wide 1 165 1340465 202055226 202013610 326197596 35640 0 0 0 2022-10-23 09:44:34.000 1970-01-01 08:00:00.000 1 1970-01-01 1970-01-01 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 056b70d640bb3c90db641200d3c92353 1 29 2 1 11180 25088 0 SZ .inner.ck_sz_flow_prod_traffics_sum_mv_unif ReplicatedAggregatingMergeTree default /data4/jdolap/clickhouse/data/data/SZ/%2Einner%2Eck_sz_flow_prod_traffics_sum_mv_unif/056b70d640bb3c90db641200d3c92353_1_29_2/ bb68ec7de79c64862be7f07bea8f8622 f65c0933777ba16673dbf7f57150f34f 8d8115eae054fcfc28187c8411e9f61b 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 [] [] [] LZ4 [] [] [] [] [] [] [] [] [] []
2022-10-22 056b70d640bb3c90db641200d3c92353_30_47_2 659f3239-e7ed-4f5a-92db-64a8de399b94 Wide 1 118 957120 135204834 135175059 226764448 25488 0 0 0 2022-11-05 12:45:09.000 1970-01-01 08:00:00.000 1 1970-01-01 1970-01-01 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 056b70d640bb3c90db641200d3c92353 30 47 2 30 7988 23040 0 SZ .inner.ck_sz_flow_prod_traffics_sum_mv_unif ReplicatedAggregatingMergeTree default /data4/jdolap/clickhouse/data/data/SZ/%2Einner%2Eck_sz_flow_prod_traffics_sum_mv_unif/056b70d640bb3c90db641200d3c92353_30_47_2/ 7166e86a330ba489e996410c7d0893ca 6166eee467909edd86aacb39f9a358c8 6d79ab0951823ac550e870232274a567 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 [] [] [] LZ4 [] [] [] [] [] [] [] [] [] []
2022-08-10 07f198f3ed52cb396f1c8562a5fad39a_2_30_2 00000000-0000-0000-0000-000000000000 Wide 1 198 1608217 213424579 213374665 372204328 42768 0 0 0 2022-08-11 09:47:28.000 1970-01-01 08:00:00.000 1 1970-01-01 1970-01-01 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 07f198f3ed52cb396f1c8562a5fad39a 2 30 2 2 13442 18944 0 SZ .inner.ck_sz_flow_prod_traffics_sum_mv_unif ReplicatedAggregatingMergeTree default /data4/jdolap/clickhouse/data/data/SZ/%2Einner%2Eck_sz_flow_prod_traffics_sum_mv_unif/07f198f3ed52cb396f1c8562a5fad39a_2_30_2/ 870092a0dbd0b64e0627fe1fe088bf2f cb90dbd5c5a566b2757fc54f5b4a5cec d04cf90866808d41292d607ef9076a57 1970-01-01 08:00:00.000 1970-01-01 08:00:00.000 [] [] [] LZ4 [] [] [] [] [] [] [] [] [] []

1.4 system.part_log

system.part_log表中记录了集群中所有MergeTree引擎表的分区的变更信息,如添加、合并、删除等变更操作的记录,该表的主要字段如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
event_type (Enum) — 数据片段发生的事件的类型。可以是以下值之一:
NEW_PART — 插入新的数据片段。
MERGE_PARTS — 合并数据片段。
DOWNLOAD_PART — 下载数据片段。
REMOVE_PART — 使用DETACH PARTITION删除或者卸载数据片段。
MUTATE_PART — 数据片段变化。
MOVE_PART — 将数据片段从一个磁盘移动到另一个磁盘。
event_date (Date) — 事件日期
event_time (DateTime) — 事件时间
duration_ms (UInt64) — 持续时间。
database (String) — 数据片段所在数据库名称
table (String) — 数据片段所属表名称
part_name (String) — 数据片段名称
partition_id (String) — 数据片段插入的分区的ID。如果分区是通过tuple()进行的,则列接受'all'值。
rows (UInt64) — 数据片段的行数
size_in_bytes (UInt64) — 数据片段的大小,单位为字节
merged_from (Array(String)) — 组成当前片段(合并后)的名称数组。
bytes_uncompressed (UInt64) — 未压缩大小,单位为字节
read_rows (UInt64) — 合并期间读取的行数。
read_bytes (UInt64) — 合并期间读取的字节。
error (UInt16) — 发生错误的代码号。
exception (String) — 发生错误的文本消息。

表实例:

query_id event_type event_date event_time event_time_microseconds duration_ms database table part_name partition_id disk_name path_on_disk rows size_in_bytes merged_from bytes_uncompressed read_rows read_bytes peak_memory_usage error exception
MergeParts 2022-12-03 2022-12-03 21:28:09.000 2022-12-03 21:28:09.763102 82500 SZ ck_sz_flow_shop_traffics_lead_sku_det_unif 536a49488b6d0bb380805a2c61dafed8_0_105_3 536a49488b6d0bb380805a2c61dafed8 disk6 /data6/jdolap/clickhouse/data/data/SZ/ck_sz_flow_shop_traffics_lead_sku_det_unif/536a49488b6d0bb380805a2c61dafed8_0_105_3/ 26393496 2958547224 [‘536a49488b6d0bb380805a2c61dafed8_0_45_2’,’536a49488b6d0bb380805a2c61dafed8_46_88_2’,’536a49488b6d0bb380805a2c61dafed8_89_97_1’,’536a49488b6d0bb380805a2c61dafed8_98_105_1’] 27896397760 26393496 18810910821 220684242 0
DownloadPart 2022-12-03 2022-12-03 22:02:22.000 2022-12-03 22:02:22.560593 13 tmp_smoke_test alerts_local01 202007_0_0_0 202007 default /data4/jdolap/clickhouse/data/store/9d9/9d9eaca2-a132-44d3-a2d8-a9c6355fe8bb/202007_0_0_0/ 34 38200 [] 0 0 0 0 0
DownloadPart 2022-12-03 2022-12-03 22:02:22.000 2022-12-03 22:02:22.574827 12 tmp_smoke_test alerts_local01 202005_0_0_0 202005 default /data4/jdolap/clickhouse/data/store/9d9/9d9eaca2-a132-44d3-a2d8-a9c6355fe8bb/202005_0_0_0/ 45 50337 [] 0 0 0 0 0
DownloadPart 2022-12-03 2022-12-03 22:02:22.000 2022-12-03 22:02:22.590592 12 tmp_smoke_test alerts_local01 202003_0_0_0 202003 default /data4/jdolap/clickhouse/data/store/9d9/9d9eaca2-a132-44d3-a2d8-a9c6355fe8bb/202003_0_0_0/ 31 34890 [] 0 0 0 0 0
DownloadPart 2022-12-03 2022-12-03 22:02:22.000 2022-12-03 22:02:22.608454 13 tmp_smoke_test alerts_local01 202009_0_0_0 202009 default /data4/jdolap/clickhouse/data/store/9d9/9d9eaca2-a132-44d3-a2d8-a9c6355fe8bb/202009_0_0_0/ 25 28267 [] 0 0 0 0 0
DownloadPart 2022-12-03 2022-12-03 22:02:22.000 2022-12-03 22:02:22.626437 13 tmp_smoke_test alerts_local01 202004_0_0_0 202004 default /data4/jdolap/clickhouse/data/store/9d9/9d9eaca2-a132-44d3-a2d8-a9c6355fe8bb/202004_0_0_0/ 28 31578 [] 0 0 0 0 0
DownloadPart 2022-12-03 2022-12-03 22:02:22.000 2022-12-03 22:02:22.628814 16 tmp_smoke_test alerts_local01 202008_0_0_0 202008 default /data4/jdolap/clickhouse/data/store/9d9/9d9eaca2-a132-44d3-a2d8-a9c6355fe8bb/202008_0_0_0/ 38 42609 [] 0 0 0 0 0
DownloadPart 2022-12-03 2022-12-03 22:02:22.000 2022-12-03 22:02:22.649889 18 tmp_smoke_test alerts_local01 202001_0_0_0 202001 default /data4/jdolap/clickhouse/data/store/9d9/9d9eaca2-a132-44d3-a2d8-a9c6355fe8bb/202001_0_0_0/ 31 34887 [] 0 0 0 0 0
DownloadPart 2022-12-03 2022-12-03 22:02:22.000 2022-12-03 22:02:22.658375 15 tmp_smoke_test alerts_local01 202011_0_0_0 202011 default /data4/jdolap/clickhouse/data/store/9d9/9d9eaca2-a132-44d3-a2d8-a9c6355fe8bb/202011_0_0_0/ 23 26059 [] 0 0 0 0 0

1.5 system.disks

system.disks表中记录了服务器节点配置的磁盘信息,主要字段如下:

1
2
3
4
5
name (String) — 服务器配置中磁盘的名称。
path (String) — 指向文件系统中的挂载点的路径。
free_space (UInt64) — 磁盘上的空闲空间(以字节为单位)。
total_space (UInt64) — 磁盘容量(以字节为单位)。
keep_free_space (UInt64) — 以字节为单位在磁盘上保持空闲的磁盘空间量。在磁盘配置的keep_free_space_bytes参数中定义。

表实例:

name path free_space total_space keep_free_space type
default /data2/jdolap/clickhouse/data/ 605149126656 1948901576704 0 local
disk3 /data3/jdolap/clickhouse/data/ 630576390144 1948901576704 0 local
disk6 /data6/jdolap/clickhouse/data2/ 746901942272 1948901576704 0 local
disk7 /data7/jdolap/clickhouse/data2/ 648532381696 1948901576704 0 local

2.系统表应用实例

2.1查询ClickHouse集群中某张表的总存储量

clickhouse的系统表system.parts中记录了本节点中所有本地表磁盘使用情况。

如果需要查看一个分布式表的整体磁盘使用情况,第一种方法是在每个节点上查询system.parts表然后手动汇总起来,这显然实际操作起来不现实;第二种方法就是基于system.parts创建一张分布式表,这样直接查询分布式表就可以得到任意一张分布式表或本地表的磁盘使用情况。

我们部门的ck运维为system.parts创建了一张名为system.parts_all的分布式表,使用以下语句即可查询由ck_sz_trade_featrue_shop_index_info组成的分布式表的总存储量,单位为GB:

1
2
3
4
5
6
SELECT
sum (bytes_on_disk)/1024/1024/1024
from
system.parts_all
where
table = 'ck_sz_trade_featrue_shop_index_info'

2.2 ClickHouse磁盘使用率告警问题排查与解决

1.背景

在没有大量推数任务的情况下,ck集群突然出现了磁盘使用率告警:

【严重】【自定义分组】 分组: HT0_CK_Pub_41, ip: 11.13.123.105, 【/data7】磁盘使用率已连续3次大于90.0%[当前值:96%]。报警时间: 2022-11-09 06:06:06

经过查看节点磁盘监控发现,数据总量并没有凸增,但是磁盘data4和data0存储使用在下降,data6和data7在增加。

服务器的磁盘分区实际上就是将硬盘从物理上设置分隔,然后将不同的硬盘存储区域划分给不同的Linux系统目录使用。重新对一台服务的磁盘分区进行划分,其实就是修改该服务器的分区表,将不同的物理磁头、磁道、扇区划分给不同的磁盘分区。如下图磁盘使用率监控中的服务器为例,就是将整个服务器的硬盘按物理磁头、磁道、扇区分成了8个区域,这8个区域分别分配给/、/data1、/data2、/data3、/data4、/data5、/data6、/data7这8个系统目录。

2.排查

经过排查发现是ClickHouse的多磁盘存储机制中的move_factor配置参数起作用了,导致data4和data0两个磁盘上的数据自动往后续磁盘上移动。详情可以查看参考资料,在配置文件中会为每个磁盘配置一个move_factor参数,默认为0.1,也就是当磁盘存储使用率达到90%时,会自动根据迁移策略将磁盘中的某些part迁移到下一个磁盘中。

通过system.part_log等系统表可以定位到是哪几张表、哪几个part在进行数据迁移,sql实例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
select
parts.host_address,
parts.port,
parts.table,
parts.disk_name,
count(1),
sum(parts.bytes_on_disk) as bytes_on_disk,
sum(parts.bytes_on_disk)/ any(total_space) as add_rate,
formatReadableSize(sum(parts.bytes_on_disk)) as bytes_on_disk_format,
formatReadableSize(any(total_space)) as total_space_format
from
(
select
database,
table,
partition_id
from
system.part_log_all t
where
event_date <= toDate('2022-11-09')
and event_date >= toDate('2022-11-09')
and t.database = 'sz_activity'
and event_type = 'NewPart'
group by
database,
table,
partition_id
) logs
join (
select
t1.host_address as host_address,
t1.port as port,
t.database as database,
t.table as table,
t.partition as partition,
t.partition_id as partition_id,
t.name as name,
t.disk_name as disk_name,
t.bytes_on_disk as bytes_on_disk,
t2.total_space as total_space
from
system.parts_all t
cross join system.clusters t1
join system.disks t2 on
t.disk_name = t2.name
where
t1.is_local = 1
and t1.cluster = 'HT0_CK_Pub_41'
and t1.host_name = '11.13.123.105'
and t.disk_name in ('disk6', 'disk7')
and t.database = 'sz_activity'
and t.active = 1
and t.table = 'ck_activity_detail_flow'
) parts on
logs.partition_id = parts.partition_id
and logs.table = parts.table
and logs.database = parts.database
group BY
parts.host_address,
parts.port,
parts.table,
parts.disk_name;

3.解决

经过检查发现磁盘data4和data0的move_factor设置并不合理,先将该参数调整更小一些。然后将自动迁移到data6和data7上的part使用命令手动迁移回data4和data0。同时也尽可能删除了一些磁盘data4和data0上的无用数据。

手动迁移磁盘的命令如下,其中disk_name可以通过执行select * from system.disks获取:

1
alter table xxx MOVE PART 'xxxxxxx' TO DISK 'disk_name';

参考资料

ClickHouse的系统表

ClickHouse多磁盘存储与自动迁移

Linux系统分区原理