Google Cloud SQL PG11:无法调整共享内存段的大小

问题描述 投票:1回答:2

我最近在Google Cloud SQL上将Postgres 9.6实例升级到了11.1。从那时起,我开始注意到多个查询中存在大量以下错误:

org.postgresql.util.PSQLException:错误:无法将共享内存段“/PostgreSQL.78044234”调整为2097152字节:设备上没有剩余空间

根据我的阅读,这可能是由于PG10中的变化,典型的解决方案涉及增加实例的共享内存。据我所知,这在Google Cloud SQL上是不可能的。我也试过调整work_mem没有积极的影响。

这可能无关紧要,但为了完整性,该实例配置了30演出的RAM,120演出的SSD高清空间和8个CPU。我假设谷歌会为这些规格提供合适的共享内存设置,但也许不是?有任何想法吗?

更新将数据库标志random_page_cost设置为1似乎减少了问题的影响。这不是一个完整的解决方案,但如果有人在那里,仍然希望得到一个正确的解决方案。归功于this blog post的想法。

postgresql google-cloud-sql
2个回答
4
投票

这对我有用,我认为谷歌需要改变一个标志,告诉他们如何开始postgres容器,我们不能影响postgres内部。

https://www.postgresql.org/message-id/CAEepm%3D2wXSfmS601nUVCftJKRPF%3DPRX%2BDYZxMeT8M2WwLSanVQ%40mail.gmail.com

答对了。不知何故,您的容器技术限制了共享内存。该错误按设计工作。您可以弄清楚如何修复挂载选项,或者可以使用max_parallel_workers_per_gather = 0禁用并行度。

show max_parallel_workers_per_gather;
-- 2
-- Run your query
-- Query fails
alter user ${MY_PROD_USER} set max_parallel_workers_per_gather=0;
-- Run query again -- query should work
alter user ${MY_PROD_USER} set max_parallel_workers_per_gather=2;
-- -- Run query again -- fails

1
投票

您可以考虑increasing Tier of the instance,它将影响您的Cloud SQL实例可用的机器内存,vCPU核心和资源。检查available machine types

在Google Cloud SQL中,PostgreSQL也可以更改对内存消耗有影响的database flags

  • max_connections:可以为每个客户端分配一些内存资源,因此最大客户端数量表明可能的最大内存使用量
  • shared_buffers:确定PostgreSQL专用于缓存数据的内存量
  • autovacuum - 应该开启。

我建议降低限制,以降低内存消耗。

© www.soinside.com 2019 - 2024. All rights reserved.