【配置优化】Clickhouse配置参数优化

Clickhouse配置参数优化

以下是个人在工作上集合官网参数列表进行参数优化调整。

一、MergeTree引擎相关的参数

  • parts_to_delay_insert

如果单个分区中的活动部分数量超过 parts_to_delay_insert 值,则人工放慢 INSERT 操作。

注意:ClickHouse 会人为延长 INSERT 操作(增加 ‘sleep’),以便后台合并进程可以比添加的速度更快地合并部分。

  • parts_to_throw_insert

如果单个分区中的活动部分数量超过 parts_to_throw_insert 值,则 INSERT 被打断,并抛出 Too many parts (N). Merges are processing significantly slower than inserts 异常。

注意:在 23.6 版本之前,此设置被设置为 300。您可以设置更高的不同值,它会减少出现 Too many parts 错误的概率,但同时 SELECT 性能可能会降低。

  • max_delay_to_insert

在计算 INSERT 延迟时使用的值(单位为秒),如果单个分区中活动部分的数量超过 parts_to_delay_insert 值。

  • max_suspicious_broken_parts

如果单个分区中的损坏部分数量超过 max_suspicious_broken_parts 值,则拒绝自动删除。

  • merge_max_block_size

从合并的部分读取到内存中的行数。

注意:合并从部分中以 merge_max_block_size 行的块读取行,然后合并并将结果写入新部分。读取的块存放在 RAM 中,因而 merge_max_block_size 会影响合并所需 RAM 的大小。因此,对于非常宽的行的表,合并可能会消耗大量 RAM(如果平均行大小为 100kb,则在合并 10 个部分时,(100kb * 10 * 8192) = ~ 8GB 的 RAM)。通过减少 merge_max_block_size,可以减少合并所需的 RAM,但会降低合并速度。

具体配置示例: /etc/clickhouse-server/config.xml

    <merge_tree>
        <max_suspicious_broken_parts>5</max_suspicious_broken_parts>
        <parts_to_delay_insert>600</parts_to_delay_insert>
        <parts_to_throw_insert>500</parts_to_throw_insert>
        <max_delay_to_insert>2</max_delay_to_insert>
        <merge_max_block_size>8192</merge_max_block_size>
    </merge_tree>

注意:生产环境建议轮询重启Clickhouse-server服务

二、通用配置优化

  • max_concurrent_queries

默认值:100

限制同时执行查询的总数量。请注意,还必须考虑对 INSERTSELECT 查询的限制,以及用户的最大查询数量。

注意:此设置可以在运行时修改,并将立即生效。已经在运行的查询将保持不变。值为 0(默认值)表示无限制。

  • max_connections

默认值:4096

最大服务器连接数。

  • background_pool_size

默认值:16

设置执行 MergeTree 引擎表的后台合并和变更的线程数。默认是16,可以根据CPU核数来确定

备注:

  1. 此设置也可以在服务器启动时从 default 配置文件配置,以保持与 ClickHouse 服务器启动时的向后兼容性。

  2. 您只能在运行时增加线程数。

  3. 要降低线程数,您必须重新启动服务器。

  4. 通过调整此设置,您可以管理 CPU 和磁盘负载。

  • background_schedule_pool_size

默认值:512

用于持续执行复制表、Kafka 流和 DNS 缓存更新的一些轻量级定期操作的最大线程数。

  • async_insert_threads

默认值:16

解析和插入数据的最大线程数。零表示禁用异步模式

  • background_buffer_flush_schedule_pool_size

默认值:16

用于后台执行 Buffer-engine tables刷新操作的最大线程数。

  • background_common_pool_size

默认值:8

用于后台执行各种操作(主要是垃圾收集)的 *MergeTree-engine表的最大线程数。

  • background_distributed_schedule_pool_size

默认值:16

用于执行分布式发送的最大线程数。

  • background_fetches_pool_size

默认值:16

从另一个副本中获取数据片段的最大线程数,用于后台中的 *MergeTree-engine 表。

  • background_message_broker_schedule_pool_size

默认值:16

用于执行消息流的后台操作的最大线程数。

  • background_move_pool_size

默认值:8

用于后台中将数据片段移动到另一个磁盘或卷的最大线程数,用于 *MergeTree-engine 表。

  • database_catalog_drop_table_concurrency

默认值:16

用于删除表的线程池的大小。

  • keep_alive_timeout

ClickHouse 等待 HTTP 协议的传入请求的秒数,然后关闭连接。

  • listen_host

请求可以来自的主机的限制。

  • max_partition_size_to_drop

默认值:50GB左右,如果解除限制设置为0

删除分区限制。

注意:如果 MergeTree 表的大小超过 max_partition_size_to_drop (以字节为单位),则无法通过 DROP PARTITION 查询删除分区。 此设置不需要重新启动 ClickHouse 服务器即可应用。

  • max_table_size_to_drop

删除表的查询时间限制。值为 0 的意思是您可以删除所有表而没有任何限制。

  • max_partitions_per_insert_block

默认值:100 零表示没有限制

限制单个插入块中最大分区数量,如果块包含过多分区,则抛出异常。

注意:在插入数据时,ClickHouse 会计算插入块中的分区数。如果分区数量超过 max_partitions_per_insert_block,则会抛出异常

  • max_threads

查询处理线程的最大数量。该参数适用于并行进行查询处理管道相同阶段的线程。 例如,在从表中读取时,如果可能同时评估包含函数的表达、筛选 WHERE 以及对 GROUP BY 进行预聚合,使用至少 ‘max_threads’ 数量的线程,则会使用 ‘max_threads’。

