楔子
我們知道 ClickHouse 自帶兩個庫,分別是 default 和 system,default 是默認的數據庫,我們創建表的時候如果不指定庫名,那么默認會在 default 下創建。而 system 則是系統庫,里面存放了大量與系統相關的表,通過這些系統表我們可以查看服務器的所有狀態信息。
use system;
show tables;

總共有 69 個系統表,通過這些系統表,我們可以牢牢把控 ClickHouse 服務端的運行狀態。下面來看看就來挑幾個介紹一下。
system.asynchronous_metrics
ClickHouse 在后台會定期對一些指標進行計算,得到內存的使用量,該表負責存儲相關指標以及對應的值。
字段:
metric:指標名,String 類型value:指標值,Float64 類型

system.asynchronous_metric_log
和 system.asynchronous_metric 作用相同,但是多了一些時間字段。
字段:
event_date:日期,Date 類型event_time:時間,DateTime 類型event_time_microseconds:帶毫秒的時間,DateTime64 類型name:指標名,String 類型value:指標值,Float64 類型

system.clusters
老熟人了這個,負責存儲配置文件中的可用集群信息。
字段:
cluster:集群名稱,String 類型shard_num:集群中的第幾個分片,從 1 開始,UInt32 類型shard_weight:分片的權重,UInt32 類型replica_num:一個分片中的第幾個副本,從 1 開始,UInt32 類型host_name:副本所在節點的主機名,String 類型host_address:副本所在節點的 IP 地址,String 類型port:副本所在節點的端口,UInt16 類型is_local:是否為本地節點(和當前執行 SELECT ... FROM syst.clusters 的節點是否是同一個節點),UInt8 類型user:連接至服務端的用戶,String 類型default_database:默認數據庫,String 類型errors_count:該節點連接副本失敗的次數,UInt32 類型slowdowns_count:當使用對沖請求建立連接時,導致更改副本變慢的次數,UInt32 類型estimated_recovery_time:距離副本錯誤歸零並被認為恢復正常還剩多少秒,UInt32 類型
system.columns
非常常用的一張表,負責存儲表的字段信息。
字段:
database:數據庫名,String 類型table:表名,String 類型name:字段名,String 類型type:字段的類型,String 類型position:字段在表中位於第幾列,UInt64 類型default_kind:默認值表達式類型,如 DEFAULT、MATERIALIZED、ALIAS,如果沒有定義則為空字符串,String 類型default_expression:默認值表達式的值,如果沒有定義則為空字符串,String 類型data_compressed_bytes:該列數據在壓縮之后的大小(字節),UInt64 類型data_uncompressed_bytes:該列數據未壓縮時的大小(字節),UInt64 類型marks_bytes:標記的大小(字節),UInt64 類型comment:字段的注釋,String 類型is_in_partition_key:該列是否在分區表達式中,UInt8 類型is_in_sorting_key:該列是否在排序鍵表達式中,UInt8 類型is_in_primary_key:該列是否在主鍵表達式中,UInt8 類型is_in_sampling_key:該列是否在 sampling key 表達式中,UInt8 類型compression_codec:壓縮器的名稱,String 類型

system.crash_log
負責記錄發生致命錯誤時的堆棧跟蹤信息,默認情況下 system 庫中不存在該表,只有在發生致命錯誤時該表才會創建。
字段:
event_date:錯誤發生日期,Date 類型event_time:錯誤發生時間,DateTime 類型timestamp_ns:錯誤發生時的時間戳,UInt64 類型signal:信號值,Int32 類型thread_id:錯誤發生時的線程 ID,UInt64 類型query_id:錯誤發生時的查詢 ID,也就是執行哪個查詢發生了致命錯誤,String 類型trace:崩潰時的堆棧跟蹤,每個元素都是 ClickHouse 服務進程中的虛擬內存地址,Array(UInt64) 類型trace_full:崩潰時的堆棧跟蹤,每個元素在 ClickHouse 服務進程中都包含一個被調用的方法,Array(String) 類型version:ClickHouse 服務器版本,String 類型reversion:ClickHouse 服務器版本,UInt32 類型build_id:編譯器生成的 BuildID,String 類型

