复杂查询导致clickhouse宕机

背景

最近在研究clickhouse,发现了不少坑,有些坑是官方的无法解决,有些是配置的问题。配置问题及优化的问题就需要我们不断的调整配置以及优化sql。优化sql最主要是理解clickhouse是如何查询的,我们才能找到瓶颈点,找到优化方法。

问题

在8G内存4核CPU的机器上,单节点的默认配置的clickhouse,保存数据8000W+,一个复杂的多表关联的查询,每次查询到98%的时候,clickhouse就自动宕机了,报错如下:

Exception on client:
Code: 32. DB::Exception: Attempt to read after eof: while receiving packet from localhost:9000, ::1

Connecting to localhost:9000.
Code: 210. DB::NetException: Connection refused (localhost:9000, ::1)

查看clickhouse日志正常,error日志也未见异常。很是神奇。
服务被强制干掉了。

在官网的issues中可以查到不少人跟我情况一样

问题排查

为什么会这样,就是clickhouse在查询的时候会把数据加载到缓存中,缓存撑爆了,发生OOM了,可以通过linux命令

dmesg

查看linux状态,发现最后一行如下所示

[14666975.982367] Out of memory: Kill process 2591 (clickhouse-serv) score 412 or sacrifice child
[14666975.989771] Killed process 2591 (clickhouse-serv) total-vm:6092664kB, anon-rss:3145272kB, file-rss:165208kB, shmem-rss:0kB

如何解决

目前没看到有什么好的解决方案,我是如何解决的

  1. 换一个更大内存的服务器8G——>16G
  2. 优化sql,缩小查询范围
  3. 优化索引,跳过更多的数据扫描
  4. 调整用户查询限制,不能超过内存大小(至少先保证服务正常,不能说一个大查询直接把服务kill了)

经过以上优化基本保证了服务不会被kill掉,并且查询速度也会明细提升。

修改user.xml <max_memory_usage>10000000000</max_memory_usage>
限制最大内存不能超过系统最大可用内存

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于SSH服务启动失败导致系统的情况,我可以提供一些常见的解决方法,请您参考以下步骤: 1. 检查错误日志:登录到系统中,查看/var/log/auth.log或/var/log/secure文件,查找与SSH服务相关的错误信息。这些日志文件将记录SSH服务是否启动失败以及可能的原因。 2. 检查配置文件:验证/etc/ssh/sshd_config文件中的配置是否正确。确保端口号、密钥路径和访问策略等设置无误。您可以使用文本编辑器打开该文件并进行检查。 3. 检查SSH密钥:确认SSH密钥文件是否存在且可访问。默认情况下,私钥文件为/etc/ssh/ssh_host_rsa_key,公钥文件为/etc/ssh/ssh_host_rsa_key.pub。确保这些文件的权限设置正确,并且它们未被意外更改或删除。 4. 停止并重新启动SSH服务:尝试通过以下命令停止和重新启动SSH服务: ``` sudo service ssh stop sudo service ssh start ``` 5. 检查端口监听:使用以下命令检查系统上是否已经有进程在监听SSH端口(默认为22): ``` sudo netstat -tuln | grep 22 ``` 6. 更新和重装OpenSSH软件包:尝试更新和重新安装OpenSSH软件包,确保您使用的是最新版本并且没有损坏的文件。 ``` sudo apt update sudo apt install --reinstall openssh-server ``` 如果您仍然遇到问题,建议提供更多详细的错误信息以便更好地帮助您解决问题。请注意,此处提供的是一些常见的解决方法,具体解决方案可能因系统环境而异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值