ClickHouse學習系列之七【系統命令介紹】


背景

   前面介紹了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);

      可以看官方的例子說明。

 

參考文章:

系統命令介紹

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM