clickhouse 参数优化配置
max_memory_usage_for_user,max_memory_usage,max_bytes_before_external_group_by,max_bytes_before_external_sort,max_memory_usage_for_all_queries,max_concurrent_queries_for_user,max_concurrent_queries_for
文章目录
clickhouse 参数优化配置
配置文件/etc/clickhouse-server/config.xml
max_server_memory_usage
服务器进程的最大内存使用量,限制服务器的总内存使用
- 零值或未设置表示默认值。
- 默认为:
memory_amount(内存总量)
*max_server_memory_usage_to_ram_ratio(占比分数值)
max_server_memory_usage_to_ram_ratio
用来计算 max_server_memory_usage
的值。
- 定义 ClickHouse 服务器可用的总物理 RAM 量的比例。如果服务器尝试使用更多内存,则会将内存减少到适当的数量
- 默认值0,代表 ClickHouse 服务器可以使用所有可用的 RAM
- 在 RAM 和交换空间较低的主机上,您可能需要设置
max_server_memory_usage_to_ram_ratio
大于 1。
配置文件/etc/clickhouse-server/users.xml
max_memory_usage_for_user
用于在单个服务器上运行用户查询的最大 RAM 量。
- 默认0,不限制
max_memory_usage
用于在单个服务器上运行查询的最大 RAM 量。
- 默认值10G
- 该设置不考虑可用内存量或机器上的总内存量。该限制适用于单个服务器中的单个查询
max_bytes_before_external_group_by
启用或禁用GROUP BY
外部存储器(磁盘)中子句的执行
- 默认0,
GROUP BY
在外部存储器中禁用。 - 单个
GROUP BY
操作可以使用的最大 RAM 容量(以字节为单位) - 建议设置
max_memory_usage
为max_bytes_before_external_group_by
两倍的内存。这是必要的,因为聚合有两个阶段:读取数据并形成中间数据(1)和合并中间数据(2)。只能在第 1 阶段将数据转储到文件系统。如果未转储临时数据,则第 2 阶段可能需要与第 1 阶段相同的内存量。 - 通过分布式查询处理,在远程服务器上执行外部聚合。为了让请求者服务器只使用少量 RAM,设置
distributed_aggregation_memory_efficient
为 1。 - 合并刷新到磁盘的数据时,以及在
distributed_aggregation_memory_efficient
启用该设置时合并来自远程服务器的结果时,最多消耗1/256 * the_number_of_threads
RAM 总量。 - 启用外部聚合时,如果数据少于
max_bytes_before_external_group_by
(即数据未刷新),则查询运行速度与没有外部聚合时一样快。如果刷新了任何临时数据,则运行时间将延长几倍(大约三倍)。 - 外部存储器中的 GROUP BY
max_bytes_before_external_sort
- 默认0,
ORDER BY
在外部存储器中禁用。 - 当要排序的数据量达到指定的字节数时,将对收集的数据进行排序并转储到临时文件中。 读取所有数据后,将合并所有已排序的文件并输出结果。 文件被写入到
/var/lib/clickhouse/tmp/
目录中的配置(默认情况下,但你可以使用 tmp_path 参数来更改此设置)。 - 外部排序的工作效率远远低于在RAM中进行排序。
distributed_aggregation_memory_efficient
是否启用分布式聚合的内存节省模式。
- 默认1 ,启用
其他优化参数
insert_deduplicate
数据复制表引擎中 数据块被重复数据删除。对于同一数据块的多次写入(相同大小的数据块包含相同顺序的相同行),该块只被写入一次。这样做的原因是当客户端应用程序不知道数据是否已写入数据库时发生网络故障,因此可以简单地重复 INSERT 查询。将相同数据发送到哪个副本 INSERT 并不重要。INSERT 是幂等的。重复数据删除参数由 merge_tree 服务器设置控制。 insert_deduplicate
对于复制表中的 INSERT 查询,指定应执行插入块的重复数据删除。 默认是启用去重,日志会出现Block with ID xx already exists locally as part xx ; ignoring it
max_insert_threads
执行INSERT SELECT查询的最大线程数。 值为0或1表示INSERT SELECT不是并行运行的。 更高的值将导致更高的内存使用。 只有当SELECT部分是并行运行时,并行INSERT SELECT才有效,请参阅’max_threads’设置。
parallel_distributed_insert_select
在同一个集群中,在每个shard的本地表上处理分布式的INSERT SELECT查询; 如果设置为1 -在每个shard上执行SELECT; 如果设置为2,则在每个shard上执行SELECT和INSERT
insert_distributed_sync
默认情况下,向Distributed
表中插入数据时,ClickHouse 服务器以异步方式向集群节点发送数据。当 时insert_distributed_sync=1
,数据是同步处理的,只有在所有分片上保存所有数据(如果为真INSERT
,每个分片至少有一个副本),操作成功。
async_insert_threads
在后台实际解析和插入数据的最大线程数。0表示禁用异步模式
async_insert
如果为true, INSERT查询中的数据将存储在队列中,然后在后台刷新到表中。只有通过HTTP协议插入才有意义。如果wait_for_async_insert为false,则INSERT查询几乎立即被处理,否则客户端将等待数据刷新到表中
wait_for_async_insert
如果为真,则等待异步插入处理
查看参数的默认值和含义
show settings ilike '%distributed_aggregation_memory_efficient%';
select * from `system`.settings s where name in(
'max_memory_usage_for_user',
'max_memory_usage',
'max_bytes_before_external_group_by',
'max_bytes_before_external_sort',
'max_memory_usage_for_all_queries',
'max_concurrent_queries_for_user',
'max_concurrent_queries_for_all_users',
'max_concurrent_queries',
'max_server_memory_usage',
'max_server_memory_usage_to_ram_ratio',
'max_thread_pool_size',
'distributed_aggregation_memory_efficient'
);
更多推荐
所有评论(0)