golang请求云数据库ClickHouse数据库报错:err code: 202, message: Too many simultaneous queries. Maximum: 100

1.场景描述

开发环境:

        语言: golang1.22

        数据库引擎: GORM

        数据库: ClickHouse

场景:

        当使用sync.WaitGroup并发执行多个gorm相关的goroutine时,报错:err code: 202, message: Too many simultaneous queries. Maximum: 100

2.错误原因

从上面错误中可以看出:

(1).这是因为当前正在进行的查询或插入操作超过了设置的最大并发数限制(在这种情况下是100)。

(2).据插入太频繁,Clickhouse不支持频繁插入操作

这通常发生在高并发情况下,如多个用户同时请求数据,或应用程序在短时间内发送大量请求 

 3.解决方案

1.减少并发查询

检查代码,看看是否可以通过减少并发查询的数量来解决问题。考虑实现一个排队机制,以确保同时只有一定数量的查询在执行

2.批量处理

如果可能,将多个查询合并为一个批量查询。这可以减少同时请求的数量,从而降低错误发生的概率 .

在执行插入操作时发生该错误: 云数据库ClickHouse是一个多查少写的数据库,使用时应一次批量插入数据,不应该分多次插入。如果多次插入会导致CPU使用率升高,后续操作无法进行,您可以控制在1min插入一次,则可以避免该问题的发生

3.增加最大限制

如果您拥有数据库或服务的配置权限,可以考虑增加最大同时查询的限制。但是,这可能会影响性能,因此需要谨慎操作

这里以云数据库ClickHouse为例:

默认Server查询最大并发数为100,可以在控制台上进行修改。修改运行参数值具体操作步骤如下:

a.登录云数据库ClickHouse控制台。

b.在集群列表页面,选择默认实例列表云原生版本实例列表,单击目标集群ID。

c.在集群信息页面单击导航栏左侧的参数配置

d.修改max_concurrent_queries参数的运行参数值,输入修改值并单击确定

golang请求云数据库ClickHouse数据库报错:err code: 202, message: Too many simultaneous queries. Maximum: 100_第1张图片

e.单击提交参数

f. 单击确定

4.连接池

使用数据库时,确保有效地使用连接池。连接池可以帮助管理正在处理的连接和查询数量,从而减少同时请求的数量 

5.监控查询使用情况

实施监控来跟踪应用程序发送的并发查询数量。这可以帮助识别使用高峰期并避免超出限制 

那些查询操作导致CPU和内存升高,可以在system.query_log系统表中自助查看CPU、内存高期间的查询日志,里面有每个查询的CPU消耗和内存消耗统计。更多信息请参见system.query_log。将访问日志导出的命令如下:

SELECT * FROM system.query_log INTO OUTFILE access.log

6.优化查询

确保您的查询是优化的,以减少执行时间。优化的查询可以更快地释放资源,使其他查询能够得到处理 

7.错误处理:

在代码中实现错误处理机制,以优雅地处理此错误。例如,当发生此错误时,可以在短时间后重试查询 

你可能感兴趣的:(golang,#,golang基础,数据库,golang,开发语言,后端,sync)