PostgreSQL "tamaño de los archivos temporales"

12

He importado datos a una nueva base de datos (aproximadamente 600m de filas de marca de tiempo, entero, doble). Luego creé algunos índices e intenté alterar algunas columnas (obtuve algunos problemas de espacio), la base de datos se aspira.

Ahora pgAdmin III me dice que el " Tamaño de los archivos temporales " es 50G ~ +.

  1. ¿Qué son estos archivos temporales? son estos como el registro de transacciones de SQL Server?
  2. ¿Cómo puedo deshacerme de ellos? Parece que la base de datos es mucho más grande de lo que debería (el tamaño total de la base de datos es de 91 GB)

Usando Posgres 9.4.1 en un servidor Windows 2012.

Una captura de pantalla de la pestaña de estadísticas de la base de datos:

Una captura de pantalla de la pestaña de estadísticas de la base de datos

Ofiris
fuente
¿Qué representa el valor de la columna "tamaño de los archivos temporales"?
Ofiris

Respuestas:

12

No encontré nada en la documentación de pgAdmin, pero el código fuente revela la consulta detrás de estas entradas (agregadas para Postgres 9.2+):

Se reduce a:

SELECT temp_files AS "Temporary files"
     , temp_bytes AS "Size of temporary files"
FROM   pg_stat_database db;

Y el manual de Postgres tiene detalles parapg_stat_database :

tmp_files bigint Número de archivos temporales creados por consultas en esta base de datos. Todos los archivos temporales se cuentan, independientemente de por qué se creó el archivo temporal (p. Ej., Ordenación o hash), e independientemente de la configuración log_temp_files .

temp_bytes bigint Cantidad total de datos escritos en archivos temporales mediante consultas en esta base de datos. Se cuentan todos los archivos temporales, independientemente de por qué se creó el archivo temporal y de la configuración de log_temp_files .

Tenga en cuenta que estos valores no contribuyen al tamaño de su base de datos. Pero indican que su configuración para work_mempuede ser demasiado baja, por lo que muchas operaciones de clasificación se derraman en el disco (que es muy lento en comparación con solo RAM).

Relacionado:

Para realmente compactar el tamaño de su base de datos:

Para medir el tamaño:

Aparte: WAL (Write Ahead Log) sería equivalente en Postgres para el registro de transacciones en SQL Server. Buena explicación en esta respuesta relacionada sobre SO:

Erwin Brandstetter
fuente
10

De acuerdo a:

http://www.postgresql.org/message-id/[email protected]

El contador temporal (archivos y espacio utilizado) muestra un total de todos los archivos temporales utilizados desde probablemente la creación del clúster. No refleja el espacio actual utilizado por los archivos temporales.

Mi sistema, por ejemplo, muestra casi 700 GB de archivos temporales utilizados, pero el espacio real ocupado por los archivos temporales en /var/lib/pgsql/9.3/data/base/pgsql_tmp es solo de 53 MB actualmente.

Eduard Rozenberg
fuente