Manejo del espacio en disco lleno en postgresql


14

Tengo una aplicación web Django con backend postgresql 9.3.10 (sentado en un sistema operativo Linux). Me encontré con un error de disco completo, de modo que incluso si trato de truncar una tabla, obtengo errores del tipo:

ERROR:  could not extend file "base/30137/33186048": No space left on device
HINT:  Check free disk space.

No puedo agregar fácilmente más espacio en disco al servidor, ni puedo eliminar cosas en esta VM. Sin embargo, hay varias tablas que son candidatas para el truncamiento, pero parece que tampoco puedo truncarlas ahora.

¿Alguien puede darme consejos sobre lo que puedo hacer aquí? Esto está afectando mucho a mi servidor de producción, y aquí soy un DBA accidental, así que estoy totalmente perplejo.


Puede recuperar algo de espacio si puede (temporalmente) soltar un índice ... truncar tablas y luego volver a
crearlo

Respuestas:


9

Debido a que PostgreSQL debe escribir WAL antes de realizar cualquier cambio en las tablas, necesita espacio libre en disco para eliminar cosas y liberar más espacio en disco.

Si deja que el disco se llene, no puede recuperarse desde PostgreSQL. Incluso TRUNCATEaún tiene que escribir a WAL.

Por lo tanto, debe liberar espacio en el volumen o expandir el volumen. Si sus archivos de registro de PostgreSQL están en pg_logel directorio de datos, puede eliminar de manera segura algunos de ellos y reiniciar Pg.

No , no eliminar pg_xlogo pg_clog. Estos no son registros de errores del servidor, son partes críticas de la base de datos, el registro de transacciones y el registro de confirmación.


¿Por qué TRUNCATEtiene que escribir en wal y cómo se ve esa entrada en WAL?
Evan Carroll

"truncar no registra los datos completos, solo el hecho de que ocurrió un truncado. Para poder revertirlo, el archivo subyacente se mantiene hasta que se confirme la transacción". [fuente] ( postgresql.org/message-id/… Así que la entrada de truncate en el muro es super pequeña. simples bytes. Si esa fuera la totalidad de la carga de espacio necesaria, probablemente podría obtenerla rm -rf /tmp/*o eliminar su vimrc.
Evan Carroll

@EvanCarroll rm -rf /tmp/*... que también puede eliminar cosas que desee, como sockets de aplicaciones, etc. Es mejor ser más selectivo. En cuanto a espacio necesario, tienes razón, es mínima - una mesa vacía 8k + unos kb de entradas para el WAL truncado, la asignación de XID, se comprometen registro, etc.
Craig Ringer
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.