Clickhouse自带系统库system,启动时创建系统表,无数据文件,主要用于记录Clickhouse的系统信息和状态指标。
1.query_log
作用:ClickHouse开启慢sql查询
开启方法:
打开各个ClickHouse实例的users.xml文件,在默认配置最上层profile(如default)中加入:
<log_queries>1</log_queries>
service clickhouse-server restart
注意:如添加该参数之后表不自动创建,需要重启clickhouse-server服务。
检查每个节点ch中config.xml文件里默认的日志配置是否开启
<!-- Query log. Used only for queries with setting log_queries = 1. -->
<query_log>
<!-- What table to insert data. If table is not exist, it will be created.
When query log structure is changed after system update,
then old table will be renamed and new table will be created automatically.
-->
<database>system</database>
<table>query_log</table>
<!--
PARTITION BY expr https://clickhouse.yandex/docs/en/table_engines/custom_partitioning_key/
Example:
event_date
toMonday(event_date)
toYYYYMM(event_date)
toStartOfHour(event_time)
-->
<partition_by>toYYYYMM(event_date)</partition_by>
<!-- Interval of flushing data. -->
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>
查询:
select * from system.query_log limit 1\G
Row 1:
──────
type: QueryStart
event_date: 2021-04-07
event_time: 2021-04-07 09:19:17
query_start_time: 2021-04-07 09:19:17
query_duration_ms: 0
read_rows: 0
read_bytes: 0
written_rows: 0
written_bytes: 0
result_rows: 0
result_bytes: 0
memory_usage: 0
query: SELECT * FROM system.query_log
exception:
stack_trace:
is_initial_query: 1
user: default
query_id: 61720a95-c6d4-43d1-bbbc-4c4f9de1ca54
address: ::ffff:127.0.0.1
port: 5404
initial_user: default
initial_query_id: 61720a95-c6d4-43d1-bbbc-4c4f9de1ca54
initial_address: ::ffff:127.0.0.1
initial_port: 5404
interface: 1
os_user: root
client_hostname: worker1
client_name: ClickHouse client
client_revision: 54432
client_version_major: 20
client_version_minor: 2
client_version_patch: 1
http_method: 0
http_user_agent:
quota_key:
revision: 54432
thread_numbers: []
os_thread_ids: []
ProfileEvents.Names: []
ProfileEvents.Values: []
Settings.Names: ['use_uncompressed_cache','load_balancing','log_queries','max_memory_usage']
Settings.Values: ['0','random','1','10000000000']
列:
type (Enum8) :执行查询时发生的事件的类型
QueryStart’ = 1 查询执行开始
QueryFinish’ = 2 查询执行成功
event_date (Date) 查询开始日期
event_time (DateTime) 查询开始日期
query_start_time (DateTime) 查询执行的开始时间。
query_duration_ms (UInt64) 查询执行的持续时间(毫秒)
read_rows (UInt64) 参与查询的所有表和表函数中读取的总数或行数。包括常用的子查,IN和JOIN的子查询。对于分布式查询,read_rows包括在所有副本上读取的行总数。每个副本发送它的read_rows值,查询的服务器启动器汇总所有接收到的值和本地值。缓存卷不会影响这个值。
read_bytes (UInt64) 参与查询的所有表和表函数中读取的总数或行数。包括常用的子查,IN和JOIN的子查询。对于分布式查询,read_rows包括在所有副本上读取的行总数。每个副本发送它的read_rows值,查询的服务器启动器汇总所有接收到的值和本地值。缓存卷不会影响这个值。
written_rows (UInt64) 对于插入查询,表示写入的行数。对于其他查询,列值为0
written_bytes (UInt64) 对于插入查询,表示写入的字节数。对于其他查询,列值为0。
result_rows (UInt64) 选择查询结果中的行数,或插入查询中的行数
result_bytes (UInt64) 用于存储查询结果的RAM(字节)容量。
memory_usage (UInt64) 查询所消耗的内存。
query (String) 查询语句
exception (String) 异常输出
stack_trace (String) 堆栈跟踪。如果查询成功完成,则为空字符串
is_initial_query (UInt8) 查询类型
1 客户端发起的查询
0 查询是作为分布式查询执行的一部分由另一个查询发起的
user (String) 当前查询的用户名
query_id (String) 查询编号
address (IPv6) 进行查询的IP地址
port (UInt16) 查询的客户端端口
initial_user (String) 运行初始查询的用户名(用于分布式查询执行
initial_query_id (String) 初始查询的ID(用于分布式查询执行)
initial_address (IPv6) 父查询的IP地址
initial_port (UInt16) 父查询的客户端端口
interface (UInt8) 发起查询的接口
1 — TCP.
2 — HTTP.
os_user (String) 运行clickhouse-client的操作系统用户名
client_hostname (String) 运行clickhouse-client或另一个TCP客户机的客户机的主机名
client_name (String) Clickhouse-client或其他TCP客户端名称
client_revision (UInt32) 修改clickhouse-client或其他TCP客户端
client_version_major (UInt32) Clickhouse-client或其他TCP客户端的主要版本。
client_version_minor (UInt32) Clickhouse-client或其他TCP客户端的小版本。
client_version_patch (UInt32) Clickhouse-client或其他TCP客户端版本的补丁组件.
http_method (UInt8) 发起查询的HTTP方法
0 — 从TCP接口启动查询
1 — GET 方法
2 — POST 方法
http_user_agent (String) 在HTTP请求中传递的UserAgent头。
quota_key (String) 配额设置中指定的“配额键
revision (UInt32) ClickHouse revision
thread_numbers (Array(UInt32)) 参与查询执行的线程数
ProfileEvents.Names (Array(String)) 衡量不同指标的计数器
ProfileEvents.Values (Array(UInt64)) ProfileEvents中列出的度量值
Settings.Names (Array(String)) 客户端运行查询时更改的设置名称。要启用对设置的日志更改,将log_query_settings参数设置为1
Settings.Values (Array(String)) 设置中列出的设置值
备注:partition_by表示查询日志表的分区列,语法与普通建表时相同,默认按月分区。flush_interval_milliseconds则表示日志刷入表中的周期,默认7.5秒,可以根据取数时效自己调节
注意事项:
需在每个节点users.xml配置文件添加该参数,并重启server服务
外部查询需要创建分布式表,以便统计所用节点的查询日志
CREATE TABLE IF NOT EXISTS system.query_log_all
ON CLUSTER sht_ck_cluster_pro
AS system.query_log
ENGINE = Distributed(sht_ck_cluster_pro,system,query_log,rand());
该日志表没有自动过期功能,为了防止历史日志数据占用大量磁盘空间,可以手动为每张query_log表设定TTL(这边根据需求设置默认为15天)
ALTER TABLE system.query_log MODIFY TTL event_date + INTERVAL 15 DAY;
2.clusters
metrika.xml 配置文件中配置的集群副本、分片等信息。
SELECT * FROM system.clusters LIMIT 2 FORMAT Vertical;
SELECT *
FROM system.clusters
LIMIT 2
FORMAT Vertical
Row 1:
──────
cluster: test_cluster_two_shards
shard_num: 1
shard_weight: 1
replica_num: 1
host_name: 127.0.0.1
host_address: 127.0.0.1
port: 9000
is_local: 1
user: default
default_database:
errors_count: 0
estimated_recovery_time: 0
Row 2:
──────
cluster: test_cluster_two_shards
shard_num: 2
shard_weight: 1
replica_num: 1
host_name: 127.0.0.2
host_address: 127.0.0.2
port: 9000
is_local: 0
user: default
default_database:
errors_count: 0
estimated_recovery_time: 0
2 rows in set. Elapsed: 0.002 sec.
列:
cluster (字符串) 群集名称
shard_num (UInt32) 集群中的分片号,从1开始
shard_weight (UInt32) 写入数据时分片的权重
replica_num (UInt32) 分片中的副本号,从1开始
host_name (字符串) 主机名,在配置中指定
host_address (字符串) 从DNS获得的主机IP地址
port (UInt16) 用于连接到服务器的端口
user (字符串) 用于连接到服务器的用户名
errors_count (UInt32) 该主机无法访问副本的次数
estimated_recovery_time (UInt32) 距副本错误计数为零为止还剩几秒,它被认为恢复了正常
请注意,errors_count对集群的每个查询都会更新一次,但是estimated_recovery_time会按需重新计算。因此,可能存在非零errors_count和零的情况estimated_recovery_time,下一个查询将为零,errors_count并尝试使用副本,就好像它没有错误一样。
3.columns
类似查询DESCRIBE TABLE的信息,但是一次可以获取多个表。
select * from system.columns LIMIT 2,1 FORMAT Vertical;
Row 1:
──────
database: default
table: .inner.trans_log_view
name: bankid
type: Enum8('微信支付' = 1, '支付宝' = 2, '中国银联' = 3, '中铁银通卡' = 4, '工商银行' = 5, '农业银行' = 6, '中国银行' = 7, '建设银行' = 8, '招商银行' = 9, '邮储银行' = 10, '第三方支付' = 11)
default_kind:
default_expression:
data_compressed_bytes: 141683
data_uncompressed_bytes: 560858
marks_bytes: 1680
comment:
is_in_partition_key: 0
is_in_sorting_key: 1
is_in_primary_key: 1
is_in_sampling_key: 0
compression_codec:
1 rows in set. Elapsed: 0.003 sec.
列:
database(String) 数据库名称
table(String) 表名
name(String) 列名
type(String) 列类型
position(UInt64) 以1开头的表中列的顺序位置
default_kind(字符串) 表达类型(DEFAULT,MATERIALIZED,ALIAS作为默认值)或者如果没有定义它为空字符串
default_expression(String) 默认值的表达式,如果未定义,则为空字符串
data_compressed_bytes(UInt64) 压缩数据的大小,以字节为单位
data_uncompressed_bytes(UInt64) 解压缩数据的大小,以字节为单位
marks_bytes(UInt64) 标记的大小,以字节为单位
comment(String) 对列进行注释,如果未定义,则为空字符串
is_in_partition_key(UInt8) 指示列是否在分区表达式中的标志
is_in_sorting_key(UInt8) 指示列是否在排序键表达式中的标志
is_in_primary_key(UInt8) 指示列是否在主键表达式中的标志
is_in_sampling_key(UInt8) 指示列是否在采样关键字表达式中的标志
compression_codec(String) 压缩编解码器名称
4.crash_log
堆栈跟踪的致命错误信息。默认情况下,该表在数据库中不存在,仅在发生致命错误时才创建该表。
SELECT * FROM system.crash_log ORDER BY event_time DESC LIMIT 1;
(结果不完整)
Row 1:
──────
event_date: 2020-10-14
event_time: 2020-10-14 15:47:40
timestamp_ns: 1602679660271312710
signal: 11
thread_id: 23624
query_id: 428aab7c-8f5c-44e9-9607-d16b44467e69
trace: [188531193,...]
trace_full: ['3. DB::(anonymous namespace)::FunctionFormatReadableTimeDelta::executeImpl(std::__1::vector<DB::ColumnWithTypeAndName, std::__1::allocator<DB::ColumnWithTypeAndName> >&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> > const&, unsigned long, unsigned long) const @ 0xb3cc1f9 in /home/username/work/ClickHouse/build/programs/clickhouse',...]
version: ClickHouse 20.11.1.1
revision: 54442
build_id:
列:
event_date(Datetime) 事件的日期
event_time(Datetime) 事件的时间
timestamp_ns(UInt64) 事件的时间戳,以纳秒为单位
signal(Int32) 信号编号
thread_id(UInt64) 线程ID
query_id(String) 查询ID
trace(Array(UInt64)) 崩溃时的堆栈跟踪。每个元素都是ClickHouse服务器进程内部的虚拟内存地址
trace_full(Array(String)) 崩溃时的堆栈跟踪。每个元素在ClickHouse服务器进程内部都包含一个调用方法
version(String) ClickHouse服务器版本
revision(UInt32) ClickHouse服务器修订版
build_id(String) 编译器生成的BuildID
5.data_type_families
支持的数据类型的信息。
SELECT * FROM system.data_type_families WHERE alias_to = 'String'
┌─name───────┬─case_insensitive─┬─alias_to─┐
│ LONGBLOB │ 1 │ String │
│ LONGTEXT │ 1 │ String │
│ TINYTEXT │ 1 │ String │
│ TEXT │ 1 │ String │
│ VARCHAR │ 1 │ String │
│ MEDIUMBLOB │ 1 │ String │
│ BLOB │ 1 │ String │
│ TINYBLOB │ 1 │ String │
│ CHAR │ 1 │ String │
│ MEDIUMTEXT │ 1 │ String │
└────────────┴──────────────────┴──────────┘
列:
name(String) 数据类型名称
case_insensitive(UInt8) 此属性显示是否可以在查询中以不区分大小写的方式使用数据类型名称。例如,Date和date都有效
alias_to(String) 为其name别名的数据类型名称
6.databases
当前用户可用的数据库的信息。
创建test库
CREATE DATABASE test;
SELECT * FROM system.databases;
┌─name────┬─engine───┬─data_path─────────────────────────┬─metadata_path─────────────────────────┐
│ default │ Ordinary │ /var/lib/clickhouse/data/default/ │ /var/lib/clickhouse/metadata/default/ │
│ system │ Ordinary │ /var/lib/clickhouse/data/system/ │ /var/lib/clickhouse/metadata/system/ │
│ test │ Ordinary │ /var/lib/clickhouse/data/test/ │ /var/lib/clickhouse/metadata/test/ │
└─────────┴──────────┴───────────────────────────────────┴───────────────────────────────────────┘
列:
name(String) 数据库名称
engine(字符串) 数据库引擎
data_path(String) 数据路径
metadata_path(String) 元数据路径
uuid(UUID) 数据库UUID
该name系统表中的列用于实现SHOW DATABASES查询。
7.dictionaries
查询库中所有字典表
SELECT * FROM system.dictionaries\G
Row 1:
──────
database: default
name: dict
status: LOADED
origin: default.dict
type: Hashed
key: UInt64
attribute.names: ['city']
attribute.types: ['String']
bytes_allocated: 27259080
query_count: 0
hit_rate: 1
element_count: 200000
load_factor: 0.19073486328125
source: ClickHouse: default.ip2city
lifetime_min: 1
lifetime_max: 10
loading_start_time: 2021-04-07 12:13:35
loading_duration: 0.027
last_exception:
1 rows in set. Elapsed: 0.003 sec.
列:
database(String) 由DDL查询创建的字典的数据库的名称。其他字典的空字符串
name(字符串) 字典名称
status(Enum8) 词典状态
NOT_LOADED 由于未使用字典,因此未加载字典
LOADED 字典已成功加载
FAILED 由于错误而无法加载字典
LOADING 词典正在加载中
LOADED_AND_RELOADING 字典已成功加载,并且现在正在重新加载(常见原因:SYSTEM RELOAD DICTIONARY查询,超时,字典配置已更改)
FAILED_AND_RELOADING 由于错误而无法加载字典,现在正在加载
origin(String) 描述字典的配置文件的路径
type(String) 字典分配的类型。将词典存储在内存中
key 密钥类型:数字密钥(UInt64)或Сomposite密钥(String)—形式为“((类型1,类型2,…,类型n)”)
attribute.names(Array(String)) 字典提供的属性名称的数组
attribute.types(Array(String)) 字典提供的属性类型的对应数组
bytes_allocated(UInt64) 为字典分配的RAM量
query_count(UInt64) 自从加载字典以来或自上次成功重新引导以来的查询数
hit_rate(Float64) 对于缓存字典,该值在缓存中的使用百分比
element_count(UInt64) 词典中存储的项目数
load_factor(Float64) 字典中填充的百分比(对于哈希字典,百分比填充在哈希表中)
source(String) 描述字典数据源的文本
lifetime_min(UInt64) 字典在内存中的最小生存期,此后ClickHouse尝试重新加载字典(如果invalidate_query已设置,则仅在字典已更改的情况下)。设置以秒为单位
lifetime_max(UInt64) 字典在内存中的最大生存期,此后ClickHouse尝试重新加载字典(如果invalidate_query已设置,则仅在字典已更改的情况下)。设置以秒为单位
loading_start_time(DateTime) 加载字典的开始时间
last_successful_update_time(DateTime) 加载或更新字典的结束时间。帮助监视外部来源的某些故障并调查原因
loading_duration(Float32) 词典加载的持续时间
last_exception(String) 如果无法创建字典,则在创建或重新加载字典时发生的错误的文本
8.disks
查询定义的磁盘相关信息
定义磁盘相关方式请点击:ClickHouse多卷存储策略
SELECT * FROM system.disks;
┌─name────┬─path─────────────────┬───free_space─┬──total_space─┬─keep_free_space─┐
│ default │ /var/lib/clickhouse/ │ 264064196608 │ 424203980800 │ 0 │
└─────────┴──────────────────────┴──────────────┴──────────────┴─────────────────┘
列:
name(String) 服务器配置中的磁盘名称
path(String) 文件系统中安装点的路径
free_space(UInt64) 磁盘上的可用空间(以字节为单位)
total_space(UInt64) 磁盘卷,以字节为单位
keep_free_space(UInt64) 应该在磁盘上保持可用空间的磁盘空间量(以字节为单位)。在keep_free_space_bytes磁盘配置参数中定义
9.distributed_ddl_queue
集群上执行的分布式ddl查询(ON CLUSTER子句)的信息。
SELECT * FROM system.distributed_ddl_queue WHERE cluster = 'test_cluster' LIMIT 1\G
Row 1:
──────
entry: query-0000000000
host_name: clickhouse01
host_address: 172.23.0.11
port: 9000
status: Finished
cluster: test_cluster
query: CREATE DATABASE test_db UUID '4a82697e-c85e-4e5b-a01e-a36f2a758456' ON CLUSTER test_cluster
initiator: clickhouse01:9000
query_start_time: 2020-12-30 13:07:51
query_finish_time: 2020-12-30 13:07:51
query_duration_ms: 6
exception_code: ZOK
1 rows in set. Elapsed: 0.025 sec.
列:
entry(String) 查询ID
host_name(String) 主机名
host_address(String) 主机名解析为的IP地址
port(UInt16) 主机端口
status(Enum8) 查询状态
cluster(String) 群集名称
query(String) 执行查询
initiator(String) 执行查询的节点
query_start_time(DateTime) 查询开始时间
query_finish_time(DateTime) 查询完成时间
query_duration_ms(UInt64) 查询执行的持续时间(以毫秒为单位)
exception_code(Enum8) ZooKeeper的异常代码
10.contributors
有关贡献者的信息。该顺序在查询执行时是随机的。
SELECT * FROM system.contributors LIMIT 10 ;
┌─name──────────────┐
│ Igor │
│ Metehan Çetinkaya │
│ Veloman Yunkan │
│ Ivan Blinkov │
│ philip.han │
│ miha-g │
│ Bogdan Voronin │
│ Vladimir Kozbin │
│ pyos │
│ cekc │
└───────────────────┘
10 rows in set. Elapsed: 0.002 sec.
查查自己的贡献,你不试试吗?
SELECT * FROM system.contributors WHERE name = 'Ansel.zhang' ;
┌─────name─────┐
│ Ansel.zhang │
└──────────────┘
1 rows in set. Elapsed: 0.004 sec.
列:
name (字符串) 来自git log的贡献者(作者)名称。