linux - PostgreSQL 12 - “基本”目录中的大型缓存文件
问题描述
我注意到我的 8MB 小型数据库被 PostgreSQL 12 缓存在这个文件夹中:
/var/lib/postgresql/12/main/base/16384
此文件夹包含多个 1GB 文件,例如“16417”,重 1073741824 字节。
如何删除这些文件并将缓存文件空间限制为最大 100 GB?现在它使用尽可能多的空间并使我的磁盘崩溃(没有剩余空间)。
在 postgresql.conf 文件中,我更改了这些选项:
temp_file_limit = 10000000
shared_buffers = 128MB
checkpoint_timeout = 12h
max_wal_size = 100MB
min_wal_size = 80MB
但不幸的是,它没有帮助。
我还能做些什么来解决这个问题?在一个我们的这些文件增长到 80 GB...
编辑:即使使用默认设置也会出现此问题。我的系统是 Ubuntu 18.04.4。
解决方案
这不是缓存,这些是实际的表和索引。如果您弄乱这些文件,您将破坏您的数据库并丢失数据。
找出数据库 16384 是什么:
SELECT datname FROM pg_database WHERE oid = 16384;
然后连接到该数据库并找出 16417 是什么:
SELECT relname, relnamespace::regnamespace, relkind
FROM pg_class WHERE relfilenode = 16417;
如果该对象的大小大于应有的大小,则可能您有一个膨胀的表或索引,并且VACUUM (FULL) tab
可以将其变小(但不要忘记该表在重写时不可访问!)。
同样,请确保您自己不操作任何这些文件。
推荐阅读
- html - Rails - 如何避免在方法中插入 html
- python - 为什么它用 += 打印单个字母并用 .append() 打印完整对象?
- azure - 具有自定义域的 Azure API 管理收到 HTTP 403 错误
- java - java.lang.NoClassDefFoundError: com/google/cloud/sql/core/CoreSocketFactory
- android-studio - 尝试在 Android Studio 中的空对象引用上调用虚拟方法“java.util.List com.example.demo.Database.Database.getName()”
- flutter - 如何在颤动中使用 hydated_bloc 保持状态?
- java - 跟踪 lambda 的执行
- python - 子类化:是否可以使用常规属性覆盖属性?
- ios - 有什么方法可以快速加载自定义 LLVM 通行证吗?
- java - 我在与输入颜色通道相关的 inRange 函数上遇到错误