我最近在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 HD空间和8个CPU。我以为Google会为那些规格提供适当的共享内存设置,但是也许不会吗?有什么想法吗?
更新
将数据库标志random_page_cost
设置为1
似乎减少了问题的影响。尽管这不是一个完整的解决方案,所以如果有解决方案,仍然希望获得适当的修复。
这个想法归功于this blog post。
答案 0 :(得分:2)
这对我有用,我认为Google需要更改一个标志,说明它们如何在其末端启动postgres容器,而我们不能影响它们在postgres内部。
宾果。您的容器技术以某种方式限制了共享内存。那 错误正在按设计工作。您可以弄清楚如何修复 挂载选项,或者您可以使用 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 :(得分:1)
您可能会考虑increasing Tier of the instance,这将对计算机内存,vCPU核心以及Cloud SQL实例可用的资源产生影响。选中available machine types
在Google Cloud中,SQL PostgreSQL也可以更改database flags,这会影响内存消耗:
我建议降低限制,以降低内存消耗。