docker/docker-compose tmpfs - pgsql_tmp 目录

sil*_*ete 6 postgresql tmpfs docker

有没有人尝试过运行 postgresql 容器并将 tmpfs 卷挂载到 pgsql_tmp?(我想象的任何具有临时文件目录的数据库)

\n\n

有没有引起什么问题?

\n\n

这是一个坏主意吗?

\n\n

其他有用信息?

\n\n

docker tmpfs- “与卷和绑定挂载相反,tmpfs 挂载是临时的,仅保留在主机内存中。当容器停止时,tmpfs 挂载将被删除,写入其中的文件将不会被保留\xe2\x80\x99。 ”

\n\n

pgsql_tmp- “临时文件(用于对超出内存容量的数据进行排序等操作)在 PGDATA/base/pgsql_tmp 中创建,或者在表空间目录的 pgsql_tmp 子目录中创建(如果为其指定了 pg_default 以外的表空间)。临时文件的格式为 pgsql_tmpPPP.NNN,其中 PPP 是所属后端的 PID,NNN 区分该后端的不同临时文件。”

\n\n

将此发布出来供社区参考和研究。感谢您的帮助。

\n\n

曾多次经历过人工数据库填充 inode 的情况。重新启动堆栈后,必须手动删除 tmp 文件,这花了大约一个小时。

\n

u89*_*106 1

虽然根据我(很少)的经验,它有效,但我对此线程镜像)的理解是,在某些情况下(高级用法?),此文件夹可能会收到启动时需要的非临时文件(请参阅表空间上的警告docs ) ,所以调整 和work_mem如前所述似乎更好。temp_bufferstemp_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?
Run Code Online (Sandbox Code Playgroud)