系统表概述
介绍
系统表提供以下信息:
- 服务器状态、进程和环境。
- 服务器的内部进程。
- 构建 ClickHouse 二进制文件时使用的选项。
系统表:
- 位于
system
数据库中。 - 仅可用于读取数据。
- 不能被删除或更改,但可以被分离。
大多数系统表将其数据存储在内存中。ClickHouse 服务器在启动时创建这些系统表。
与其他系统表不同,系统日志表 metric_log、query_log、query_thread_log、trace_log、part_log、crash_log、text_log 和 backup_log 由 MergeTree 表引擎提供,并默认将其数据存储在文件系统中。如果从文件系统中删除表,ClickHouse 服务器将在下次数据写入时再次创建空表。如果新版本中系统表架构发生更改,则 ClickHouse 会重命名当前表并创建新表。
系统日志表可以通过在 /etc/clickhouse-server/config.d/
下创建与表同名的配置文件,或在 /etc/clickhouse-server/config.xml
中设置相应元素来进行自定义。可以自定义的元素包括:
database
: 系统日志表所属的数据库。此选项现已弃用,所有系统日志表都在数据库system
下。table
: 插入数据的表。partition_by
: 指定 PARTITION BY 表达式。ttl
: 指定表 TTL 表达式。flush_interval_milliseconds
: 刷新数据到磁盘的间隔。engine
: 提供完整的引擎表达式(以ENGINE =
开头)及参数。此选项与partition_by
和ttl
冲突。如果同时设置,服务器将引发异常并退出。
示例:
默认情况下,表的增长是无限的。要控制表的大小,可以使用 TTL 设置来删除过时的日志记录。此外,还可以使用 MergeTree
引擎表的分区功能。
系统指标的来源
为收集系统指标,ClickHouse 服务器使用:
CAP_NET_ADMIN
能力。- procfs (仅在 Linux 中)。
procfs
如果 ClickHouse 服务器没有 CAP_NET_ADMIN
能力,它会尝试回退到 ProcfsMetricsProvider
。ProcfsMetricsProvider
允许收集每个查询的系统指标(用于 CPU 和 I/O)。
如果系统支持且启用了 procfs,ClickHouse 服务器会收集以下指标:
OSCPUVirtualTimeMicroseconds
OSCPUWaitMicroseconds
OSIOWaitMicroseconds
OSReadChars
OSWriteChars
OSReadBytes
OSWriteBytes
在 5.14.x 开始的 Linux 内核中,OSIOWaitMicroseconds
默认是禁用的。
您可以使用 sudo sysctl kernel.task_delayacct=1
启用它,或者在 /etc/sysctl.d/
中创建一个 .conf
文件,内容为 kernel.task_delayacct = 1
ClickHouse Cloud 中的系统表
在 ClickHouse Cloud 中,系统表提供对服务状态和性能的关键见解,如同在自管理的部署中一样。一些系统表在集群级别操作,尤其是那些从 Keeper 节点获取其数据的系统表,这些节点管理分布式元数据。这些表反映集群的整体状态,并在对各个节点进行查询时应保持一致。例如,parts
的查询结果应无论从哪个节点查询都保持一致:
相反,其他系统表是节点特定的,例如使用 MergeTree 表引擎在内存中或持久化其数据。这种情况通常适用于日志和指标等数据。这种持久化确保历史数据可用于分析。然而,这些节点特定的表在每个节点上本质上是唯一的。
要全面查看整个集群,用户可以利用 clusterAllReplicas
函数。此函数允许在 "default" 集群内跨所有副本查询系统表,将节点特定数据汇总为统一的结果。这种方法对于监控和调试集群级操作尤其有价值,确保用户能够有效分析 ClickHouse Cloud 部署的健康和性能。
ClickHouse Cloud 提供多个副本的集群以确保冗余和故障转移。这启用了动态自动扩展和零停机升级等功能。在某个时间点,新节点可能正在添加到集群中,或从集群中移除。要跳过这些节点,可以在使用 clusterAllReplicas
的查询中添加 SETTINGS skip_unavailable_shards = 1
,如下所示。
例如,考虑查询 query_log
表时的区别——这些表通常对分析很重要。
一般而言,在判断系统表是否为节点特定时,可以应用以下规则:
- 以
_log
结尾的系统表。 - 曝露度量的系统表,例如
metrics
、asynchronous_metrics
、events
。 - 曝露正在进行的进程的系统表,例如
processes
、merges
。