system.data_skipping_indices
負責記錄所有表中已存在的跳數索引(二級索引)
字段:
database:數據庫名,String 類型table:表名,String 類型name:索引名,String 類型type:索引類型,String 類型expr:索引計算的表達式,String 類型granularity:索引粒度,UInt64 類型
system.databases
負責記錄已存在的數據庫的信息(當然用戶可以看到的數據庫)
字段:
name:數據庫名稱,String 類型engine:定義數據庫時所使用的引擎,String 類型data_path:該數據庫下數據表的物理存儲路徑,String 類型metadata_path:數據表的元數據的存儲路徑,String 類型uuid:數據庫對應的 UUID,每個數據庫在創建的時候都會有一個 UUID,UUID 類型

system.disks
負責記錄配置文件中定義的磁盤信息
字段:
name:磁盤名稱,String 類型path:在物理文件系統中的掛載點,String 類型free_space:磁盤的可用空間,UInt64 類型total_space:磁盤的可用空間,UInt64 類型keep_free_space:磁盤應保留的空閑可用空間,通過 keep_free_space_bytes 標簽定義,UInt64 類型

system.distributed_ddl_queue
負責記錄執行過的分布式 DDL 查詢
字段:
entry:query id,String 類型host_name:執行分布式 DDL 查詢的節點的主機名,String 類型host_address:執行分布式 DDL 查詢的節點的 IP 地址,String 類型port:執行分布式 DDL 查詢的節點監聽的端口,UInt16 類型status:查詢的執行狀態,Enum8 類型cluster:集群名稱,String 類型query:執行的 query,String 類型initiator:執行查詢的節點,String 類型query_start_time:查詢開始時間,DateTime 類型query_finish_time:查詢結束時間,DateTime 類型query_duration_ms:查詢執行所花費的時間(毫秒),UInt64 類型exception_code:來自 ZooKeeper 的異常碼,Enum8 類型

system.tables
負責記錄已存在的所有表的元數據信息
字段:
database:數據庫名,String 類型name:表名,String 類型uuid:創建表時生成的 UUID,UUID 類型engine:表使用的引擎,String 類型is_temporary:是否是臨時表,UInt8 類型data_paths:表數據在文件系統中的物理路徑,string 類型metadata_path:表元數據在文件系統中的物理路徑,String 類型metadata_modification_time:表元數據最近一次的修改時間,DateTime 類型dependencies_database:數據庫依賴關系,Array(String) 類型dependencies_table:表依賴關系,針對物化視圖,Array(String) 類型create_table_query:創建該表時的 SQL 語句,String 類型engine_full:表引擎的參數,String 類型partition_key:分區鍵表達式,String 類型sorting_key:排序鍵表達式,String 類型primary_key:主鍵表達式,String 類型sampling_key:sampling key 表達式,String 類型storage_policy:存儲策略,String 類型total_rows:數據表的總行數,Nullable(UInt64)total_bytes:數據表的總大小。如果表存儲在磁盤上,返回使用磁盤空間(壓縮之后的);如果表存儲在內存中,返回使用的內存大小,單位字節,Nullable(UInt64) 類型lifetime_rows:自服務啟動以來,插入的數據的總行數,僅適用於 Buffer 表,Nullable(UInt64) 類型lifetime_bytes:自服務啟動以來,插入的數據所占的總字節數,僅適用於 Buffer 表,Nullable(UInt64) 類型comment:表注釋
我們使用 show tables 等價於 SELECT * FROM system.tables WHERE database = 'xxx'。
小結
以上我們就介紹了一些系統表,當然 ClickHouse 中的系統表遠不止我們說的這些,更多內容可以前往官網查看,寫的還是比較詳細的。當然我們后面在說 ClickHouse 權限管理的時候,還會再介紹幾個系統表。
