docker/docker-compose tmpfs - каталог pgsql_tmp
Кто-нибудь пробовал запустить контейнер postgresql с монтированием тома tmpfs в pgsql_tmp? (любая база данных с каталогом временных файлов, которую я представляю)
Это вызвало какие-либо проблемы?
Это плохая идея?
Дополнительная полезная информация?
докер tmpfs
- "В отличие от томов и подключаемых монтирований, монтирование tmpfs является временным и сохраняется только в памяти хоста. Когда контейнер останавливается, монтирование tmpfs удаляется, а записанные там файлы не сохраняются".
pgsql_tmp
- "Временные файлы (для таких операций, как сортировка большего количества данных, чем может поместиться в памяти) создаются в PGDATA/base/pgsql_tmp или в подкаталоге pgsql_tmp каталога табличного пространства, если для них указано табличное пространство, отличное от pg_default. Имя временный файл имеет форму pgsql_tmpPPP.NNN, где PPP - это PID владеющего бэкэнда, а NNN различает разные временные файлы этого бэкэнда."
Выкладываю это для справки и исследования от сообщества. Спасибо за любую помощь.
Испытывал артефакты, заполняющие иноды, пару раз. После перезапуска стека пришлось вручную удалять файлы tmp, на это ушло около часа.
1 ответ
Хотя по моему (небольшому) опыту это сработало, я понимаю эту тему (зеркало ) таково, что в некоторых случаях (расширенное использование?) эта папка может содержать не очень временные файлы, которые потребуются при запуске (см. предупреждение о табличном пространстве) . docs ), поэтому лучше настроитьwork_mem
,temp_buffers
иtemp_file_limit
как уже упоминалось.
Однако для справки: вот как вы можете реализовать это с помощью docker-compose:
services:
postgres:
image: postgres:alpine
command:
- postgres
# - -cshared_buffers=512MB # Default = 128M
# - -cwork_mem=16MB # Default = 4M ; total = this*worker(8)*parallel(2)?
# - -ctemp_buffers=32MB # Default = 8M
- -clog_temp_files=0 # Log all temporary files creation
# - -clog_min_duration_statement=60s # Log queries longer than this delay
# Ignored in swarm (https://github.com/moby/moby/issues/26714):
# shm_size: 512M # Defaults to 64M ; related to total work_mem?
# Unsupported in swarm:
# tmpfs:
# - /dev/shm:size=512M
volumes:
- postgres_data:/var/lib/postgresql/data
- type: tmpfs
target: /var/lib/postgresql/data/base/pgsql_tmp
tmpfs:
# 1G max - https://www.kernel.org/doc/html/latest/filesystems/tmpfs.html
size: 1073741824
# Workaround for ignored shm_size in swarm:
# - type: tmpfs
# target: /dev/shm
# tmpfs:
# size: 536870912 # 512M max ; defaults to 64M ; relative to total work_mem?