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

Disque / tablespace plein

Symptôme

Erreurs 'unable to extend', 'disk full', 'log file full' ; les écritures s'arrêtent.

1. Pas de panique ; trouvez d'abord ce qui est plein

Est-ce un datafile, le journal de transactions, la zone d'archive/redo, temp ou le disque OS ? Nettoyer au mauvais endroit ne sert à rien. Vérifiez le disque avec df -h au niveau OS et les vues d'espace dans la base.

2. Mesurez l'utilisation

Quel tablespace/fichier/répertoire est plein, et à quel pourcentage ?

Oracle

SELECT d.tablespace_name, ROUND((1-(d.alloc-NVL(f.free,0))/d.maxb)*100,1) 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;

PostgreSQL

SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database ORDER BY 2 DESC; -- use OS df for the disk

MySQL

SELECT table_schema, ROUND(SUM(data_length+index_length)/1048576,1) mb FROM information_schema.tables GROUP BY table_schema ORDER BY mb DESC;

SQL Server

SELECT name, size/128.0 size_mb, size/128.0 - CAST(FILEPROPERTY(name,'SpaceUsed') AS int)/128.0 free_mb FROM sys.database_files;

Redis

INFO memory  # used_memory vs maxmemory

3. Trouvez les plus gros consommateurs

Identifiez les plus grandes tables/segments, les plus gros fichiers de log/d'archive et les anciennes sauvegardes inutiles. Le plus souvent, une seule table incontrôlée ou des journaux archivés accumulés sont en cause.

Oracle

SELECT segment_name, bytes/1048576 mb FROM dba_segments ORDER BY bytes DESC FETCH FIRST 10 ROWS ONLY;

PostgreSQL

SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) FROM pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC LIMIT 10;

SQL Server

SELECT TOP 10 OBJECT_NAME(object_id), SUM(reserved_page_count)*8/1024 mb FROM sys.dm_db_partition_stats GROUP BY object_id ORDER BY mb DESC;

4. Récupérez de l'espace en toute sécurité (rapide)

Pour les logs/archives : sauvegardez-les, puis purgez les anciens journaux archivés/sauvegardes (Oracle : RMAN delete archivelog ; MSSQL : faites une sauvegarde du log puis réduisez-le). Dans Redis : maxmemory-policy et éviction. Ne supprimez JAMAIS manuellement un datafile en service ; ne supprimez JAMAIS de journaux archivés sans sauvegarde.

5. Augmentez durablement la capacité

Ajoutez de l'espace au datafile ou activez l'autoextend (Oracle : ALTER DATABASE DATAFILE ... AUTOEXTEND ON MAXSIZE), agrandissez le disque, ajoutez un tablespace. Corrigez la cause profonde : rotation des logs, job de nettoyage des archives, politique de rétention.

6. Évitez la récidive

Mettez en place des alertes d'utilisation disque (seuils 80 %/90 %), automatisez le nettoyage des archives/logs et définissez clairement la politique de rétention. Évitez d'avoir à rouvrir ce playbook.

Ouvrir dans DBAtlas →