系统表
简介
系统表提供有关以下方面的信息:
- 服务器状态、进程和环境。
- 服务器的内部进程。
- 构建 ClickHouse 二进制文件时使用的选项。
系统表
- 位于
system
数据库中。 - 仅可用于读取数据。
- 无法删除或更改,但可以分离。
大多数系统表将其数据存储在 RAM 中。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
冲突。如果同时设置,服务器将引发异常并退出。
示例
<clickhouse>
<query_log>
<database>system</database>
<table>query_log</table>
<partition_by>toYYYYMM(event_date)</partition_by>
<ttl>event_date + INTERVAL 30 DAY DELETE</ttl>
<!--
<engine>ENGINE = MergeTree PARTITION BY toYYYYMM(event_date) ORDER BY (event_date, event_time) SETTINGS index_granularity = 1024</engine>
-->
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
<max_size_rows>1048576</max_size_rows>
<reserved_size_rows>8192</reserved_size_rows>
<buffer_size_rows_flush_threshold>524288</buffer_size_rows_flush_threshold>
<flush_on_crash>false</flush_on_crash>
</query_log>
</clickhouse>
默认情况下,表增长是无限的。要控制表的大小,可以使用 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/
中创建包含 kernel.task_delayacct = 1
的 .conf
文件来启用它。