Google Cloud SQL PG11: не удалось изменить размер сегмента общей памяти - PullRequest
4 голосов
/ 23 апреля 2019

Я недавно обновил экземпляр Postgres 9.6 до 11.1 в Google Cloud SQL. С тех пор я начал замечать большое количество следующих ошибок в нескольких запросах:

org.postgresql.util.PSQLException: ОШИБКА: не удалось изменить размер общего ресурса Сегмент памяти "/PostgreSQL.78044234" до 2097152 байта: свободного места не осталось на устройстве

Из того, что я прочитал, это, вероятно, связано с изменениями в PG10, и типичное решение заключается в увеличении общей памяти экземпляра. Насколько мне известно, это невозможно в Google Cloud SQL, хотя. Я также пытался настроить work_mem без положительного эффекта.

Это может не иметь значения, но для полноты картины экземпляр сконфигурирован с 30 гигабайтами оперативной памяти, 120 гигабайтами дискового пространства SSD и 8 процессорами. Я бы предположил, что Google предоставит соответствующие настройки общей памяти для этих спецификаций, но, возможно, нет? Есть идеи?

UPDATE Установка флага базы данных random_page_cost в 1, по-видимому, снизила влияние проблемы. Это не полное решение, хотя все равно хотелось бы получить правильное решение, если оно есть. Автор идеи пишет в этом блоге за идею.

Ответы [ 2 ]

5 голосов
/ 24 апреля 2019

Это сработало для меня, я думаю, что 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 голос
/ 23 апреля 2019

Вы можете рассмотреть увеличение уровня экземпляра , которое будет влиять на память компьютера, ядра vCPU и ресурсы, доступные для вашего экземпляра Cloud SQL.Проверьте доступные типы компьютеров

В Google Cloud SQL PostgreSQL также можно изменить флаги базы данных , которые влияют на потребление памяти:

  • max_connections: некоторые ресурсы памяти могут быть выделены для каждого клиента, поэтому максимальное количество клиентов предполагает максимально возможное использование памяти
  • shared_buffers: определяет, сколько памяти выделено для PostgreSQL для использования для кэширования данных
  • autovacuum - должен быть включен.

Я рекомендую снизить пределы, чтобы уменьшить потребление памяти.

...