对于 Cockroach DB,获取 'Caused by: org.postgresql.util.PSQLException: ERROR: root: memory budget exceeded

问题描述

在服务器上部署 CDB v20.2.5 后,一段时间后,我们开始频繁出现此错误

org.springframework.orm.jpa.JpaSystemException: Could not extract ResultSet; nested exception is org.hibernate.exception.GenericJDBCException: Could not extract ResultSet
Caused by: org.hibernate.exception.GenericJDBCException: Could not extract ResultSet
Caused by: org.postgresql.util.PsqlException: ERROR: root: memory budget exceeded: 40960 bytes requested,984028160 currently allocated,984028160 bytes in budget

我猜,这里的“预算中的字节数”是指 CDB 的缓存,根据错误,因为它已满,无法处理新请求。

在这错误之后,我们开始获取 CDB 的连接超时。

我的问题:

  • 缓存应该如何工作,理想情况下它应该替换任何新请求的数据
  • 连接超时是否是这些错误的结果。?
  • 本地 JDBC 查询是否会影响此问题,因为那里不存在休眠缓存。

注意:这里的缓存是 CDB 推荐的主存的 0.25 倍

解决方法

缓存应该如何工作,理想情况下它应该替换任何新请求的数据

此错误不涉及任何特定缓存。它一般是指在其限制下运行的 SQL 模块,该限制由 --max-sql-memory 控制。您真的有“大”查询吗?

连接超时是否是这些错误的结果。?

我对此感到惊讶。我希望错误而不是超时。如果你能找到一个好的复制品,我们很乐意看一看。

本地 JDBC 查询是否会影响此问题,因为那里不存在休眠缓存。

不知道,抱歉。或者我不明白这个问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...