背景
前面介紹了ClickHouse相關的系列文章,該系列文章包括了安裝、許可權管理、副本分片、配置說明等。這次介紹一些ClickHouse相關的系統命令,如過載配置檔案、關閉服務和程式、停止和啟動後臺任務等。具體的資訊可以看官方文件說明,順也說明下set和optimize的命令。
說明
SYSTEM命令
- RELOAD EMBEDDED DICTIONARIES
重新載入所有內建字典,預設是禁用的,總是返回 OK。
:) SYSTEM RELOAD EMBEDDED DICTIONARIES;
- RELOAD DICTIONARIES
過載已經被成功載入過的所有字典。預設情況下,字典是延時載入的( dictionaries_lazy_load),不是在服務啟動時自動載入,而是在第一次使用dictGet函式或通過SELECT from tables with ENGINE = Dictionary
進行訪問時被初始化。這個命令就是針對這類表進行重新載入的。
:) SYSTEM RELOAD DICTIONARIES;
- RELOAD DICTIONARY
重新載入指定字典 dictionary_name,不管該字典的狀態如何(LOADED/NOT_LOADED/FAILED),總是返回OK。字典的狀態可以通過查詢 system.dictionaries表來檢查。
:) SYSTEM RELOAD DICTIONARY Dictionary_name;
其中 Dictionary_name 的名字和狀態可以通過查詢
system.dictionaries
表來獲得。 -
RELOAD MODELS
如果在不重新啟動伺服器的情況下更新了配置,通過該命令重新載入所有 CatBoost 模型。:) SYSTEM RELOAD MODELS;
- RELOAD MODEL
如果在不重新啟動伺服器的情況下更新了配置,通過該命令重新載入 指定的CatBoost 模型模型名稱。
:) SYSTEM RELOAD MODEL <model_name>
- DROP DNS CACHE
重置dns快取。當Clickhouse伺服器的ip或字典所在伺服器的ip發生變化,需要使用該命令。
:) SYSTEM DROP DNS CACHE;
- DROP MARK CACHE
重置mark快取。在進行ClickHouse開發或效能測試時使用。
:) SYSTEM DROP MARK CACHE;
- DROP UNCOMPRESSED CACHE
重置未壓縮資料的快取。用於ClickHouse開發和效能測試。
:) SYSTEM DROP UNCOMPRESSED CACHE;
- DROP COMPILED EXPRESSION CACHE
重置已編譯的表示式快取。用於ClickHouse開發和效能測試。
:) SYSTEM DROP COMPILED EXPRESSION CACHE;
- DROP REPLICA
刪除已經無效的副本,不會刪除本地副本和表。
-- 刪除 database.table 表的replica_name副本的後設資料 :) SYSTEM DROP REPLICA 'replica_name' FROM TABLE database.table; -- 刪除 database 資料庫的所有replica_name副本的後設資料 :) SYSTEM DROP REPLICA 'replica_name' FROM DATABASE database; -- 刪除本地伺服器所有 replica_name 副本的後設資料 :) SYSTEM DROP REPLICA 'replica_name'; -- 用於在表的其它所有副本都刪除時,刪除已失效副本的後設資料。使用時需要明確指定表的路徑。該路徑必須和建立表時ReplicatedMergeTree引擎的第一個引數一致。 :) SYSTEM DROP REPLICA 'replica_name' FROM ZKPATH '/path/to/table/in/zk';
該操作將副本的路徑從ZooKeeper中刪除。當副本失效,並且由於該副本已經不存在導致它的後設資料不能通過
DROP TABLE
從zookeeper中刪除,這種情形下可以使用該命令。
它只會刪除失效或過期的副本,不會刪除本地的副本。請使用DROP TABLE
來刪除本地副本。DROP REPLICA
不會刪除任何表,並且不會刪除磁碟上的任何資料或後設資料資訊。 - FLUSH LOGS
將日誌資訊緩衝資料刷入系統表(system.query_log)。除錯時允許等待不超過7.5秒。當資訊佇列為空時,會建立系統表。
:) SYSTEM FLUSH LOGS;
- RELOAD CONFIG
重新載入ClickHouse的配置。用在當配置資訊存放在ZooKeeper的時候
:) SYSTEM RELOAD CONFIG;
- SHUTDOWN
關閉ClickHouse服務(類似於service clickhouse-server stop
/kill {$pid_clickhouse-server}
)。
:) SYSTEM SHUTDOWN;
- KILL
關閉ClickHouse程式 ( kill -9 {$ pid_clickhouse-server})。
:) SYSTEM KILL;
- STOP DISTRIBUTED SENDS
當向分散式表插入資料時,禁用後臺的分散式資料分發。
:) SYSTEM STOP DISTRIBUTED SENDS [db.]<distributed_table_name>
- FLUSH DISTRIBUTED
強制讓ClickHouse同步向叢集節點傳送資料。如果有節點失效,ClickHouse丟擲異常並停止插入操作。當所有節點都恢復上線時,你可以重試之前的操作直到成功執行。
:) SYSTEM FLUSH DISTRIBUTED [db.]<distributed_table_name>
- START DISTRIBUTED SENDS
當向分散式表插入資料時,允許後臺的分散式資料分發。
:) SYSTEM START DISTRIBUTED SENDS [db.]<distributed_table_name>
- STOP MERGES
為MergeTree系列引擎錶停止後臺合併操作。
:) SYSTEM STOP MERGES [[db.]merge_tree_family_table_name]
- START MERGES
為MergeTree系列引擎表啟動後臺合併操作。
:) SYSTEM START MERGES [[db.]merge_tree_family_table_name];
- STOP TTL MERGES
根據 TTL 表示式,為MergeTree系列引擎錶停止後臺刪除舊資料。不管表存在與否,都返回 OK。當資料庫不存在時返回錯誤。
:) SYSTEM STOP TTL MERGES [[db.]merge_tree_family_table_name]
- START TTL MERGES
根據 TTL 表示式,為MergeTree系列引擎表開啟後臺刪除舊資料。不管表存在與否,都返回 OK。當資料庫不存在時返回錯誤。
:) SYSTEM START TTL MERGES [[db.]merge_tree_family_table_name]
- STOP MOVES
根據 TTL 表示式為 MergeTree 系列中的表提供帶有 TO VOLUME 或 TO DISK 子句停止後臺移動資料。不管表存在與否,都返回OK.
。當資料庫不存在時返回錯誤。
:) SYSTEM STOP MOVES [[db.]merge_tree_family_table_name]
- START MOVES
根據 TTL 表示式為 MergeTree 系列中的表提供帶有 TO VOLUME 或 TO DISK 子句開啟後臺移動資料。不管表存在與否,都返回OK.
。當資料庫不存在時返回錯誤。
:) SYSTEM STOP MOVES [[db.]merge_tree_family_table_name]
- STOP FETCHES
停止後臺獲取ReplicatedMergeTree系列引擎表中插入的資料塊。不管表引擎型別如何或表/資料庫是否存,都返回 OK。
:) SYSTEM STOP FETCHES [[db.]replicated_merge_tree_family_table_name]
- START FETCHES
開啟後臺獲取ReplicatedMergeTree系列引擎表中插入的資料塊。不管表引擎型別如何或表/資料庫是否存,都返回 OK。
:) SYSTEM START FETCHES [[db.]replicated_merge_tree_family_table_name]
- STOP REPLICATED SENDS
停止通過後臺分發ReplicatedMergeTree系列引擎表中新插入的資料塊到叢集的其它副本節點。
:) SYSTEM STOP REPLICATED SENDS [[db.]replicated_merge_tree_family_table_name]
- START REPLICATED SENDS
開啟通過後臺分發ReplicatedMergeTree系列引擎表中新插入的資料塊到叢集的其它副本節點。
:) SYSTEM START REPLICATED SENDS [[db.]replicated_merge_tree_family_table_name]
- STOP REPLICATION QUEUES
停止從Zookeeper中獲取ReplicatedMergeTree系列表的複製佇列的後臺任務。可能的後臺任務型別包含:merges, fetches, mutation,帶有ON CLUSTER
的ddl語句。
:) SYSTEM STOP REPLICATION QUEUES [[db.]replicated_merge_tree_family_table_name]
- START REPLICATION QUEUES
開啟從Zookeeper中獲取ReplicatedMergeTree系列表的複製佇列的後臺任務。可能的後臺任務型別包含:merges, fetches, mutation,帶有ON CLUSTER
的ddl語句。
:) SYSTEM START REPLICATION QUEUES [[db.]replicated_merge_tree_family_table_name]
- SYNC REPLICA
等到ReplicatedMergeTree表和叢集中的其它副本進行同步之前會一直執行。如果當前對錶的獲取操作禁用的話,在達到receive_timeout
之前會一直執行。
:) SYSTEM SYNC REPLICA [db.]replicated_merge_tree_family_table_name
- RESTART REPLICA
重置ReplicatedMergeTree表的Zookeeper會話狀態。該操作會以Zookeeper為參照,對比當前狀態,有需要的情況下將任務新增到ZooKeeper佇列。基於ZooKeeper的日期初始化複製佇列,類似於 ATTACH TABLE語句。短時間內不能對錶進行任何操作。
:) SYSTEM RESTART REPLICA [db.]replicated_merge_tree_family_table_name
- RESTORE REPLICA
如果資料 [可能] 存在但 Zookeeper 後設資料丟失,則恢復副本,僅適用於只讀 ReplicatedMergeTree 表。適用於出現以下這些情況:
-- ZooKeeper 根路徑 / 丟失。 -- Replicas 路徑/副本丟失。 -- 單個replica路徑 /replicas/replica_name/ 丟失。
語法:
:) SYSTEM RESTORE REPLICA [db.]replicated_merge_tree_family_table_name [ON CLUSTER cluster_name] -- 或 :) SYSTEM RESTORE REPLICA [ON CLUSTER cluster_name] [db.]replicated_merge_tree_family_table_name
eg:
-- Creating table on multiple servers CREATE TABLE test(n UInt32) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/', '{replica}') ORDER BY n PARTITION BY n % 10; INSERT INTO test SELECT * FROM numbers(1000); -- zookeeper_delete_path("/clickhouse/tables/test", recursive=True) <- root loss. :) SYSTEM RESTART REPLICA test; -- Table will attach as readonly as metadata is missing. :) SYSTEM RESTORE REPLICA test; -- Need to execute on every replica, another way: RESTORE REPLICA test ON CLUSTER cluster
- RESTART REPLICAS
重置所有ReplicatedMergeTree表的ZooKeeper會話狀態。該操作會以Zookeeper為參照,對比當前狀態,有需要的情況下將任務新增到ZooKeeper佇列。
:) SYSTEM RESTART REPLICAS;
SET命令
- SET Statement:修改引數值
--設定引數 :) SET param = value --設定來自指定設定配置檔案的所有值 :) SET profile = 'profile-name-from-the-settings-file'
不能以這種方式更改server的設定
-
SET ROLE Statement:設定當前使用者的角色
SET ROLE {DEFAULT | NONE | role [,...] | ALL | ALL EXCEPT role [,...]}
- SET DEFAULT ROLE :為使用者設定預設角色
SET DEFAULT ROLE {NONE | role [,...] | ALL | ALL EXCEPT role [,...]} TO {user|CURRENT_USER} [,...]
預設角色在使用者登入時自動啟用。 您只能將先前授予的角色設定為預設值。 如果該角色未授予使用者,ClickHouse 將引發異常。
eg:-- 為一個使用者設定多個預設角色 :) SET DEFAULT ROLE role1, role2, ... TO user -- 將所有的角色設定為使用者的預設值 :) SET DEFAULT ROLE ALL TO user -- 清除使用者的預設角色 :) SET DEFAULT ROLE NONE TO user -- 將所有的角色設定為預設角色,其中一些角色除外 :) SET DEFAULT ROLE ALL EXCEPT role1, role2 TO user
OPTIMIZE 命令:執行合併分割槽的操作
- OPTIMIZE Statement:僅支援MergeTree 系列、MaterializedView 和 Buffer 引擎。
:) OPTIMIZE TABLE [db.]name [ON CLUSTER cluster] [PARTITION partition | PARTITION ID 'partition_id'] [FINAL] [DEDUPLICATE [BY expression]]
當 OPTIMIZE 與 ReplicatedMergeTree 系列表引擎一起使用時,ClickHouse 會建立一個合併任務並等待在所有節點上執行(啟用replication_alter_partitions_sync)。
如果 OPTIMIZE 由於任何原因未執行合併,則不會通知客戶端。 要啟用通知,請使用 optimize_throw_if_noop 設定。
如果指定 PARTITION,則僅優化指定的分割槽。
如果指定 FINAL,即使所有資料都已在一個分割槽中,也會執行優化,強制合併。
如果指定 DEDUPLICATE,則完全相同的行(除非指定了 by-clause)將被刪除重複(所有列都被比較),這僅對 MergeTree 引擎有意義。 -
BY 表示式
如果要對重複資料刪除,可以明確指定列或使用 *、COLUMNS 或 EXCEPT 表示式的任意組合。OPTIMIZE TABLE table DEDUPLICATE; -- 所有列 OPTIMIZE TABLE table DEDUPLICATE BY *; -- 除 MATERIALIZED 和 ALIAS 列外 OPTIMIZE TABLE table DEDUPLICATE BY colX,colY,colZ; -- 指定列 OPTIMIZE TABLE table DEDUPLICATE BY * EXCEPT colX; OPTIMIZE TABLE table DEDUPLICATE BY * EXCEPT (colX, colY); OPTIMIZE TABLE table DEDUPLICATE BY COLUMNS('column-matched-by-regex'); OPTIMIZE TABLE table DEDUPLICATE BY COLUMNS('column-matched-by-regex') EXCEPT colX; OPTIMIZE TABLE table DEDUPLICATE BY COLUMNS('column-matched-by-regex') EXCEPT (colX, colY);
可以看官方的例子說明。
參考文章: