执行选择查询时出现共享内存不足错误

如何解决执行选择查询时出现共享内存不足错误

使用:Postgres 10.2

忽略一些不相关的列,我有这些列的表动物(省略了一些不相关的列):

animalid PK number
location (text)
type (text)
name (text)
data (jsonb) for eg: {"age": 2,"tagid": 11 }

要点:

  • 该表被分区为 1000 个子表。
  • 每个表可能有大约 100,000 条记录,因此总共有大约 1 亿条记录

我的应用程序尝试根据动物 ID 获取动物。例如:

 select "animals"."animalid","animals"."type","animals"."data","animals"."location","animals"."name" 
 from "animals" 
 where "animals"."animalid" = 2241

尽管如此,会引发错误(当有很多请求时):

ERROR: out of shared memory
Hint: You might need to increase max_locks_per_transaction.

我认为选择查询不应受到这些表上的锁的影响?或者是不是这个应用程序之外的查询会因为在分区表上获取锁而填满内存,从而影响选择查询

我可以选择直接使用分区表(因为有确定它的逻辑)。这是否有助于解决问题?

如果有更新它们的分区表和查询,为 max_locks_per_transaction 设置使用更大的值通常是个好主意吗?

我主要担心的是,我不太明白为什么选择查询在这里受到影响。谁能帮忙解释一下?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?