DBAtlas · Atlas d'exploitation des bases de données

Disque / tablespace plein

Vous avez obtenu 'unable to extend', 'disk full', 'could not extend' ou 'log full'. Pas de panique : trouvez d'abord CE QUI est plein, récupérez de l'espace en sécurité, puis corrigez durablement.

Qu'est-ce qui est plein ?

Nettoyer au mauvais endroit ne sert à rien. Mesurez d'abord l'utilisation : s'agit-il d'un datafile, du journal des transactions, d'archive/redo, de temp ou du disque de l'OS ?

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;
  • Datafile / tablespace plein
  • Journal des transactions / archive-redo plein
  • Temp / undo plein
  • Disque de l'OS plein (pas la base)

Quel est le plus gros consommateur ?

La plupart du temps, une seule table/un seul segment incontrôlé est le coupable. Trouvez les plus gros.

SELECT segment_name, segment_type, ROUND(bytes/1048576,1) AS mb FROM dba_segments ORDER BY bytes DESC FETCH FIRST 10 ROWS ONLY;
  • Il y a une table anormalement grosse/incontrôlée
  • Croissance normale, l'espace est réellement épuisé
  • Trop de lignes mortes / bloat

Pourquoi le journal grossit-il ?

Le journal/l'archive ne peut pas être nettoyé tant que la plus ancienne transaction/sauvegarde active n'est pas terminée. Pourquoi s'est-il accumulé ?

SELECT name, log_reuse_wait_desc FROM sys.databases WHERE name=DB_NAME();  -- why can it not be truncated?
  • MSSQL : les sauvegardes du journal ne sont pas effectuées (LOG_BACKUP)
  • PG : un replication slot bloqué retient le WAL
  • Oracle : la zone des journaux archivés (FRA) est pleine
  • Une longue transaction ouverte retient le journal

Cause racine : table/segment incontrôlé

Un seul objet a grossi de façon inattendue (insertions incontrôlées, table de file/log jamais purgée).

Cause racine : réel besoin de capacité

Croissance normale ; il faut ajouter de l'espace.

Cause racine : bloat / lignes mortes

L'espace des lignes supprimées/mises à jour n'a pas été récupéré.

Cause racine : temp / undo plein

Un gros sort/hash ou une longue transaction ouverte a rempli l'espace temporaire.

Cause racine : disque de l'OS plein

Le problème se situe sur le disque du système d'exploitation, pas dans la base. Des logs, core dumps, anciennes sauvegardes ou fichiers de trace peuvent occuper l'espace.

Cause racine : sauvegardes du journal non effectuées (SQL Server)

En mode de récupération FULL, le journal grossit indéfiniment si aucune sauvegarde du journal n'est effectuée.

Cause racine : replication slot abandonné (PG)

Un slot bloqué (inactif) empêche la suppression du WAL et fait gonfler pg_wal.

Cause racine : zone des journaux archivés (FRA) pleine (Oracle)

Les journaux archivés se sont accumulés et la FRA est pleine ; dès que l'archiver se bloque, la base peut cesser d'accepter les écritures.

Cause racine : longue transaction ouverte

La plus ancienne transaction active empêche la récupération du journal/de l'undo.

Ouvrir dans DBAtlas →