Произошла следующая ошибка при чтении из таблицы PG 10 с 10 параллельными потоками: -
ОШИБКА: не удалось изменить размер сегмента общей памяти «/PostgreSQL.1110214013» до 3158016 байт: не осталось места device
Похоже, это результат того, что K8s ограничил максимальный размер / dev / shm / до 64 МБ. Если установить это значение выше, получится 64 МБ.
Параллельное чтение выполняется задачами Spark и разбивается на разделы на основе хешированного значения идентифицирующего столбца. Интересно, могут ли несбалансированные разделы привести к тому, что конкретная задача превысит значение postgres work_mem для процесса, вызывающего запись на диск.
Я вижу соответствующий журнал ошибок для каждого из мои потоки, поэтому изменение размера этого сегмента общей памяти происходит несколько раз (предположительно, запрошенные изменения размеров превышают заблокированные 64 МБ)
Пробовали увеличить work_mem с 4 МБ до 32 МБ, 64 МБ и, наконец, 256 МБ но видели ошибку на каждом этапе. Ниже приведен полный набор настроек PG, которые, как мне кажется, можно настроить, чтобы избежать проблем с использованием c диска: -
- effective_cache_size: «750MB»
- shared_buffers: «2GB»
- min_wal_size: «80MB»
- max_wal_size: «5GB»
- work_mem: «4MB, 32MB, 64MB, 128MB, 256MB» (все пробовали)
- random_page_cost: 4 (интересно, может ли этот параметр быть использован?)
- max_connections: 100
Есть потенциальный обходной путь, который включает в себя установку каталога в / dev / shm /, но будет предпочитаю избегать этого решения, поскольку я не смогу ограничить размер, до которого может вырасти каталог, в идеале я нашел бы решение, которое работает с 64 МБ.
Спасибо.