
Usando PostgreSQL 9.3. Tuve una consulta de larga duración que se actualizó alrededor de 8 millones de filas. Obviamente algo salió mal. 2 días después recibí una alerta de poco espacio en disco. Detuve la consulta y esto es lo que vi.
root@server:/var/lib/postgresql/9.3/main# du -BM * | sort -n
1M global
1M pg_notify
1M pg_serial
1M pg_snapshots
1M pg_stat
1M pg_stat_tmp
1M pg_tblspc
1M pg_twophase
1M PG_VERSION
1M pg_xlog/archive_status
1M mydb.opts
1M mydb.pid
3M pg_subtrans
7M base/1
7M base/12030
7M base/12035
11M base/22029472
21M pg_clog
72M pg_multixact/offsets
315M pg_log
444M pg_multixact/members
516M pg_multixact
625M pg_xlog
3493M base/pgsql_tmp
61851M base/22053373
65372M base
Tenga en cuenta esto:61851M base/22053373
Dado que mis datos reales están en espacios de tabla almacenados en diferentes volúmenes, supongo que se trata de transacciones temporales que se han acumulado.
Hay algunas publicaciones en línea sobre problemas similares, pero no encontré ninguna solución canónica. En general, el consejo es "ejecutar VACÍO LLENO" y, a veces, la suciedad acumulada desaparece. Eso es lo que estoy haciendo ahora, pero está tomando su tiempo y temo que podría llenar el espacio restante en el disco (3 GB) y hacer que todo se derrumbe.
¿Alguien tuvo experiencia con esto? ¿Qué se almacena aquí? ¿Existe una forma segura de liberar rápidamente este espacio? O al menos muévalo a otra parte (tengo mucho espacio en mis discos de espacio de tabla).
Respuesta1
Me lo imaginé. Es mi error. Esta es una nueva base de datos que un colega creó en el espacio de tabla predeterminado en lugar de una de nuestras personalizadas.
Para aquellos que experimentan problemas similares, aquí hay algunas cosas que aprendí mientras investigaba. base/22053373
en mi caso es oid de una base de datos. Puedes ver qué base de datos es así:
SELECT oid, * FROM pg_database
Cada archivo dentro lleva el nombre de oid de un tipo de página (tabla o no). Los archivos más grandes probablemente provengan de sus tablas más grandes. Conéctese a la base de datos y seleccione de pg_class
la colección para descubrir cuál.
En este momento estoy moviendo db a un espacio de tabla personalizado usando
ALTER DATABASE mydb SET TABLESPACE mytablespace;
Estoy bastante seguro de que esto resolverá mi problema.