PostgreSQL“临时文件的大小”

Ofi*_*ris 18 postgresql pgadmin

我已将数据导入新数据库(大约 600m 行时间戳、整数、双精度)。然后我创建了一些索引并试图改变一些列(有一些空间不足的问题),数据库被清空了。

现在 pgAdmin III 告诉我“临时文件的大小”是 50G~+。

  1. 这些临时文件是什么?这些像 SQL Server 事务日志吗?
  2. 我怎样才能摆脱它们,似乎数据库比它应该大得多(数据库的总大小为 91 GB)

Windows 2012 服务器上使用Posgres 9.4.1

数据库统计选项卡的屏幕截图:

数据库统计选项卡的屏幕截图

Erw*_*ter 18

我在 pgAdmin 文档中什么也没找到,但源代码揭示了这些条目背后的查询(为 Postgres 9.2+ 添加):

归结为:

SELECT temp_files AS "Temporary files"
     , temp_bytes AS "Size of temporary files"
FROM   pg_stat_database db;
Run Code Online (Sandbox Code Playgroud)

Postgres的手册中有详细信息pg_stat_database

tmp_files bigint 此数据库中查询创建的临时文件数。无论创建临时文件的原因(例如,排序或散列)如何,也无论log_temp_files设置如何,都会计算所有临时文件。

temp_bytes bigint 通过此数据库中的查询写入临时文件的数据总量。无论创建临时文件的原因如何,也无论log_temp_files设置如何,所有临时文件都会被计算在内。

请注意,这些值不会影响数据库的大小。但是它们表明您的设置work_mem可能太低,因此许多排序操作会溢出到磁盘(与仅 RAM 相比非常慢)。

有关的:

要实际压缩数据库的大小:

测量尺寸:

旁白:WAL(预写日志)在 Postgres 中等同于 SQL Server 中的事务日志。在这个关于 SO 的相关答案中有很好的解释:


小智 12

根据:

http://www.postgresql.org/message-id/BLU0-SMTP179B92C5102247CD961A4B3CF2A0@phx.gbl

临时计数器(使用的文件和空间)显示自可能创建集群以来使用的所有临时文件的总数。它不反映临时文件使用的当前空间。

例如,我的系统显示使用了近 700GB 的临时文件,但 /var/lib/pgsql/9.3/data/base/pgsql_tmp 中临时文件占用的实际空间目前只有 53MB。