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?
Другие вопросы по тегам