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

时间:2019-04-23 01:17:12

标签: postgresql google-cloud-sql

我最近在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

2 个答案:

答案 0 :(得分:2)

这对我有用,我认为Google需要更改一个标志,说明它们如何在其末端启动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 :(得分:1)

您可能会考虑increasing Tier of the instance,这将对计算机内存,vCPU核心以及Cloud SQL实例可用的资源产生影响。选中available machine types

在Google Cloud中,SQL PostgreSQL也可以更改database flags,这会影响内存消耗:

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

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