tencent cloud

文档反馈

系统表说明

最后更新时间:2022-04-25 12:30:06

    本文来自 ClickHouse 官方文档。

    • 系统表用于实现部分系统功能,并提供途径来获取与系统运行状态相关的信息。
    • 系统表无法删除(但可以执行 DETACH)。
    • 系统表中的数据或者元数据没有以文件的方式存储在磁盘上。server 启动时将创建所有系统表。
    • 系统表是只读的。
    • 系统表位于“system”数据库中。

    system.asynchronous_metrics

    system.asynchronous_metrics 表包含在后台定期计算的指标。例如,正在使用的 RAM 数量。

    列信息:

    列名 类型 描述
    metric String 指标名
    value Float64 指标值

    示例:

    SELECT * FROM system.asynchronous_metrics LIMIT 10
    

    列名 类型 描述
    cluster String 集群名称
    shard_num UInt32 集群中分片号
    shard_weight UInt32 写数据时分片的权重
    replica_num UInt32 分片中的副本号
    host_name String 节点名
    host_address String 节点 IP 地址
    port UInt16 用于连接 server 的端口号
    user String 用于连接 server 的用户名
    errors_count UInt32 该节点无法到达副本的次数
    estimated_recovery_time UInt32 从当前到副本错误数为零且被认为恢复正常的时间,单位为秒

    system.clusters

    system.clusters 表包含配置文件中可用集群以及配置文件中 server 的信息。

    列信息:
    对于集群的每一个查询,errors_count 都会更新一次,但 estimated_recovery_time 会根据需求重新计算,所以可能会出现这样的情况,当 errors_count 非零、estimated_recovery_time 为零时,下次查询会把 errors_count 置为零,并且尝试使用副本,就好像没有错误一样。

    system.columns

    system.columns 表包含了所有表的列信息。您可以使用此表获取与 DESCRIBE TABLE 查询类似的信息,并且一次获取多个表的信息。

    列信息:

    列名 类型 描述
    database String 数据库名
    table String 表名
    name String 列名
    type String 列类型
    default_kind String 默认值的表达式类型(DEFAULT、MATERIALIZED、ALIAS),或者为空字符串(如果未定义)
    default_expression String 默认值的表达式,或者为空字符串(如果未定义)
    data_compressed_bytes UInt64 压缩数据的大小,以字节为单位
    data_uncompressed_bytes UInt64 解压缩数据的大小,以字节为单位
    marks_bytes UInt64 marks 的大小,以字节为单位
    comment String 列的注释,或者为空字符串(如果未定义)
    is_in_partition_key UInt8 表示列是否在分区表达式中的标志
    is_in_sorting_key UInt8 表示列是否在排序键表达式中的标志
    is_in_primary_key UInt8 表示列是否在主键表达式中的标志
    is_in_sampling_key UInt8 表示列是否在采样键表达式中的标志

    system.contributors

    system.contributors 包含有关贡献者的信息,所有贡献者以随机顺序排列,该顺序在查询执行时是随机的。

    system.databases

    system.databases 该表仅包含一个名为“name”的 String 列-数据库名称。server 知道每个数据库在表中都有一个对应的条目。该系统表用于实现 SHOW DATABASES 查询。

    system.detached_parts

    system.detached_parts 包含有关 MergeTree 表的分离 part 的信息。reason 列表示为什么该 part 要分离。对于 user-detache 的部分,reason 列为空。有关其他列的描述,请参见 system.parts。如果 part 的名字非法,则某些列的值可能为 NULL,可以使用ALTER TABLE DROP DETACHED PART删除这些 parts。

    system.dictionaries

    system.dictionaries 包含有关外部词典的信息。

    列信息:

    列名 类型 描述
    name String 字典名
    type String 字典类型,Flat、Hashed、Cache
    origin String 描述字典的配置文件的路径
    attribute.names Array(String) 字典提供的属性名称数组
    attribute.types Array(String) 字典提供的属性类型的对应数组
    has_hierarchy UInt8 字典是否分层
    bytes_allocated UInt64 字典使用的 RAM 数量
    hit_rate Float64 对于缓存字典,该值在缓存中的使用百分比
    element_count UInt64 词典中存储的项目数
    load_factor Float64 字典中填充的百分比
    creation_time DateTime 创建字典或上次成功重新加载字典的时间
    last_exception String 错误文本,记录的是因为无法创建字典导致的,创建或重新加载字典时发生的错误
    source String 描述字典数据源的文本

    system.events

    system.events 包含有关系统中发生的事件数的信息。例如,您可以在 system.events 表中找到自 ClickHouse server 启动以来已处理的 SELECT 查询数量。

    列信息:

    列名 类型 描述
    event String 事件名
    value UInt64 事件发生的次数
    description String 事件描述

    示例:

    SELECT * FROM system.events LIMIT 5
    

    system.functions

    system.functions 包含有关普通函数和聚合函数的信息。

    列信息:

    列名 类型 描述
    name String 函数名
    is_aggregate UInt8 是否为聚合函数

    system.graphite_retentions

    system.graphite_retentions 包含与* GraphiteMergeTree引擎一起在表中使用的关于参数 graphip_rollup 的信息。

    列信息:

    列名 类型 描述
    config_name String graphite_rollup 变量名
    regexp String 指标名称的模式
    function String 汇总函数的名称
    age UInt64 数据的最小使用期限(以秒为单位)
    precision UInt64 数据使用期限的精度(以秒为单位)
    priority UInt16 模式优先级
    is_default UInt8 模式是否为默认
    Tables.database Array(String) 使用 config_name 参数的数据库表的名称数组
    Tables.table Array(String) 使用 config_name 参数的表名数组

    system.merges

    system.merges 表包含有关 MergeTree 系列表中当前正在处理的 merge 和 part 突变的信息。

    列信息:

    列名 类型 描述
    database String 表所在的数据库的名称
    table String 表名
    elapsed Float64 自合并开始起经过的时间(以秒为单位)
    progress Float64 已完成工作(从0到1)的百分比
    num_parts UInt64 合并件数
    result_part_name String 合并后将形成的 part 的名称
    is_mutation UInt8 如果此过程是 part 突变,则为1
    total_size_bytes_compressed UInt64 合并块中压缩数据的总大小
    total_size_marks UInt64 合并 parts 中的 marks 总数
    bytes_read_uncompressed UInt64 读取的字节数,未压缩
    rows_read UInt64 读取的行数
    bytes_written_uncompressed UInt64 写入的字节数,未压缩
    rows_written UInt64 写入的行数

    system.metrics

    system.metrics 表包含可以立即计算或具有当前值的指标。例如,同时处理的查询数或当前副本延迟。该表始终是最新的。

    列信息:

    列名 类型 描述
    metric String 指标名
    value Int64 指标值
    description String 指标描述

    所支持的指标可以在 ClickHouse 的源码文件中找到 dbms/src/Common/CurrentMetrics.cpp

    示例:

    SELECT * FROM system.metrics LIMIT 10
    

    system.metric_log

    system.metric_log 表包含来自表 system.metrics 和 system.events 的指标值的历史记录,定期刷新到磁盘。

    要在 system.metric_log 上打开指标历史采集,请按以下内容创建/etc/clickhouse-server/config.d/metric_log.xml,并重启 clickhouse-server:

    <yandex>
       <metric_log>
           <database>system</database>
           <table>metric_log</table>
           <flush_interval_milliseconds>7500</flush_interval_milliseconds>
           <collect_interval_milliseconds>1000</collect_interval_milliseconds>
       </metric_log>
    </yandex>
    

    示例:

    SELECT * FROM system.metric_log LIMIT 1 FORMAT Vertical;
    

    system.numbers

    该表仅包含一个名为“number”的 UInt64 列,其中几乎包含所有从零开始的自然数。您可以使用该表进行测试,或者根据需要进行暴力搜索。从该表读取的数据不会并行化。

    system.numbers_mt

    与 system.numbers 表相同,但读取是并行的。可以按任何顺序返回数字(用于测试)。

    system.one

    该表只有一行一列,其中“dummy”列为 UInt8 类型,值为0。如果 SELECT 查询未指定 FROM 子句,则使用此表。这类似于在其他 DBMS 中找到的 DUAL 表。

    system.parts

    system.parts 包含 MergeTree 表的 parts 信息,每一行描述了一个数据分块。

    列信息:

    列名 类型 描述
    partition String 分区名称
    name String 数据分块名
    active UInt8 表示数据部分是否处于活跃状态的标志。如果数据分块处于活跃状态,则会在表中使用它。否则,它将被删除。合并后,不活跃的数据分块仍然保留
    marks UInt64 marks 数量
    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 merge tree 的深度。0表示当前分块是通过插入而不是通过合并其他分块来创建的
    data_version UInt64 用于确定应将哪些突变应用于数据分块(版本高于 data_version 的突变)
    primary_key_bytes_in_memory UInt64 主键值使用的内存量(以字节为单位)
    primary_key_bytes_in_memory_allocated UInt64 主键值保留的内存量(以字节为单位)
    is_frozen UInt8 表示存在分区数据备份的标志。1,备份存在。0,表示备份不存在
    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 mark_bytes 的别名

    system.part_log

    仅当指定 part_log server 设置时,才会创建 system.part_log 表。该表包含有关 MergeTree 系列表中数据分块发生的事件的信息,例如添加或合并数据。

    列信息:

    列名 类型 描述
    event_type Enum 数据分块发生的事件的类型。可取值为 NEW_PART、MERGE_PARTS、DOWNLOAD_PART、REMOVE_PART、MUTATE_PART、MOVE_PART 其中之一。
    event_date Date 事件日期
    event_time DateTime 事件时间
    duration_ms UInt64 持续时间
    database String 数据分块所在的数据库的名称
    table String 数据分块所在的表的名称
    part_name String 数据分块名
    partition_id String 数据分块插入到的分区的 ID
    rows UInt64 数据分块的行数
    size_in_bytes UInt64 数据分块的大小(以字节为单位)
    merged_from Array(String) 组成当前分块的分块名称数组(合并后)
    bytes_uncompressed UInt64 未压缩字节的大小
    read_rows UInt64 合并期间读取的行数
    read_bytes UInt64 合并期间读取的字节数
    error UInt16 发生错误的错误码
    exception String 发生错误的错误信息

    system.part_log 表在第一次将数据插入到 MergeTree 表之后创建。

    system.processes

    该系统表用于实现 SHOW PROCESSLIST 查询。

    列信息:

    列名 类型 描述
    user String 进行查询的用户
    address String 发出请求的 IP 地址
    elapsed Float64 自请求执行开始以来的时间(以秒为单位)
    rows_read UInt64 从表中读取的行数。对于分布式处理,在请求者 server 上,这是所有远程 server 的总数
    bytes_read UInt64 从表中读取的未压缩字节数。对于分布式处理,在请求者 server 上,这是所有远程 server 的总数
    total_rows_approx UInt64 应该读取的总行数的近似值。对于分布式处理,在请求者 server 上,这是所有远程 server 的总数
    memory_usage UInt64 请求使用的 RAM 量。它可能不包括某些类型的专用内存
    query String 查询文本。对于 INSERT,不包含要插入的数据
    query_id String 查询 ID(如果已定义)

    system.text_log

    system.text_log 表包含日志记录条目。可以使用 text_log.level 服务器设置来限制进入该表的日志记录级别。

    列信息:

    列名 类型 描述
    event_date Date 条目日期
    event_time DateTime 条目时间
    microseconds UInt32 条目时间
    thread_name String 进行日志记录的线程的名称
    thread_id UInt64 操作系统线程 ID
    level Enum8 日志级别。'Fatal' = 1,'Critical' = 2,'Error' = 3,'Warning' = 4,'Notice' = 5,'Information' = 6,'Debug' = 7,'Trace' = 8
    query_id String 查询的 ID
    logger_name LowCardinality(String) 记录器的名称(如 DDLWorker)
    message String 日志信息
    revision UInt32 ClickHouse 版本
    source_file LowCardinality(String) 完成日志记录的源文件
    source_line UInt64 完成记录的源代码行

    system.query_log

    system.query_log 表包含有关查询执行的信息。对于每个查询,您可以查看处理开始时间、处理持续时间、错误消息和其他信息。

    • 该表不包含 INSERT 查询的输入数据。
    • 只有指定了 query_log server 参数,ClickHouse 才会创建此表。此参数设置日志记录规则,例如日志记录间隔或将要登录查询的表的名称。
    • 要启用查询日志记录,请将 log_queries 参数设置为1。

    system.query_log 表注册两种查询:

    • 客户端直接运行的初始查询。
    • 由其他查询(用于分布式查询执行)启动的子查询。对于这些类型的查询,有关父查询的信息显示在initial_*列中。

    每个查询根据查询的状态在 query_log 表中创建一两行:

    • 如果查询执行成功,则将创建两个 type 为1和2的事件(请参见 type 列)。
    • 如果查询处理期间发生错误,则会创建两个 type 为1和4的事件。
    • 如果在启动查询之前发生错误,则会创建一个 type 为3的事件。

    默认情况下,日志以7.5秒的间隔添加到表中。您可以在 query_log server 中设置此间隔(请参见 flush_interval_milliseconds 参数)。要将日志从内存缓冲区强行刷新到表中,请使用 SYSTEM FLUSH LOGS 查询。

    手动删除表后,将即时自动创建它。所有先前的日志将被删除。

    NOTE:日志的存储期限不受限制。日志不会自动从表格中删除,用户需自行删除过时的日志。您可以在 query_log server 中为 system.query_log 表指定一个任意分区键(请参阅 partition_by 参数)。

    system.query_thread_log

    system.query_thread_log 表包含有关每个查询执行线程的信息。

    • 只有指定了 query_thread_log server 参数,ClickHouse 才会创建此表。此参数设置日志记录规则,例如日志记录间隔或将要登录查询的表的名称。
    • 要启用查询日志记录,请将 log_query_threads 参数设置为1。

    默认情况下,日志以7.5秒的间隔添加到表中。您可以在 query_log server 中设置此间隔(请参见 flush_interval_milliseconds 参数)。要将日志从内存缓冲区强行刷新到表中,请使用 SYSTEM FLUSH LOGS 查询。

    手动删除表后,将即时自动创建它。所有先前的日志将被删除。

    NOTE:日志的存储期限不受限制。日志不会自动从表格中删除,用户需自行删除过时的日志。您可以在 query_log server 中为 system.query_log 表指定一个任意分区键(请参阅 partition_by 参数)。

    system.trace_log

    system.trace_log 表包含由采样查询分析器收集的堆栈跟踪记录。设置 trace_log server 配置部分后,ClickHouse 会创建此表。另外,还应该设置 query_profiler_real_time_period_ns 和 query_profiler_cpu_time_period_ns。要分析日志,请使用 addressToLine、addressToSymbol 和 demangle 自我检查函数。

    列信息:

    列名 类型 描述
    event_date Date 采样日期
    event_time DateTIme 采样时间
    revision UInt32 ClickHouse server 版本修订
    timer_type Enum8 计时器类型,取值 Real、CPU
    thread_number UInt32 线程标识符
    query_id String 查询标识符,可用于获取有关从 query_log 系统表中运行的查询的详细信息
    trace Array(UInt64) 采样时的堆栈跟踪,每个元素都是 ClickHouse server 进程内部的虚拟内存地址

    示例:

    SELECT * FROM system.trace_log LIMIT 1 \G;
    

    system.replicas

    system.replicas 表包含本地服务器上复制表的信息和状态。该表可用于监视,该表为每个Replicated *表包含一行。

    列信息:

    列名 类型 描述
    database String 数据库名
    table String 表名
    engine String 表引擎名
    is_leader UInt8 副本是否为 leader
    can_become_leader UInt8 副本是否可以被选为 leader
    is_readonly UInt8 副本是否处于只读模式
    is_session_expired UInt8 与 ZooKeeper 的会话已过期。基本上与 is_readonly 相同
    future_parts UInt32 尚未完成的 INSERTs 或 merges 的结果数据分块数
    parts_to_check UInt32 队列中用于验证的数据分块的数量。如果怀疑分块可能已损坏,则将其放入验证队列
    zookeeper_path String ZooKeeper 中表数据的路径
    replica_name String ZooKeeper 中的副本名称,同一张表的不同副本具有不同的名称
    replica_path String ZooKeeper 中复制数据的路径
    columns_version Int32 表结构的版本号,表示执行 ALTER 的次数
    queue_size UInt32 等待执行操作的队列的大小。操作包括插入数据块,合并及某些其他操作。它通常与 future_parts 一致
    inserts_in_queue UInt32 需要插入的数据块的插入数量。插入内容通常会很快复制,如果这个数字很大,则表示有问题
    merges_in_queue UInt32 等待进行的合并数。有时合并很长,因此该值可能长时间大于零
    part_mutations_in_queue UInt32 等待突变的数量
    queue_oldest_time DateTime 如果 queue_size 大于0,则显示何时将最早的操作添加到队列中
    inserts_oldest_time DateTime 见 queue_oldest_time
    merges_oldest_time DateTime 见 queue_oldest_time
    part_mutations_oldest_time DateTime 见 queue_oldest_time
    log_max_index UInt64 通用活跃日志中的最大条目数
    log_pointer UInt64 副本复制到其执行队列的通用活跃日志中的最大条目数加1。如果 log_pointer 远小于 log_max_index,会出现问题
    last_queue_update DateTime 上次更新队列的时间
    absolute_delay UInt64 当前副本有几秒钟的延迟
    total_replicas UInt8 该表的已知副本总数
    active_replicas UInt8 在 ZooKeeper 中具有会话的该表的副本数(即正在运行的副本数)

    一次只能有一个副本作为 leader。leader 负责选择要执行的后台 merges。可以写入任何可用并在 ZK 中具有会话的副本,无论其是否为 leader。

    • 如果您请求所有列,则该表的工作可能会有点慢,因为对于每一行都会从 ZooKeeper 进行多次读取。
    • 如果您无需请求最后4列(log_max_index、log_pointer、total_replicas、active_replicas),则该表可以快速运行。

    例如,您可以检查所有内容是否正常运行,如下所示:

    SELECT
      database,
      table,
      is_leader,
      is_readonly,
      is_session_expired,
      future_parts,
      parts_to_check,
      columns_version,
      queue_size,
      inserts_in_queue,
      merges_in_queue,
      log_max_index,
      log_pointer,
      total_replicas,
      active_replicas
    FROM system.replicas
    WHERE
         is_readonly
      OR is_session_expired
      OR future_parts > 20
      OR parts_to_check > 10
      OR queue_size > 20
      OR inserts_in_queue > 10
      OR log_max_index - log_pointer > 10
      OR total_replicas < 2
      OR active_replicas < total_replicas
    

    如果此查询未返回任何内容,则表示一切正常。

    system.settings

    该表包含有关当前正在使用的设置的信息,即用于执行您要从 system.settings 表中读取的查询。

    列信息:

    列名 类型 描述
    name String 设置名
    value String 设置值
    changed UInt8 设置是在配置中显式定义还是显式更改

    示例:

    SELECT name,value,changed FROM system.settings WHERE changed;
    

    system.table_engines

    该表包含 server 支持的表引擎的描述及其功能支持信息。该表只有一列,表示表引擎的名称。

    示例:

    select * from system.table_engines limit 5;
    

    system.tables

    该表包含 server 知道的每个表的元数据,分离的表未显示在 system.tables 中。

    列信息:

    列名 类型 描述
    database String 表所在的数据库的名称
    name String 表名
    engine String 表引擎名称(不带参数)
    is_temporary UInt8 表示表是否为临时的标志
    data_path String 文件系统中表数据的路径
    metadata_path String 文件系统中表元数据的路径
    metadata_modification_time DateTime 表元数据的最新修改时间
    dependencies_database Array(String) 数据库依赖
    dependencies_table Array(String) 表依赖(基于当前表的 MaterializedView 表)
    create_table_query String 用于创建表的查询
    engine_full String 表引擎的参数
    partition_key String 表中指定的分区键表达式
    sorting_key String 表中指定的排序键表达式
    primary_key String 表中指定的主键表达式
    sampling_key String 表中指定的采样键表达式

    system.tables 表用于 SHOW TABLES 查询实现。

    system.zookeeper

    如果未配置 ZooKeeper,则该表不存在,允许从配置中定义的 ZooKeeper 集群读取数据。该查询在 WHERE 子句中必须具有“path”相等条件。这是 ZooKeeper 中要获取其数据的子代的路径。

    查询命令SELECT * FROM system.zookeeper WHERE path ='/ clickhouse';输出/ clickhouse节点上所有子级的数据。要输出所有根节点的数据,请写路径='/'。如果“path”中指定的路径不存在,则会抛出异常。

    列信息:

    列名 类型 描述
    name String 节点名称
    path String 节点路径
    value String 节点值
    dataLength Int32 值的大小
    numChildren Int32 后代数
    czxid Int64 创建节点的事务的 ID
    mzxid Int64 最后更改节点的事务的 ID
    pzxid Int64 最后删除或添加后代的事务的 ID
    ctime DateTime 节点创建时间
    mtime DateTime 节点的最后修改时间
    version Int32 节点版本,节点被更改的次数
    cversion Int32 添加或删除后代的数量
    aversion Int32 ACL 的更改数量
    ephemeralOwner Int64 对于临时节点,拥有该节点的会话的 ID

    system.mutations

    该表包含有关 MergeTree 表的突变及其进度的信息,每个突变命令由单行表示。

    列信息:

    列名 类型 描述
    database String 应用了突变的数据库名称
    table String 应用了突变的表名称
    mutation_id String 突变 ID
    command String 突变命令
    create_time DateTime 该突变命令提交执行的时间
    block_numbers.partition_id Array(String) 分区 ID
    block_numbers.number Array(Int64) 块号
    parts_to_do Int64 完成突变需要突变的数据分块的数量
    is_done UInt8 突变完成标识
    latest_failed_part String 不能突变的最近分块的名称
    latest_fail_time DateTime 最近一次分块突变失败的时间
    latest_fail_reason String 导致最近的分块突变失败的异常消息

    system.disks

    该表包含有关 server 配置中定义的磁盘的信息。

    列信息:

    列名 类型 描述
    name String server 配置中的磁盘名称
    path String 文件系统中挂载点的路径
    free_space UInt64 磁盘上的可用空间(以字节为单位)
    total_space UInt64 磁盘卷(以字节为单位)
    keep_free_space UInt64 应该在磁盘上保持可用空间的磁盘空间量(以字节为单位)。在磁盘配置的 keep_free_space_bytes 参数中定义

    system.storage_policies

    该表包含有关 server 配置中定义的存储策略和卷的信息。

    列信息:

    列名 类型 描述
    policy_name String 存储策略名称
    volume_name String 存储策略中定义的卷名称
    volume_priority UInt64 配置中的卷优先级
    disks Array(String) 磁盘名称,在存储策略中定义
    max_data_part_size UInt64 可以存储在卷磁盘上的数据分块的大小(0 - 无穷)
    move_factor Float32 可用磁盘空间比率。当比率超过配置参数的值时,ClickHouse 开始按顺序将数据移至下一个卷

    如果存储策略包含一个以上的卷,则每个卷的信息都存储在表的单独一行中。

    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持