给ClickHouse增加内存

背景

在执行一个较为复杂的SQL聚合的时候,报错了:
【报错】
DB::Exception: Allocator: Cannot mmap 64.00 MiB., errno: 12, strerror: Cannot allocate memory.

image.png

可见是内存不够了(CK虽然是分布式存储但是集中计算)
一个办法是修改SQL,比如说用临时表之类的,但是那多麻烦啊。我决定先用swap内存试试。

用swapfile配置交换空间

  • 准备
    sudo swapon --show:可以看到当前的交换空间(没显示就代表没有)
    free -h:可以看见当前的内存使用情况

  • 创建swapfile文件
    sudo dd if=/dev/zero of=/swapfile count=4096 bs=1MiB

[root@ch100 ~]# sudo dd if=/dev/zero of=/swapfile count=8192 bs=1MiB
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB) copied, 143.337 s, 59.9 MB/s
  • 继续
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
[root@ch100 ~]# sudo swapon /swapfile
[root@ch100 ~]# sudo swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file   8G   0B   -2
  • 最后加入fstab(备份一下免得出错)
    sudo cp /etc/fstab /etc/fstab.bak
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

  • 然后用free看效果:

[root@ch100 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        993M        2.6G        5.5M        142M        2.5G
Swap:          8.0G        474M        7.5G

我是跑完了SQL以后查看的,所以used是474 . 不是0。

结果

嗯,SQL正常执行。


image.png

还有一点需要指出,虽然CK是分布式存储,但是在执行聚合运算的时候,仍然是在单机上,所以会比较消耗内存。

补充

如果想增加空间,先关闭:
sudo swapoff /swapfile
后续步骤跟之前一样即可。

你可能感兴趣的:(给ClickHouse增加内存)