DBAtlas · Atlas de operaciones de bases de datos

Disco / tablespace lleno

Ha recibido 'unable to extend', 'disk full', 'could not extend' o 'log full'. Sin pánico: primero averigüe QUÉ está lleno, recupere espacio de forma segura y luego corríjalo de forma permanente.

¿Qué está lleno?

Limpiar en el sitio equivocado no sirve. Mida primero el uso: ¿es un datafile, el log de transacciones, archive/redo, temp o el disco del SO?

SELECT d.tablespace_name, ROUND((1-(d.alloc-NVL(f.free,0))/d.maxb)*100,1) AS pct_free
FROM (SELECT tablespace_name, SUM(bytes) alloc, SUM(GREATEST(bytes,maxbytes)) maxb FROM dba_data_files GROUP BY tablespace_name) d LEFT JOIN (SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) f ON f.tablespace_name = d.tablespace_name ORDER BY pct_free;
  • El datafile / tablespace está lleno
  • El log de transacciones / archive-redo está lleno
  • Temp / undo está lleno
  • El disco del SO está lleno (no la BD)

¿Cuál es el mayor consumidor?

La mayoría de las veces la culpable es una sola tabla/segmento desbocado. Encuentre los más grandes.

SELECT segment_name, segment_type, ROUND(bytes/1048576,1) AS mb FROM dba_segments ORDER BY bytes DESC FETCH FIRST 10 ROWS ONLY;
  • Hay una tabla inesperadamente grande/desbocada
  • Crecimiento normal; el espacio realmente se ha agotado
  • Demasiadas filas muertas / bloat

¿Por qué crece el log?

El log/archive no puede limpiarse hasta que termine la transacción/el backup activo más antiguo. ¿Por qué se ha acumulado?

SELECT name, log_reuse_wait_desc FROM sys.databases WHERE name=DB_NAME();  -- why can it not be truncated?
  • MSSQL: no se están tomando backups de log (LOG_BACKUP)
  • PG: un replication slot atascado está reteniendo WAL
  • Oracle: el área de logs archivados (FRA) está llena
  • Una transacción abierta larga está reteniendo el log

Causa raíz: tabla/segmento desbocado

Un único objeto ha crecido de forma inesperada (inserciones descontroladas, una tabla de cola/log que nunca se purga).

Causa raíz: necesidad real de capacidad

Crecimiento normal; hay que añadir espacio.

Causa raíz: bloat / filas muertas

No se ha recuperado el espacio de las filas borradas/actualizadas.

Causa raíz: Temp / undo lleno

Un sort/hash grande o una transacción abierta larga llenó el espacio temporal.

Causa raíz: disco del SO lleno

El problema está en el disco del sistema operativo, no en la BD. Pueden estar ocupando espacio logs, core dumps, backups antiguos o archivos de traza.

Causa raíz: no se toman backups de log (SQL Server)

En el modelo de recuperación FULL, el log crece indefinidamente si no se toman backups de log.

Causa raíz: Replication slot abandonado (PG)

Un slot atascado (inactivo) impide que se elimine el WAL e infla pg_wal.

Causa raíz: área de logs archivados (FRA) llena (Oracle)

Los logs archivados se han acumulado y la FRA está llena; cuando el archiver se detiene, la base de datos puede dejar de aceptar escrituras.

Causa raíz: transacción abierta larga

La transacción activa más antigua impide recuperar el log/undo.

Abrir en DBAtlas →