有人尝试过运行一个将tmpfs卷装载到pgsql_tmp的postgresql容器吗?(任何带有临时文件目录的数据库,我想都是这样)
它造成什么问题了吗?
这是个坏主意吗?
其他有用信息?
dockertmpfs
-"与卷和绑定装载不同,tmpfs装载是临时的,并且只持久化在主机内存中。当容器停止时,tmpfs装入将被删除,写入其中的文件将不会持久化。">
pgsql_tmp
-"临时文件(用于排序超出内存容量的数据等操作)在PGDATA/base/pgsql_tmp中创建,或者在表空间目录的pgsql_tmp子目录中创建(如果为它们指定了除pg_default之外的表空间)。临时文件的名称形式为pgsql_tmpPPP.NNN,其中PPP是拥有后端的PID,NNN区分该后端的不同临时文件。">
将此发布以供社区参考和研究。感谢您的帮助。
有过几次artifactory数据库填充索引节点的经历。重新启动堆栈后,必须手动删除tmp文件,这大约需要一个小时。
虽然在我(很少)的经验中它是有效的,但我对这个线程(镜像)的理解是,在某些情况下(高级用法?),这个文件夹可能不会接收到启动时需要的临时文件(请参阅表空间文档上的警告),所以调整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?