1. 问题现象
在对项目中的clickhouse数据库进行查询的时候,提示:Too many simultaneous queries
,如下图:
2. 问题原因
根据以往数据库的使用经验,确定应该是当前正在执行的查询数过多,超过了数据库的最大限制。于是验证了一下:
-
检查clickhouse设置的最大查询数:
查看clickhouse的配置文件config.xml,其中的选项max_concurrent_queries
,如下图:
-
确认当前实际在运行的查询数量:
select count(*) from system.processes
注意:此设置中的查询数包含了插入和查询请求。
3. 解决办法
出现这种情况,最直接的做法当然是修改配置,调大max_concurent_queries
的参数值,但也要分析具体原因,比如我遇到的这种情况,300的配置其实已经比较大了,但是依然不够,这是不太正常的,查看system.processes
的具体内容后,发现有大量的insert请求阻塞在那儿,因此可以确定即使我调大了该配置,很快还是会出现问题。对症下药应该是解决insert不能马上结束的问题,通过一番排查解决了该问题后,便没有再出现上述问题。
max_concurrent_queries的配置可以在系统运行时修改,无需重启服务,已经执行的查询不受影响。当该值设为0时,表示没有限制。
4. 知识拓展
4.2 如何终止当前正在执行的查询?
- 通过查看
system.processes
,获取到要终止的查询IDquery_id
- 执行kill命令进行终止:
kill query where query_id='xxx'