引言
该文章主要讲解Clikhouse所有系统表、表字段的诠释。在你遇到Clickhouse问题时能更有效、快速定位问题所在。以及对Clickhouse有更深入的认识。本文知识点主要依赖于博主本人工作中对clickhouse的了解以及 clickhouse官网 文档.
需快速解决问题的朋友直接跳到第三节看query_log、query_thread_log、即可
系统表:
- 存储于
system
数据库。 - 仅提供数据读取功能。
- 不能被删除或更改,但可以对其进行分离(detach)操作。 大多数系统表将其数据存储在RAM中。 一个ClickHouse服务在刚启动时便会创建此类系统表。
不同于其他系统表,系统日志表 metric_log, query_log, query_thread_log, trace_log, part_log, crash_log and text_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>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>
</clickhouse>
默认情况下,表增长是无限的。可以通过TTL 删除过期日志记录的设置来控制表的大小
二、系统表概览
只详解个别几张日志表,其他的表不做详细解释。详解下滑至 > 三、日志相关表详解
分类 | 表名 | 解释 |
---|---|---|
权限相关 | users | 包含服务器上配置的用户账号的列表. |
权限相关 | role-grants | 包含用户和角色的角色授予. 向该表添加项, 请使用GRANT role TO user. |
权限相关 | roles | 包含有关已配置的 角色 信息. |
权限相关 | quota_limits | 包含关于所有配额的所有间隔的最大值的信息. 任何行数或0行都可以对应一个配额. |
权限相关 | quota_usage | 当前用户的配额使用情况: 使用了多少, 还剩多少. |
权限相关 | quotas | 包含 quotas 信息. |
权限相关 | quotas_usage | 所有用户配额使用情况. |
权限相关 | current_roles | 包含当前用户的激活角色. SET ROLE 修改该表的内容. |
权限相关 | enabled_roles | 包含当前所有活动角色, 包括当前用户的当前角色和当前角色的已授予角色. |
权限相关 | grants | 授予ClickHouse用户帐户的权限.(该表我司使用版本没有) |
元数据相关 | clusters | 包含有关配置文件中可用的集群及其中的服务器的信息。 |
元数据相关 | databases | 包含当前用户可用的数据库的相关信息。 |
元数据相关 | tables | 包含服务器知道的每个表的元数据。 分离的表不在 system.tables 显示。 |
元数据相关 | columns | 此系统表包含所有表中列的信息。 |
元数据相关 | data_type_families | 包含有关受支持的数据类型的信息. |
元数据相关 | mutations | 该表包含关于MergeTree表的mutation及其进度信息 。每条mutation命令都用一行来表示。 |
元数据相关 | parts | 此系统表包含 MergeTree 表分区的相关信息。 |
元数据相关 | parts_columns | 包含关于MergeTree表的部分和列的信息. |
监控相关 | crash_log | 包含有关致命错误堆栈跟踪的信息.该表默认不存在于数据库中, 仅在发生致命错误时才创建. |
监控相关 | asynchronous_metrics | 包含在后台定期计算的指标。 例如,在使用的RAM量。 |
监控相关 | asynchronous_metric_log | 包含每分钟记录一次的 system.asynchronous_metrics历史值。默认开启。 |
系统日志相关 | metrics | 此系统表包含可以即时计算或具有当前值的指标。例如,同时处理的查询数量或当前的复制延迟。这个表始终是最新的。 |
系统日志相关 | opentelemetry_span_log | 包含已执行查询的跟踪范围的信息. |
系统日志相关 | processes | 该系统表用于实现 SHOW PROCESSLIST 查询. |
系统日志相关 | part_log | 此表包含与以下情况发生的事件有关的信息 数据部分 在 MergeTree 家庭表,例如添加或合并数据。 |
系统日志相关 | metric_log | 包含表中度量值的历史记录 system.metrics 和 system.events,定期刷新到磁盘。 |
系统日志相关 | query_log | 包含已执行查询的相关信息,例如:开始时间、处理持续时间、错误消息。 |
系统日志相关 | query_thread_log | 包含有关执行查询的线程的信息,例如,线程名称、线程开始时间、查询处理的持续时间。 |
系统日志相关 | query_views_log | 包含有关运行查询时执行的从属视图的信息,例如视图类型或执行时间. |
系统日志相关 | text_log | 包含日志记录条目。 进入该表的日志记录级别可以通过以下方式进行限制 text_log.level 服务器设置。 |
系统日志相关 | trace_log | 包含采样查询探查器收集的堆栈跟踪。 |
系统日志相关 | zookeeper_log | 此表包含有关对 ZooKeeper 服务器的请求及其响应的参数的信息. |
系统信息相关 | disks | 包含在 服务器配置 中定义的磁盘信息. |
系统信息相关 | events | 包含有关系统中发生的事件数的信息。 例如,在表中,您可以找到多少 SELECT 自ClickHouse服务器启动以来已处理查询。 |
系统信息相关 | functions | 包含有关常规函数和聚合函数的信息。 |
系统信息相关 | merges | 包含有关MergeTree系列中表当前正在进行的合并和部件突变的信息。 |
系统信息相关 | settings | 包含当前用户会话设置的相关信息。 |
系统信息相关 | replicas | 包含驻留在本地服务器上的复制表的信息和状态。 此表可用于监视。 该表对于每个已复制的*表都包含一行。 |
系统信息相关 | settings_profile_elements | 描述settings配置文件的内容: |
系统信息相关 | settings_profiles | 包含 Setting 配置文件中指定的属性. |
系统信息相关 | table_engines | 包含服务器支持的表引擎的描述及其功能支持信息。 |
系统信息相关 | time_zones | 包含 ClickHouse 服务器支持的时区列表. 此时区列表可能因 ClickHouse 的版本而异 |
系统信息相关 | stack_trace | 包含所有服务器线程的堆栈跟踪. 允许开发人员对服务器状态进行自省. |
系统信息相关 | detached_parts | 包含关于 MergeTree 表的分离分区的信息。reason 列详细说明了该分区被分离的原因。 |
系统信息相关 | storage_policies | 包含有关 服务器配置 中定义的存储策略和卷信息。 |
工具类相关 | numbers | 这个表有一个名为 number 的 UInt64 列,包含了几乎所有从 0 开始的自然数。 |
工具类相关 | numbers_mt | 带mt的表读取是并行的 |
工具类相关 | one | 此表包含一行只有一个值为 0 的 dummy UInt8 列的数据。 |
未分类 | replicated_fetches | 包含当前正在运行的后台提取的信息. |
replication_queue | 包含用于 ReplicatedMergeTree 系列表的复制队列中存储在ZooKeeper中的任务的信息. | |
zookeeper | 如果未配置ZooKeeper,则该表不存在。 允许从配置中定义的ZooKeeper集群读取数据。 | |
contributors | 此系统表包含有关贡献者的信息。排列顺序是在查询执行时随机生成的。 | |
data_skipping_indices | 包含有关所有表中现有数据跳过索引的信息.(我这个版本没这张表啊,有需要了解去官网看看吧) | |
dictionaries | 包含以下信息 外部字典. | |
distributed_ddl_queue | 包含有关在集群上执行的分布式ddl查询(集群环境)的信息. | |
distribution_queue | 包含关于队列中要发送到分片的本地文件的信息. 这些本地文件包含通过以异步模式将新数据插入到Distributed表中而创建的新部分. | |
errors | 包含错误代码和它们被触发的次数. | |
graphite_retentions | 包含有关参数的信息 graphite_rollup 这是在表中使用 *GraphiteMergeTree 引擎 | |
licenses | 包含位于 ClickHouse 源的 contrib 目录中的第三方库的许可证. | |
merge_tree_settings | 包含 MergeTree 表的设置 (Setting) 信息。 | |
未分类 | processors | 对用户来说没太大意义,对系统而言有强相关的表,别乱动 |
三、日志相关表详解
查问题至尊SQL(如果没自己想要的,翻下去找自己想要的字段)
select
query, --查询语句.
count(1) cnt,
sum(query_duration_ms) /1000 `查询消耗的时间(秒)`,
sum(read_rows) read_rows, --从参与了查询的所有表和表函数读取的总行数.
sum(read_bytes) / 1024 / 1024 `read(MB)`, -- 从参与了查询的所有表和表函数读取的大小
sum(written_rows) written_rows, -- 对于 INSERT 查询,为写入的行数
sum(written_bytes) written_bytes, --对于 INSERT 查询时,为写入的字节数。
sum(result_rows) result_rows, --SELECT 查询结果的行数,或INSERT 的行数。
sum(result_bytes) result_bytes, -- 存储查询结果的RAM量.
sum(memory_usage) memory_usage -- 查询使用的内存.
from system.query_log
where 1=1
and event_date = today() -- 日期条件 yyyyMMdd
and type in (1,2) -- 1 — 查询成功启动. 2 — 查询成功完成. 3 — 查询执行前有异常. 4 — 查询执行期间有异常.
and stack_trace != '' -- 如果查询成功完成,则为空字符串。
group by query
order by cnt,`查询消耗的时间(秒)` desc
query_log
-
type
— 执行查询时的事件类型. 值:'QueryStart' = 1
— 查询成功启动.'QueryFinish' = 2
— 查询成功完成.'ExceptionBeforeStart' = 3
— 查询执行前有异常.'ExceptionWhileProcessing' = 4
— 查询执行期间有异常.
-
event_date
— 查询开始日期. -
event_time
— 查询开始时间. -
query_start_time
— 查询执行的开始时间. -
query_duration_ms
— 查询消耗的时间(毫秒). -
read_rows
— 从参与了查询的所有表和表函数读取的总行数. 包括:普通的子查询,IN
和JOIN
的子查询. 对于分布式查询read_rows
包括在所有副本上读取的行总数。 每个副本发送它的read_rows
值,并且查询的服务器-发起方汇总所有接收到的和本地的值。 -
read_bytes
— 从参与了查询的所有表和表函数读取的总字节数. 然后同read_rows
-
written_rows
— 对于INSERT
查询,为写入的行数。 对于其他查询,值为0。 -
written_bytes
— 对于INSERT
查询时,为写入的字节数。 对于其他查询,值为0。 -
result_rows
—SELECT
查询结果的行数,或INSERT
的行数。 -
result_bytes
— 存储查询结果的RAM量. -
memory_usage
— 查询使用的内存. -
query
— 查询语句. -
exception
— 异常信息. -
exception_code
— 异常码. -
stack_trace
如果查询成功完成,则为空字符串。 -
is_initial_query
— 查询类型. 可能的值:- 1 — 客户端发起的查询.
- 0 — 由另一个查询发起的,作为分布式查询的一部分.
-
user
— 发起查询的用户. -
query_id
— 查询ID. -
address
— 发起查询的客户端IP地址. -
port
— 发起查询的客户端端口. -
initial_user
— 初始查询的用户名(用于分布式查询执行). -
initial_query_id
— 运行初始查询的ID(用于分布式查询执行). -
initial_address
— 运行父查询的IP地址. -
initial_port
发起父查询的客户端端口. -
interface
— 发起查询的接口. 可能的值:- 1 — TCP.
- 2 — HTTP.
-
os_user
运行的操作系统用户名. -
client_hostname
运行 或其他TCP客户端的机器的主机名。 -
client_name
clickhouse-client 或其他TCP客户端的名称。 -
http_method
(UInt8) — 发起查询的HTTP方法. 可能值:- 0 — TCP接口的查询.
- 1 —
GET
- 2 —
POST
-
thread_ids
— 参与查询的线程数. -
Settings.Names
— 客户端运行查询时更改的设置的名称。 要启用对设置的日志记录更改,请将log_query_settings参数设置为1。 -
Settings.Values
—Settings.Names
列中列出的设置的值。
query_thread_log
-
event_date
— 该查询线程执行完成的日期。 -
event_time
— 该查询线程执行完成的时间。 -
query_start_time
— 查询的开始时间。 -
query_duration_ms
— 查询执行持续的时间。 -
read_rows
— 读取的行数。 -
read_bytes
— 读取的字节数。 -
written_rows
— 对于INSERT
查询,写入的行数。 对于其他查询,为0。 -
written_bytes
— 对于INSERT
查询,写入的字节数。 对于其他查询,为0。 -
memory_usage
— 在线程上下文,分配的内存和空闲内存之差。 -
peak_memory_usage
— 在线程上下文,分配的内存和空闲内存之差的最大值。 -
thread_name
— 线程名。 -
thread_number
— 内部线程ID。 -
thread_id
— 线程ID。 -
master_thread_id
— OS初始线程的初始ID。 -
query
— 查询语句。 -
is_initial_query
— 查询类型,可能的值:- 1 — 由用户发起的查询。
- 0 — 由其他查询发起的分布式查询。
-
user
— 发起查询的用户名。 -
query_id
— 查询的ID。 -
address
— 发起查询的IP地址。 -
port
— 发起查询的端口。 -
initial_user
— 首次发起查询的用户名(对于分布式查询)。 -
initial_query_id
— 首次发起查询的ID(对于分布式查询)。 -
initial_address
— 发起该查询的父查询IP地址。 -
initial_port
— 发起该查询的父查询端口。 -
interface
— 发起查询的界面,可能的值:- 1 — TCP.
- 2 — HTTP.
-
http_method
— 发起查询的HTTP方法,可能的值:- 0 — 查询通过TCP界面发起。
- 1 —
GET
方法被使用。 - 2 —
POST
方法被使用。
-
revision
— ClickHouse 修订版本号. -
ProfileEvents
对于该线程的多个指标计数器。
processes
-
user
– 进行查询的用户。 请记住,对于分布式处理,查询将发送到默认用户下的远程服务器。 该字段包含特定查询的用户名,而不是该查询发起的查询的用户名。 -
address
– 发出请求的 IP 地址。 -
elapsed
– 自请求执行开始以来的秒数。 -
rows_read
– 从表中读取的行数。 -
bytes_read
– 从表中读取的未压缩字节数。 -
total_rows_approx
– 应读取的总行数的近似值。 -
memory_usage
– 请求使用的 RAM 量。 它可能不包括某些类型的专用内存。 -
query
– 查询文本。 对于 INSERT,它不包括要插入的数据。 -
query_id
– 查询 ID(如果已定义)。 -
is_cancelled
– 查询被取消。 -
is_all_data_sent
– 是否所有数据都发送到客户端(换句话说,查询已在服务器上完成)。