系统表存储于System数据库中,仅提供数据读取功能,不能被删除或更改,但可以对其进行分离(detach)操作。大多数系统表将其数据存储在RAM中,一个ClickHouse服务在刚启动时便会创建此类系统表。本文为您介绍E-MapReduce(简称EMR)中常用的系统表。
背景信息
system.clusters
该表包含了配置文件中可用的集群及其服务器的信息。
| 参数 | 数据类型 | 描述 |
|---|---|---|
| cluster | String | 集群名。 |
| shard_num | UInt32 | 集群中的分片数,从1开始。 |
| shard_weight | UInt32 | 写数据时该分片的相对权重。 |
| replica_num | UInt32 | 分片的副本数量,从1开始。 |
| host_name | String | 配置中指定的主机名。 |
| host_address | String | 从DNS获取的主机IP地址。 |
| port | UInt16 | 连接到服务器的端口。 |
| user | String | 连接到服务器的用户名。 |
| errors_count | UInt32 | 此主机无法访问副本的次数。 |
| slowdowns_count | UInt32 | 在与对端请求建立连接时导致副本更改的slowdown的次数。 |
| estimated_recovery_time | UInt32 | 在复制副本错误计数归零并被视为恢复正常之前剩余的秒数。 |
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: 0system.query_log
该表包含了已执行查询的相关信息。例如,开始时间、处理持续时间和错误消息。
- 客户端直接运行的初始查询。
- 由其它查询启动的子查询(用于分布式查询执行)。 对于这些类型的查询,有关父查询的信息显示在
initial_*列。
type列),每个查询在查询日志表中创建一行或两行记录:
- 如果查询执行成功,则会创建
type为QueryStart和QueryFinish的两行记录信息。 - 如果在查询处理期间发生错误,则会创建
type为QueryStart和ExceptionWhileProcessing的两行记录信息。 - 如果在启动查询之前发生错误,则会创建
type为ExceptionBeforeStart的一行记录信息。
| 参数 | 数据类型 | 描述 |
|---|---|---|
| type | Enum8 | 执行查询时的事件类型。取值如下:
|
| event_date | Date | 查询开始日期。 |
| event_time | DateTime | 查询开始时间。 |
| event_time_microseconds | DateTime64 | 以微秒精度查询开始时间。 |
| query_start_time | DateTime | 查询执行的开始时间。 |
| query_start_time_microseconds | DateTime64 | 以微秒精度查询执行的开始时间。 |
| query_duration_ms | UInt64 | 查询消耗的时间。单位为毫秒。 |
| read_rows | UInt64 | 从参与了查询的所有表和表函数读取的总行数。包括常用的子查询,IN和JOIN的子查询。对于分布式查询read_rows包括在所有副本上读取的行总数。 每个副本发送它的read_rows值,并且查询的发起方将所有接收到的和本地的值汇总。 缓存卷不会影响此值。
|
| read_bytes | UInt64 | 从参与了查询的所有表和表函数读取的总字节数。包括常用的子查询,IN和JOIN的子查询。对于分布式查询read_bytes包括在所有副本上读取的字节总数。 每个副本发送它的read_bytes值,并且查询的发起方将所有接收到的值和本地的值汇总。 缓存卷不会影响此值。
|
| written_rows | UInt64 | 对于INSERT查询,为写入的行数。 对于其它查询,值为0。 |
| written_bytes | UInt64 | 对于INSERT查询时,为写入的字节数。 对于其它查询,值为0。 |
| result_rows | UInt64 | SELECT查询结果的行数,或INSERT的行数。 |
| result_bytes | UInt64 | 存储查询结果的RAM量。 |
| memory_usage | UInt64 | 查询使用的内存。 |
| query | String | 查询语句。 |
| exception | String | 异常信息。 |
| exception_code | Int32 | 异常码。 |
| stack_trace | String | 如果查询成功完成,则为空字符串。 |
| is_initial_query | UInt8 | 查询类型。取值如下:
|
| user | String | 发起查询的用户。 |
| query_id | String | 查询ID。 |
| address | Ipv6 | 发起查询的客户端IP地址。 |
| port | UInt16 | 发起查询的客户端端口。 |
| initial_user | String | 初始查询的用户名(用于分布式查询执行)。 |
| initial_query_id | String | 初始查询的ID(用于分布式查询执行)。 |
| initial_address | Ipv6 | 运行父查询的IP地址。 |
| initial_port | UInt16 | 进行父查询的客户端端口。 |
| interface | UInt8 | 发起查询的接口。取值如下:
|
| os_user | String | 运行clickhouse-client的操作系统的用户名。
|
| client_hostname | String | 运行clickhouse-client或其他TCP客户端的机器的主机名。
|
| client_name | String | clickhouse-client或其他TCP客户端的名称。
|
| client_revision | UInt32 | clickhouse-client或其他TCP客户端的Revision。
|
| client_version_major | UInt32 | clickhouse-client或其他TCP客户端的Major Version。
|
| client_version_minor | UInt32 | clickhouse-client或其他TCP客户端的Minor Version。
|
| client_version_patch | UInt32 | clickhouse-client或其他TCP客户端的Patch component。
|
| http_method | UInt8 | 发起查询的HTTP方法。取值如下:
|
| http_user_agent | String | HTTP查询中传递的HTTP请求头UserAgent。 |
| quota_key | String | 在quotas配置里设置的quota key. |
| revision | UInt32 | ClickHouse revision。 |
| ProfileEvents | Map(String,UInt64) | 其它事件的指标,可以在表system.events中找到相关的描述。 |
| Settings | Map(String,String) | 客户端运行查询时更改的设置。要启用对设置的日志记录更改,请将log_query_settings参数设置为1。
|
| thread_ids | Array(UInt64) | 参与查询的线程数。 |
| Settings.Names | Array(String) | 客户端运行查询时更改的设置的名称。 要启用对设置的日志记录更改,请将log_query_settings参数设置为1。
|
| Settings.Values | Array(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路径的查询。
| 参数 | 数据类型 | 描述 |
|---|---|---|
| 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 | 最后删除或者增加子节点的事务ID。 |
| aversion | Int32 | ACL的修改次数。 |
| ephemeralOwner | Int64 | 针对临时节点,拥有该节点的事务ID。 |
SELECT *
FROM system.zookeeper
WHERE path = '/clickhouse/tables/01-08/visits/replicas'
FORMAT VerticalRow 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/replicassystem.replicas
该表包含本地服务所有复制表的信息和状态,可以用于监控。
| 参数 | 数据类型 | 描述 |
|---|---|---|
| database | String | 数据库名称。 |
| table | String | 表名。 |
| engine | String | 表引擎名称。 |
| is_leader | UInt8 | 副本是否是领导者。
一次只有一个副本可以成为领导者。 领导者负责选择要执行的后台合并。
重要 可以对任何可用且在Zookeeper中具有会话的副本执行写操作,不管该副本是否为leader。
|
| can_become_leader | UInt8 | 副本是否可以当选为领导者。 |
| is_readonly | UInt8 | 副本是否处于只读模式。
存在以下情形时,开启此配置:
|
| is_session_expired | UInt8 | 与ZooKeeper的会话已经过期。用法基本上与is_readonly相同。
|
| future_parts | UInt32 | 由于尚未完成的插入或合并而显示的数据部分的数量。 |
| parts_to_check | UInt32 | 队列中用于验证的part的数量。 如果怀疑part可能损坏了,则将其放入验证队列。 |
| zookeeper_path | String | 在ZooKeeper中的表数据路径。 |
| replica_name | String | ZooKeeper中的副本名称。同一表的不同副本具有不同的名称。 |
| replica_path | String | ZooKeeper中副本数据的路径。 与 zookeeper_path/replicas/replica_path下的内容相同。 |
| 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 | |
| merges_oldest_time | DateTime | |
| part_mutations_oldest_time | DateTime | |
| log_max_index | UInt64 | 一般活动日志中的最大条目数。
重要 存在与ZooKeeper的活动会话时才具有非零值。
|
| log_pointer | UInt64 | 副本复制到其执行队列的常规活动日志中的最大条目数,再加一。 如果log_pointer比log_max_index小,则说明有问题。
重要 存在与ZooKeeper的活动会话时才具有非零值。
|
| last_queue_update | DateTime | 上次更新队列的时间。
重要 存在与ZooKeeper的活动会话时才具有非零值。
|
| absolute_delay | UInt64 | 当前副本最大延迟时间。单位为秒。
重要 存在与ZooKeeper的活动会话时才具有非零值。
|
| total_replicas | UInt8 | 此表的已知副本总数。 |
| active_replicas | UInt8 | 在ZooKeeper中具有会话的此表的副本的数量(即正常运行的副本的数量)。 |
SELECT * FROM system.replicas WHERE table = 'visits' FORMAT VerticalRow 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_name | String | 存储策略的名称。 |
| volume_name | String | 存储策略中定义的卷的名称。 |
| volume_priority | UInt64 | 配置中定义的卷的优先级。 |
| disks | String | 存储策略中定义的磁盘名称。 |
| max_data_part_size | UInt64 | 可以存储在磁盘卷上的数据part的最大值。 |
| move_factor | Float64 | 可用磁盘空间的比率。当比率超过配置参数的值时,数据将会被移动到下一个卷。 |
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
该表包含了配置中定义的磁盘信息。
| 参数 | 数据类型 | 描述 |
|---|---|---|
| name | String | 配置的磁盘名称。 |
| path | String | 文件系统中挂载的磁盘路径。 |
| free_space | UInt64 | 磁盘上的可用空间(Bytes)。 |
| total_space | UInt64 | 磁盘的总空间(Bytes)。 |
| keep_free_space | UInt64 | 磁盘上需要保持空闲的空间。定义在磁盘配置的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 │
└────┴─────────────┴───────┴──────┴────────┴─────┘