系統表存儲于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: 0
system.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 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
該表包含本地服務所有復制表的信息和狀態,可以用于監控。
參數 | 數據類型 | 描述 |
---|---|---|
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 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_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 │
└────┴─────────────┴───────┴──────┴────────┴─────┘