系统表说明

更新时间:
复制 MD 格式

系统表存储于System数据库中,仅提供数据读取功能,不能被删除或更改,但可以对其进行分离(detach)操作。大多数系统表将其数据存储在RAM中,一个ClickHouse服务在刚启动时便会创建此类系统表。本文为您介绍E-MapReduce(简称EMR)中常用的系统表。

背景信息

system.clusters

该表包含了配置文件中可用的集群及其服务器的信息。

参数数据类型描述
clusterString集群名。
shard_numUInt32集群中的分片数,从1开始。
shard_weightUInt32写数据时该分片的相对权重。
replica_numUInt32分片的副本数量,从1开始。
host_nameString配置中指定的主机名。
host_addressStringDNS获取的主机IP地址。
portUInt16连接到服务器的端口。
userString连接到服务器的用户名。
errors_countUInt32此主机无法访问副本的次数。
slowdowns_countUInt32在与对端请求建立连接时导致副本更改的slowdown的次数。
estimated_recovery_timeUInt32在复制副本错误计数归零并被视为恢复正常之前剩余的秒数。
示例:您可以执行以下命令,查看表信息。
SELECT * FROM system.clusters LIMIT 2 FORMAT Vertical;
返回信息如下。
Row 1:
──────
cluster:                 cluster_emr
shard_num:               1
shard_weight:            1
replica_num:             1
host_name:               emr-header-1.cluster-24****
host_address:            192.168.**.**
port:                    9000
is_local:                1
user:                    default
default_database:
errors_count:            0
estimated_recovery_time: 0

Row 2:
──────
cluster:                 cluster_emr
shard_num:               1
shard_weight:            1
replica_num:             2
host_name:               emr-worker-1.cluster-24****
host_address:            192.168.**.**
port:                    9000
is_local:                0
user:                    default
default_database:
errors_count:            0
estimated_recovery_time: 0

system.query_log

该表包含了已执行查询的相关信息。例如,开始时间、处理持续时间和错误消息。

system.query_log表中记录了两种查询:
  • 客户端直接运行的初始查询。
  • 由其它查询启动的子查询(用于分布式查询执行)。 对于这些类型的查询,有关父查询的信息显示在initial_*列。
根据查询的状态(请参见type列),每个查询在查询日志表中创建一行或两行记录:
  • 如果查询执行成功,则会创建typeQueryStartQueryFinish的两行记录信息。
  • 如果在查询处理期间发生错误,则会创建typeQueryStartExceptionWhileProcessing的两行记录信息。
  • 如果在启动查询之前发生错误,则会创建typeExceptionBeforeStart的一行记录信息。
参数数据类型描述
typeEnum8执行查询时的事件类型。取值如下:
  • 'QueryStart' = 1:查询成功启动。
  • 'QueryFinish' = 2:查询成功完成。
  • 'ExceptionBeforeStart' = 3:查询执行前有异常。
  • 'ExceptionWhileProcessing' = 4 :查询执行期间有异常。
event_dateDate查询开始日期。
event_timeDateTime查询开始时间。
event_time_microsecondsDateTime64以微秒精度查询开始时间。
query_start_timeDateTime查询执行的开始时间。
query_start_time_microsecondsDateTime64以微秒精度查询执行的开始时间。
query_duration_msUInt64查询消耗的时间。单位为毫秒。
read_rowsUInt64从参与了查询的所有表和表函数读取的总行数。包括常用的子查询,INJOIN的子查询。对于分布式查询read_rows包括在所有副本上读取的行总数。 每个副本发送它的read_rows值,并且查询的发起方将所有接收到的和本地的值汇总。 缓存卷不会影响此值。
read_bytesUInt64从参与了查询的所有表和表函数读取的总字节数。包括常用的子查询,INJOIN的子查询。对于分布式查询read_bytes包括在所有副本上读取的字节总数。 每个副本发送它的read_bytes值,并且查询的发起方将所有接收到的值和本地的值汇总。 缓存卷不会影响此值。
written_rowsUInt64对于INSERT查询,为写入的行数。 对于其它查询,值为0。
written_bytesUInt64对于INSERT查询时,为写入的字节数。 对于其它查询,值为0。
result_rowsUInt64SELECT查询结果的行数,或INSERT的行数。
result_bytesUInt64存储查询结果的RAM量。
memory_usageUInt64查询使用的内存。
queryString查询语句。
exceptionString异常信息。
exception_codeInt32异常码。
stack_traceString如果查询成功完成,则为空字符串。
is_initial_queryUInt8查询类型。取值如下:
  • 0:由另一个查询发起的,作为分布式查询的一部分。
  • 1:客户端发起的查询。
