clickhouse 内存不够

描述:插入表500+字段  50W数据可行!

100W数据报错

 

填坑:修改users.xml配置文件之

set max_bytes_before_external_group_by=20000000000; #20G
set max_memory_usage=40000000000; #40G
参数解析:默认情况下,ClickHouse会限制group by使用的内存量(它使用 hash table来处理group by)。
这很容易解决 - 如果你有空闲的内存,增加这个参数:
如果你没有那么多的内存可用,ClickHouse可以通过设置这个“溢出”数据到磁盘:
 

 

max_memory_usage详解:该设置不考虑可用内存量或机器上的总内存量。该限制适用于单个服务器中的单个查询,限制总users,

 

也就是说如果你内存够大,调整SET max_memory_usage这个参数。如果内存不够,

那么就加上这个参数set max_bytes_before_external_group_by

原因是聚合需要分两个阶段进行:1.查询并且建立中间数据 2.合并中间数据。 

数据“溢出”到磁盘一般发生在第一个阶段,如果没有发生数据“溢出”,ClickHouse在阶段1和阶段2可能需要相同数量的内存

 

 

据官方文档,如果需要使用max_bytes_before_external_group_by,

建议将max_memory_usage设置为max_bytes_before_external_group_by大小的两倍。

 

或者min_insert_block_size_rows=8192, min_insert_block_size_bytes (待测)
 

配置在users.xml里面的会被当作默认参数。当你的client没有指定这些参数的时候会使用默认参数

 

system库里面的表都不是复制表 直接set只会在当前server生效

问:所以每个若server节点多的话 每个都得set一下

回答:distribution查询的时候会传递的,最终这些set其实全部保存在client端。。随着每个query走的

 

 

理解:修改了一个server端,那么client查询会默认将参数传递

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值