zoukankan      html  css  js  c++  java
  • 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);

        可以看官方的例子说明。

    参考文章:

    系统命令介绍

    ~~~~~~~~~~~~~~~ 万物之中,希望至美 ~~~~~~~~~~~~~~~
  • 相关阅读:
    酒店预定系统
    毕业论文管理系统 ——总体设计
    毕业论文管理系统
    毕业管理系统——面向对象方法 项目前期
    项目前期
    5/23用户故事和backlog
    5/18
    4.8
    4.3
    第四章 需求分析
  • 原文地址:https://www.cnblogs.com/zhoujinyi/p/14963278.html
Copyright © 2011-2022 走看看