userString发起查询的用户。
query_idString查询ID。
addressIpv6发起查询的客户端IP地址。
portUInt16发起查询的客户端端口。
initial_userString初始查询的用户名(用于分布式查询执行)。
initial_query_idString初始查询的ID(用于分布式查询执行)。
initial_addressIpv6运行父查询的IP地址。
initial_portUInt16进行父查询的客户端端口。
interfaceUInt8发起查询的接口。取值如下:
  • 1:TCP
  • 2:HTTP
os_userString运行clickhouse-client的操作系统的用户名。
client_hostnameString运行clickhouse-client或其他TCP客户端的机器的主机名。
client_nameStringclickhouse-client或其他TCP客户端的名称。
client_revisionUInt32clickhouse-client或其他TCP客户端的Revision。
client_version_majorUInt32clickhouse-client或其他TCP客户端的Major Version。
client_version_minorUInt32clickhouse-client或其他TCP客户端的Minor Version。
client_version_patchUInt32clickhouse-client或其他TCP客户端的Patch component。
http_methodUInt8发起查询的HTTP方法。取值如下:
  • 0:TCP接口的查询
  • 1:GET
  • 2:POST
http_user_agentStringHTTP查询中传递的HTTP请求头UserAgent。
quota_keyStringquotas配置里设置的quota key.
revisionUInt32ClickHouse revision。
ProfileEventsMap(String,UInt64)其它事件的指标,可以在表system.events中找到相关的描述。
SettingsMap(String,String)客户端运行查询时更改的设置。要启用对设置的日志记录更改,请将log_query_settings参数设置为1。
thread_idsArray(UInt64)参与查询的线程数。
Settings.NamesArray(String)客户端运行查询时更改的设置的名称。 要启用对设置的日志记录更改,请将log_query_settings参数设置为1。
Settings.ValuesArray(String)Settings.Names列中列出的设置的值。
示例:您可以执行以下命令,查看表信息。
SELECT * FROM system.query_log LIMIT 1 FORMAT Vertical;
返回信息如下。
Row 1:
──────
type:                 QueryStart
event_date:           2021-08-12
event_time:           2021-08-12 14:11:58
query_start_time:     2021-08-12 14:11:58
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
current_database:     default
query:                SELECT * FROM system.query_log LIMIT 1 FORMAT Vertical;
exception_code:       0
exception:            
stack_trace:          
is_initial_query:     1
user:                 default
query_id:             08e1336c-696f-4fad-b01b-255b77e56b1f
address:              ::ffff:127.0.0.1
port:                 60500
initial_user:         default
initial_query_id:     08e1336c-696f-4fad-b01b-255b77e56b1f
initial_address:      ::ffff:127.0.0.1
initial_port:         60500
interface:            1
os_user:              root
client_hostname:      emr-header-1.cluster-235053
client_name:          ClickHouse 
client_revision:      54438
client_version_major: 20
client_version_minor: 8
client_version_patch: 12
http_method:          0
http_user_agent:      
quota_key:            
revision:             54438
thread_ids:           []
ProfileEvents.Names:  []
ProfileEvents.Values: []
Settings.Names:       ['use_uncompressed_cache','load_balancing','max_memory_usage']
Settings.Values:      ['0','random','10000000000']

system.zookeeper

该表可以查到ZooKeeper中的节点信息。

如果未配置ZooKeeper,则该表不存在。 允许从配置中定义的ZooKeeper集群读取数据。 查询必须具有path=条件,或使用WHERE子句设置了path IN条件,这对应于ZooKeeper中要获取数据的子对象的路径。

查询语句SELECT * FROM system.zookeeper WHERE path = '/clickhouse',输出/clickhouse节点的对所有子路径的数据。如果需要输出所有根节点的数据,请写入路径为‘/’。 如果path中指定的路径不存在,则将提示异常。