注意:max_threads越小,查询消耗的内存就越少。

  • max_memory_usage

在单台服务器上执行查询时可使用的最大 RAM 量。 0 的值表示无限制。


具体配置示例: /etc/clickhouse-server/config.xml

<clickhouse>
    <max_concurrent_queries>300</max_concurrent_queries>
    <max_connections>4096</max_connections>
    <background_pool_size>32</background_pool_size>
    <background_schedule_pool_size>512</background_schedule_pool_size>
    <async_insert_threads>32</async_insert_threads>
    <background_buffer_flush_schedule_pool_size>32</background_buffer_flush_schedule_pool_size>
    <background_common_pool_size>32</background_common_pool_size>
    <background_distributed_schedule_pool_size>32</background_distributed_schedule_pool_size>
    <background_fetches_pool_size>32</background_fetches_pool_size>
    <background_message_broker_schedule_pool_size>32</background_message_broker_schedule_pool_size>
    <background_move_pool_size>16</background_move_pool_size>
    <database_catalog_drop_table_concurrency>32</database_catalog_drop_table_concurrency>
    <keep_alive_timeout>60</keep_alive_timeout>
    <listen_host>0.0.0.0</listen_host>
    <max_partition_size_to_drop>0</max_partition_size_to_drop>
    <max_table_size_to_drop>0</max_table_size_to_drop>
    <max_partitions_per_insert_block>1000</max_partitions_per_insert_block>
    <max_threads>32</max_threads>
    <max_memory_usage>5368709120</max_memory_usage>
</clickhouse>

三、分布式表相关配置

  • distributed_ddl

管理在集群上执行 distributed ddl 查询(CREATE、DROP、ALTER、RENAME)。 仅在启用 ZooKeeper 时有效。

​ <distributed_ddl> 中的可配置设置包括:

设置描述默认值
pathkeeper中用于DDL查询的task_queue路径
profile用于执行ddl查询的配置文件
pool_size可以同时运行多少个on cluster查询
max_tasks_in_queue队列可以存在的最大任务数1000
task_max_lifetime如果节点的年龄超过此值则删除节点。一周(单位:秒)
cleanup_delay_period如果最后一次清理在 cleanup_delay_period 秒之前未进行,则在接收到新节点事件后开始清理。60s

具体配置示例: /etc/clickhouse-server/config.xml

<distributed_ddl>
    <!-- Path in ZooKeeper to queue with DDL queries -->
    <path>/clickhouse/task_queue/ddl</path>
    <profile>default</profile>
    <pool_size>1</pool_size>
    <task_max_lifetime>604800</task_max_lifetime>
    <cleanup_delay_period>60</cleanup_delay_period>
    <!-- Controls how many tasks could be in the queue -->
    <max_tasks_in_queue>1000</max_tasks_in_queue>
</distributed_ddl>
  • [zoo]keeper配置相关

该配置用于连接[zoo]keeper进行元数据管理

具体配置示例: /etc/clickhouse-server/config.xml

<zookeeper>
        <node>
            <host>example1</host>
            <port>2181</port>
        </node>
        <node>
            <host>example2</host>
            <port>2181</port>
        </node>
        <node>
            <host>example3</host>
            <port>2181</port>
        </node>
    </zookeeper>

后续参数有优化将持续更新。

### 关于 ClickHouse 参数优化的方法和建议 #### 修改配置文件以适应业务需求 为了使 ClickHouse 更好地服务于特定的应用场景,在使用前应当调整其配置文件中的某些默认设置,例如数据存储路径、集群信息以及用户权限等。这些更改有助于更精细地管理和控制 ClickHouse 的运行环境,从而提高效率并确保安全性[^1]。 #### 性能调优应用场景 ClickHouse 的性能调优适用于多种具体的数据处理任务: - **实时数据分析**:针对大规模动态更新的数据集提供即时查询响应; - **日志分析**:高效解析各类记录型数据源,如服务器活动跟踪或应用程序事件流; - **时间序列数据分析**:特别适合连续采集的时间戳关联数值集合,像传感器网络监测或是金融市场行情变化监控; 对于上述每种情况而言,合理的参数设定能够显著提升系统的整体表现力[^2]。 #### 使用跳数索引加速查询过程 当 WHERE 子句内含有涉及列的操作函数时,如果此列为已建立好的索引部分,则 ClickHouse 将尽可能利用现有索引来加快检索速度。然而需要注意的是,并不是所有的内置函数都兼容这种机制——只有被官方支持的那一组有限数量的函数才允许如此操作。因此了解哪些类型的表达式可以在不破坏索引效能的前提下应用于过滤条件是非常重要的[^3]。 #### 设定冷备份策略保障数据安全 考虑到一些特殊行业的要求(如金融领域),可能需要长时间保存历史资料而不频繁访问它们。此时可考虑构建专门用于此类目的“冷备”集群来存放这类低活跃度的信息副本。尽管这样做会增加额外的成本开销,但由于采用了高压缩率技术使得实际占用空间大幅减少,同时也能有效降低因意外丢失重要档案所带来的风险[^4]。 ```sql -- 示例 SQL 查询语句展示如何创建带有主键索引表结构 CREATE TABLE example_table ( id UInt64, timestamp DateTime, value Float64, INDEX idx_timestamp (timestamp) TYPE minmax GRANULARITY 1 ) ENGINE = MergeTree() ORDER BY id; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值