o.h.engine.jdbc.spi.SqlExceptionHelper : FATAL: query_wait_t



我正在使用PostgreSQL作为数据库的SpringBoot应用程序,我正在从Jmeter进行负载测试,数据库托管在azure中,当我尝试向单个API或端点并行/并发地发送150个Rest请求时,我得到以下错误,但有100个请求它成功工作。

误差:

2022-12-21 17:29:43.000  WARN 1 --- [http-nio-8080-exec-60] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 08P01
2022-12-21 17:29:43.000 ERROR 1 --- [http-nio-8080-exec-60] o.h.engine.jdbc.spi.SqlExceptionHelper   : FATAL: query_wait_timeout
2022-12-21 17:29:43.000  WARN 1 --- [http-nio-8080-exec-60] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 08006
2022-12-21 17:29:43.001 ERROR 1 --- [http-nio-8080-exec-60] o.h.engine.jdbc.spi.SqlExceptionHelper   : An I/O error occurred while sending to the backend.
2022-12-21 17:29:43.090  WARN 1 --- [http-nio-8080-exec-61] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 08P01
2022-12-21 17:29:43.090 ERROR 1 --- [http-nio-8080-exec-61] o.h.engine.jdbc.spi.SqlExceptionHelper   : FATAL: query_wait_timeout

我想提高应用程序的性能,简而言之,解决上面的错误,当我们自动扩展我们的应用程序有两个实例,150个请求通过,但当我们运行一个实例,它给出了上述错误,我想理解

  1. 是内存问题还是数据库问题?
  2. 如何解决?

根据文档:

query_wait_timeout

查询允许等待执行的最大时间。如果在此期间未将查询分配给服务器,则客户机将断开连接。0禁用。如果禁用此功能,则客户端将无限期地排队。[秒]

此设置用于防止无响应的服务器抢占连接。当服务器关闭或由于任何原因拒绝连接时,它也很有帮助。

默认值:120

很可能PostgreSQL连接池中的所有连接都很忙,而你的应用程序在预定义的2分钟超时范围内无法获得一个连接。

选项在:

  1. 增加连接池大小
  2. 增加上述超时
  3. 查看Postgresql慢查询日志和这些查询的执行计划
  4. 使用JDBC请求采样器
  5. 隔离测试数据库
  6. 使用JProfiler或YourKit等分析工具来查看长处理是否在应用程序源代码的某个地方。

最新更新