查询语句SELECT * FROM system.zookeeper WHERE path IN ('/', '/clickhouse'),输出//clickhouse节点上所有子节点的数据。 如果path中指定的路径不存在,则将提示异常。它可以用于一批ZooKeeper路径的查询。

参数数据类型描述
nameString节点的名字。
pathString节点的路径。
valueString节点的值。
dataLengthInt32节点的值长度。
numChildrenInt32子节点的个数。
czxidInt64创建该节点的事务ID。
mzxidInt64最后修改该节点的事务ID。
pzxidInt64最后删除或者增加子节点的事务ID。
ctimeDateTime节点的创建时间。
mtimeDateTime节点的最后修改时间。
versionInt32节点版本和节点被修改的次数。
cversionInt32最后删除或者增加子节点的事务ID。
aversionInt32ACL的修改次数。
ephemeralOwnerInt64针对临时节点,拥有该节点的事务ID。
示例:您可以执行以下命令,查看表信息。
SELECT *
FROM system.zookeeper
WHERE path = '/clickhouse/tables/01-08/visits/replicas'
FORMAT Vertical
返回信息如下。
Row 1:
──────
name:           example01-08-1.yandex.ru
value:
czxid:          932998691229
mzxid:          932998691229
ctime:          2015-03-27 16:49:51
mtime:          2015-03-27 16:49:51
version:        0
cversion:       47
aversion:       0
ephemeralOwner: 0
dataLength:     0
numChildren:    7
pzxid:          987021031383
path:           /clickhouse/tables/01-08/visits/replicas

Row 2:
──────
name:           example01-08-2.yandex.ru
value:
czxid:          933002738135
mzxid:          933002738135
ctime:          2015-03-27 16:57:01
mtime:          2015-03-27 16:57:01
version:        0
cversion:       37
aversion:       0
ephemeralOwner: 0
dataLength:     0
numChildren:    7
pzxid:          987021252247
path:           /clickhouse/tables/01-08/visits/replicas

system.replicas

该表包含本地服务所有复制表的信息和状态,可以用于监控。

参数数据类型描述
databaseString数据库名称。
tableString表名。
engineString 表引擎名称。
is_leaderUInt8副本是否是领导者。
一次只有一个副本可以成为领导者。 领导者负责选择要执行的后台合并。
重要 可以对任何可用且在Zookeeper中具有会话的副本执行写操作,不管该副本是否为leader。
can_become_leaderUInt8副本是否可以当选为领导者。
is_readonlyUInt8副本是否处于只读模式。
存在以下情形时,开启此配置:
  • 配置中缺省了zookeeper的部分。
  • zookeeper重新加载会话时发生未知错误。
  • 在会话期间重新初始化了zookeeper。
is_session_expiredUInt8ZooKeeper的会话已经过期。用法基本上与is_readonly相同。
future_partsUInt32由于尚未完成的插入或合并而显示的数据部分的数量。
parts_to_checkUInt32队列中用于验证的part的数量。 如果怀疑part可能损坏了,则将其放入验证队列。
zookeeper_pathStringZooKeeper中的表数据路径。
replica_nameStringZooKeeper中的副本名称。同一表的不同副本具有不同的名称。
replica_pathStringZooKeeper中副本数据的路径。 与 zookeeper_path/replicas/replica_path下的内容相同。
columns_versionInt32表结构的版本号。 表示执行ALTER的次数。 如果副本有不同的版本,则意味着部分副本还没有进行所有的更改。
queue_sizeUInt32等待执行的操作的队列大小。 操作包括插入数据块、合并和某些其它操作。 它通常与future_parts一致。
inserts_in_queueUInt32需要插入的数据块的数量。

数据的插入通常很快。 如果该数值很大,则说明有问题。

merges_in_queueUInt32等待进行合并的数量。

有时合并时间很长,因此此值可能长时间大于零。

