系統表存儲于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

該表包含了已執行查詢的相關信息。例如,開始時間、處理持續時間和錯誤消息。

system.query_log表中記錄了兩種查詢:
  • 客戶端直接運行的初始查詢。
  • 由其它查詢啟動的子查詢(用于分布式查詢執行)。 對于這些類型的查詢,有關父查詢的信息顯示在initial_*列。
根據查詢的狀態(請參見type列),每個查詢在查詢日志表中創建一行或兩行記錄:
  • 如果查詢執行成功,則會創建typeQueryStartQueryFinish的兩行記錄信息。
  • 如果在查詢處理期間發生錯誤,則會創建typeQueryStartExceptionWhileProcessing的兩行記錄信息。
  • 如果在啟動查詢之前發生錯誤,則會創建typeExceptionBeforeStart的一行記錄信息。
參數 數據類型 描述
type Enum8 執行查詢時的事件類型。取值如下:
  • 'QueryStart' = 1:查詢成功啟動。
  • 'QueryFinish' = 2:查詢成功完成。
  • 'ExceptionBeforeStart' = 3:查詢執行前有異常。
  • 'ExceptionWhileProcessing' = 4 :查詢執行期間有異常。
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 查詢類型。取值如下:
  • 0:由另一個查詢發起的,作為分布式查詢的一部分。
  • 1:客戶端發起的查詢。
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 發起查詢的接口。取值如下:
  • 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客戶端的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方法。取值如下:
  • 0:TCP接口的查詢
  • 1:GET
  • 2:POST
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 副本是否處于只讀模式。
存在以下情形時,開啟此配置:
  • 配置中缺省了zookeeper的部分。
  • 在zookeeper重新加載會話時發生未知錯誤。
  • 在會話期間重新初始化了zookeeper。
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 │
└────┴─────────────┴───────┴──────┴────────┴─────┘