我最近在 Google Cloud SQL 上将 Postgres 9.6 实例升级到 11.1。从那时起,我开始注意到多个查询中存在大量以下错误:
org.postgresql.util.PSQLException:错误:无法调整共享大小
内存段“/PostgreSQL.78044234”到2097152字节:没有剩余空间
在设备上
据我了解,这可能是由于 PG10 中的更改造成的,典型的解决方案包括增加实例的共享内存。据我所知,这在 Google Cloud SQL 上是不可能的。我也尝试过调整work_mem
没有积极的效果。
这可能并不重要,但为了完整性,该实例配置了 30 GB RAM、120 GB SSD 硬盘空间和 8 个 CPU。我假设谷歌会为这些规格提供适当的共享内存设置,但也许不会?有任何想法吗?
UPDATE设置数据库标志random_page_cost
to 1
似乎已经减少了该问题的影响。但这不是一个完整的解决方案,因此如果有的话,仍然希望得到适当的解决方案。
信用去往这篇博文 https://amplitude.engineering/how-a-single-postgresql-config-change-improved-slow-query-performance-by-50x-85593b8991b0为了这个想法。
UPDATE 2原始问题报告已关闭,并创建了公众无法查看的新内部问题。然而,根据 GCP 客户经理的电子邮件回复,Google 于 2019 年 8 月 11 日推出了修复程序。
这对我有用,我认为谷歌需要更改一个关于他们如何启动 postgres 容器的标志,我们无法影响 postgres 内部。
https://www.postgresql.org/message-id/CAEepm%3D2wXSfmS601nUVCftJKRPF%3DPRX%2BDYZxMeT8M2WwLSanVQ%40mail.gmail.com 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)