part_mutations_in_queueUInt32等待进行的突变的数量。
queue_oldest_timeDateTime如果queue_size大于0,则显示何时将最早的操作添加到队列。
inserts_oldest_timeDateTime
merges_oldest_timeDateTime
part_mutations_oldest_timeDateTime
log_max_indexUInt64一般活动日志中的最大条目数。
重要 存在与ZooKeeper的活动会话时才具有非零值。
log_pointerUInt64副本复制到其执行队列的常规活动日志中的最大条目数,再加一。 如果log_pointerlog_max_index小,则说明有问题。
重要 存在与ZooKeeper的活动会话时才具有非零值。
last_queue_updateDateTime上次更新队列的时间。
重要 存在与ZooKeeper的活动会话时才具有非零值。
absolute_delayUInt64当前副本最大延迟时间。单位为秒。
重要 存在与ZooKeeper的活动会话时才具有非零值。
total_replicasUInt8此表的已知副本总数。
active_replicasUInt8ZooKeeper中具有会话的此表的副本的数量(即正常运行的副本的数量)。
示例:您可以执行以下命令,查看表信息。
SELECT * FROM system.replicas WHERE table = 'visits' FORMAT Vertical
返回信息如下。
Row 1:
──────
database:                   cltest
table:                      flat_xl_customer_local
engine:                     ReplicatedMergeTree
is_leader:                  1
can_become_leader:          1
is_readonly:                0
is_session_expired:         0
future_parts:               0
parts_to_check:             0
zookeeper_path:             /cltest/cluster_emr-1/flat_xl_customer_local
replica_name:               emr-header-1.cluster-235053
replica_path:               /cltest/cluster_emr-1/flat_xl_customer_local/replicas/emr-header-1.cluster-235053
columns_version:            -1
queue_size:                 0
inserts_in_queue:           0
merges_in_queue:            0
part_mutations_in_queue:    0
queue_oldest_time:          1970-01-01 08:00:00
inserts_oldest_time:        1970-01-01 08:00:00
merges_oldest_time:         1970-01-01 08:00:00
part_mutations_oldest_time: 1970-01-01 08:00:00
oldest_part_to_get:         
oldest_part_to_merge_to:    
oldest_part_to_mutate_to:   
log_max_index:              100157
log_pointer:                100158
last_queue_update:          1970-01-01 08:00:00
absolute_delay:             0
total_replicas:             2
active_replicas:            2
zookeeper_exception:        

system.storage_policies

该表包含了有关存储策略和卷的优先级相关的信息。

参数数据类型描述
policy_nameString存储策略的名称。
volume_nameString存储策略中定义的卷的名称。
volume_priorityUInt64 配置中定义的卷的优先级。
disksString存储策略中定义的磁盘名称。
max_data_part_sizeUInt64可以存储在磁盘卷上的数据part的最大值。
move_factorFloat64可用磁盘空间的比率。当比率超过配置参数的值时,数据将会被移动到下一个卷。
示例:您可以执行以下命令,查看表信息。
SELECT * FROM system.storage_policies
返回信息如下。
┌policy_name─┬─volume_name─┬─volume_priority─┬─disks────────────┬─volume_type─┬─max_data_part_size┬─move_factor─┐
│ default      │ default     │               1 │ ['default']                       │ JBOD        │                  0 │           0 │
│ hdd_in_order │ single      │               1 │ ['disk1','disk2','disk3','disk4'] │ JBOD        │                  0 │         0.1 │
└───────┴──────┴─────────┴─────────────────┴───────┴─────────┴─────────┘

system.disks

该表包含了配置中定义的磁盘信息。

参数数据类型描述
nameString配置的磁盘名称。
pathString文件系统中挂载的磁盘路径。
free_spaceUInt64磁盘上的可用空间(Bytes)。
total_spaceUInt64磁盘的总空间(Bytes)。
keep_free_spaceUInt64磁盘上需要保持空闲的空间。定义在磁盘配置的keep_free_space_bytes 参数中。
示例:您可以执行以下命令,查看表信息。
SELECT * FROM system.disks;
返回信息如下。
┌─name─┬─path─────────┬──free_space┬─total_space┬─keep_free_space┬─type──┐
│ default │ /var/lib/clickhouse/   │ 17236594688 │ 84014424064 │               0 │ local │
│ disk1   │ /mnt/disk1/clickhouse/ │ 17226108928 │ 84003938304 │        10485760 │ local │
│ disk2   │ /mnt/disk2/clickhouse/ │ 28623364096 │ 84003938304 │        10485760 │ local │
│ disk3   │ /mnt/disk3/clickhouse/ │ 34770505728 │ 84003938304 │        10485760 │ local │
│ disk4   │ /mnt/disk4/clickhouse/ │ 59107045376 │ 84003938304 │        10485760 │ local │
└────┴─────────────┴───────┴──────┴────────┴─────┘