本文内容来源:公众号ID-ClickHome
作者:禹鼎侯 (擎创科技资深开发工程师)
原文翻译自:https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-aggressive_merges/
前言
大家在使用clickhouse的过程中,往往会发现一个奇怪的现象:明明机器性能很强,如36core,1TB内存,但是merge的时候资源却并不能充分利用。原因如下↓
大多数情况下,要想使资源充分利用上,需要改变并行度来进行实现。
这里提供几个有效的配置,用来增加merge的并行度,提高merge的效率:
1background_pool_size
实际进行合并的线程。如果不进行查询,那么可以将所有核数都用来合并,比如将该参数设置为36,那么最大可以有36个线程将用来合并。
如果是副本模式的集群,那么所有的节点都需要相同的配置,并确保max_replicated_merges_in_queue的值相同。
2background_merges_mutations_concurrency_ratio
每个线程分配多少个任务用于合并,默认是2。该参数的设置需要根据实际场景进行设置,如果小合并比较多,那么意味着一次合并并不能吃满一个CPU,那么此时一个线程分配两个合并任务,将有助于加速小part的merge,最典型的比如实时插入的场景。
如果每次插入的batch比较大,单个part比较大,那么意味着单次合并有可能将整个CPU跑满,此时如果还给单个线程分配2个合并任务,那么反而会拖累合并性能,此种场景建议值是1。
最终的合并任务个数 = background_pool_size * background_merges_mutations_concurrency_ratio。
您可以通过 SELECT metric, value FROM system.metrics WHERE metic LIKE '?ckground%'进行查看。
3number_of_free_entries_in_pool_to_lower_max_size_of_merge
该配置属于merge_tree的设置。应该与background_pool_size一起更改。
当用于合并的线程任务池空闲的个数小于该值时,对比较大的part的合并暂时忽略不处理,这样做的目的是防止大part合并将线程池占满,无剩余资源用于小part合并,最终导致小part越积越多,出现"Too many parts(N)"错误。
要想充分发挥其威力,起到真正加速merge的作用,可以将该值设置为线程池的90%~95%。
此外,你可以设置下面这些参数配合使用:
合并后多大的part可以称之为一个大part(由参数max_bytes_to_merge_at_max_space_in_pool控制,默认150G)。
以上只是一些理论层面的建议,对于这些配置的优化,所有的调整和性能优化都应通过一些可重现的 "基准 "来控制,这样你就能确保这些优化是否真的如我们所期望的那样。毕竟生产环境千变万化,有些优化并不一定绝对有效。同时还要监控系统资源,包括CPU,内存,IO以及zookeeper的使用情况,以及merge线程池的使用情况。
select * from system.metrics where metric like '%PoolTask'
以上这些建议并不是无脑通用的。对于有些同时要求实时插入和大查询压力的系统,这些优化可能就会显得过于激进,因为上述调整其实是牺牲了查询性能的。因此,不同的设置模板适用于不同的集群场景,不能一概而论。
以下是一个优化设置模板,仅供参考:
cat /etc/clickhouse-server/config.d/aggresive_merges.xml
<clickhouse>
<background_pool_size>36</background_pool_size>
<background_schedule_pool_size>128</background_schedule_pool_size>
<background_common_pool_size>8</background_common_pool_size>
<background_merges_mutations_concurrency_ratio>1</background_merges_mutations_concurrency_ratio>
<merge_tree>
<number_of_free_entries_in_pool_to_lower_max_size_of_merge>32</number_of_free_entries_in_pool_to_lower_max_size_of_merge>
<max_replicated_merges_in_queue>36</max_replicated_merges_in_queue>
<max_bytes_to_merge_at_max_space_in_pool>161061273600</max_bytes_to_merge_at_max_space_in_pool>
<min_merge_bytes_to_use_direct_io>10737418240</min_merge_bytes_to_use_direct_io> <!-- 0 to disable -->
</merge_tree>
</clickhouse>
cat /etc/clickhouse-server/users.d/aggresive_merges.xml
<clickhouse> <!-- on 22.8 that should be adjusted in both places - default profile and main config -->
<profiles>
<default>
<background_pool_size>36</background_pool_size>
<background_schedule_pool_size>128</background_schedule_pool_size>
<background_common_pool_size>8</background_common_pool_size>
<background_merges_mutations_concurrency_ratio>1</background_merges_mutations_concurrency_ratio>
</default>
</profiles>
</clickhouse>
擎创科技,Gartner连续推荐的AIOps领域标杆供应商。公司专注于通过提升企业客户对运维数据的洞见能力,为运维降本增效,充分体现科技运维对业务运营的影响力。
擎创科技,Gartner连续推荐的AIOps领域标杆供应商。公司专注于通过提升企业客户对运维数据的洞见能力,为运维降本增效,充分体现科技运维对业务运营的影响力。
行业龙头客户的共同选择
了解更多运维干货与行业前沿动态
可以右上角一键关注
我们是深耕智能运维领域近十年的
连续多年获Gartner推荐的AIOps标杆供应商
下期我们不见不散~
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved