Pourquoi mon instance de base de données Amazon RDS for Oracle utilise-t-elle plus d’espace de stockage que prévu ?

Lecture de 7 minute(s)
0

J’ai une instance de base de données Amazon Relational Database Service (Amazon RDS) for Oracle qui utilise plus d’espace que prévu.

Brève description

Différents composants peuvent utiliser le stockage sous-jacent pour les instances Amazon RDS for Oracle. Ces composants incluent les tablespaces, les journaux d’archivage, les fichiers journaux, les fichiers de journaux redo en ligne et les fichiers de pompe à données.

Pour gérer la croissance du stockage dans votre instance, identifiez la quantité d’espace de stockage utilisée par vos composants :

1.    Déterminez la quantité d’espace allouée aux données dans tous les tablespaces, y compris les tablespaces temporaires.

2.    Vérifiez l’espace alloué aux journaux d’archivage ou aux fichiers de trace.

3.    Vérifiez l’allocation d’espace pour le répertoire des pompes à données.

Remarque : L’espace de stockage alloué à une instance RDS représente le volume de données. Lorsque vous créez une instance, Amazon RDS mappe le stockage alloué au volume de données. Ce processus utilise également un faible pourcentage d’espace disque brut pour créer le système de fichiers au-dessus du volume de stockage physique.

Résolution

Trouver la quantité d’espace alloué aux données dans les tablespaces

Pour déterminer la répartition de l’espace alloué aux différents composants de la base de données Oracle, utilisez la requête suivante :

set pages 200
select
'===========================================================' || chr(10) ||
'Total Database Physical Size = ' || round(redolog_size_gib+dbfiles_size_gib+tempfiles_size_gib+ctlfiles_size_gib,2) || ' GiB' || chr(10) ||
'===========================================================' || chr(10) ||
' Redo Logs Size : ' || round(redolog_size_gib,3) || ' GiB' || chr(10) ||
' Data Files Size : ' || round(dbfiles_size_gib,3) || ' GiB' || chr(10) ||
' Temp Files Size : ' || round(tempfiles_size_gib,3) || ' GiB' || chr(10) ||
' Archive Log Size - Approx only : ' || round(archlog_size_gib,3) || ' GiB' || chr(10) ||
' Control Files Size : ' || round(ctlfiles_size_gib,3) || ' GiB' || chr(10) ||
'===========================================================' || chr(10) ||
' Used Database Size : ' || used_db_size_gib || ' GiB' || chr(10) ||
' Free Database Size : ' || free_db_size_gib || ' GiB' ||chr(10) ||
' Data Pump Directory Size : ' || dpump_db_size_gib || ' GiB' || chr(10) ||
' BDUMP Directory Size : ' || bdump_db_size_gib || ' GiB' || chr(10) ||
' ADUMP Directory Size : ' || adump_db_size_gib || ' GiB' || chr(10) ||
'===========================================================' || chr(10) ||
'Total Size (including Dump and Log Files) = ' || round(round(redolog_size_gib,2) +round(dbfiles_size_gib,2)+round(tempfiles_size_gib,2)+round(ctlfiles_size_gib,2) +round(adump_db_size_gib,2) +round(dpump_db_size_gib,2)+round(bdump_db_size_gib,2),2) || ' GiB' || chr(10) ||
'===========================================================' as summary
FROM (SELECT sys_context('USERENV', 'DB_NAME')
db_name,
(SELECT SUM(bytes) / 1024 / 1024 / 1024 redo_size
FROM v$log)
redolog_size_gib,
(SELECT SUM(bytes) / 1024 / 1024 / 1024 data_size
FROM dba_data_files)
dbfiles_size_gib,
(SELECT nvl(SUM(bytes), 0) / 1024 / 1024 / 1024 temp_size
FROM dba_temp_files)
tempfiles_size_gib,
(SELECT SUM(blocks * block_size / 1024 / 1024 / 1024) size_gib
FROM v$archived_log
WHERE first_time >= SYSDATE - (
(SELECT value
FROM rdsadmin.rds_configuration
WHERE name =
'archivelog retention hours') /
24 ))
archlog_size_gib,
(SELECT SUM(block_size * file_size_blks) / 1024 / 1024 / 1024
controlfile_size
FROM v$controlfile)
ctlfiles_size_gib,
round(SUM(used.bytes) / 1024 / 1024 / 1024, 3)
db_size_gib,
round(SUM(used.bytes) / 1024 / 1024 / 1024, 3) - round(
free.f / 1024 / 1024 / 1024)
used_db_size_gib,
round(free.f / 1024 / 1024 / 1024, 3)
free_db_size_gib,
(SELECT round(SUM(filesize) / 1024 / 1024 / 1024, 3)
FROM TABLE(rdsadmin.rds_file_util.listdir('BDUMP')))
bdump_db_size_gib,
(SELECT round(SUM(filesize) / 1024 / 1024 / 1024, 3)
FROM TABLE(rdsadmin.rds_file_util.listdir('ADUMP')))
adump_db_size_gib,
(SELECT round(SUM(filesize) / 1024 / 1024 / 1024, 3)
FROM TABLE(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')))
dpump_db_size_gib
FROM (SELECT bytes
FROM v$datafile
UNION ALL
SELECT bytes
FROM v$tempfile) used,
(SELECT SUM(bytes) AS f
FROM dba_free_space) free
GROUP BY free.f);

Par défaut, les instances de base de données Amazon RDS for Oracle activent l’extension automatique pour tous les tablespaces. Cela inclut les tablespaces de données, les tablespaces UNDO et les tablespaces temporaires. Cela signifie que chaque tablespace s’agrandit pour accueillir davantage de données. Cette fonctionnalité est maintenue jusqu’à ce que vous n’ayez plus besoin d’espace de stockage supplémentaire ou que vous utilisiez tout l’espace de stockage alloué.

Redimensionner les tablespaces

Tablespace de données et tablespaces UNDO

Pour redimensionner les tablespaces de données et UNDO, consultez Comment redimensionner le tablespace de mon instance de base de données Amazon RDS for Oracle ?

Tablespace temporaire

1.    Pour afficher des informations sur l’utilisation du tablespace temporaire, exécutez la requête suivante sur la vue DBA_TEMP_FREE_SPACE :

SQL> SELECT * FROM dba_temp_free_space;

2.    Pour redimensionner le tablespace temporaire (par exemple, à 10 Go), exécutez la requête suivante en fonction du résultat de la requête d’utilisation du tablespace :

SQL> ALTER TABLESPACE temp RESIZE 10g;

Si le tablespace alloué s’étend au-delà du seuil de 10 Go, cette commande peut échouer.

3.    Si la commande échoue, réduisez l’espace sur le tablespace temporaire :

SQL> ALTER TABLESPACE temp SHRINK SPACE KEEP 10g;

4.    Vérifiez les sessions de longue durée qui effectuent un tri actif sur le disque et auxquelles des segments temporaires sont alloués. Pour ce faire, exécutez la requête suivante :

SQL> SELECT * FROM v$sort_usage;

5.    Si la logique de l’application et les activités vous permettent de mettre fin à la session, mettez-y fin. Ensuite, redimensionnez de nouveau le tablespace temporaire, comme indiqué à l’étape 2.

6.    Si vous ne pouvez pas mettre fin à vos sessions, créez un tablespace temporaire. Ensuite, définissez le nouveau tablespace comme paramètre par défaut et supprimez l’ancien tablespace temporaire :

SQL> SELECT property_name,property_value FROM DATABASE_PROPERTIES where PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';
SQL> create temporary tablespace temp2;
SQL> exec rdsadmin.rdsadmin_util.alter_default_temp_tablespace(tablespace_name => 'temp2');
<wait for a few minutes and verify if the default temporary tablespace for all users have been updated>
SQL> set pages 2000
SQL> column username for a30
SQL> select username, TEMPORARY_TABLESPACE from dba_users;
SQL> drop tablespace temp including contents and datafiles;

Vérifier l’espace alloué aux journaux d’archivage ou aux fichiers de trace

1.    Vérifiez la conservation actuelle du journal d’archivage :

SQL> SELECT value FROM rdsadmin.rds_configuration WHERE name ='archivelog retention hours';

Dans les instances Amazon RDS for Oracle, par défaut, la conservation des journaux d’archivage est définie sur 0. Cela signifie qu’une fois les journaux d’archivage chargés sur Amazon S3, Amazon RDS les supprime automatiquement de l’hôte sous-jacent. Si vous devez utiliser des journaux d’archivage avec des produits tels qu’Oracle LogMiner ou GoldenGate, augmentez la conservation des journaux d’archivage.

2.    Calculez l’espace utilisé par les journaux d’archivage sur l’hôte sous-jacent. Tout d’abord, créez un répertoire archivelog :

SQL> EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir;

Identifiez ensuite l’utilisation exacte d’archivelog sur une instance RDS :

SQL> SELECT sum(FILESIZE)/1024/1024/1024 archivelog_usage_GiB FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'ARCHIVELOG_DIR'));

3.    Si l’espace alloué aux journaux d’archivage est plus important que prévu, mettez à jour la valeur de la politique de conservation. Autorisez ensuite Amazon RDS Automation à effacer les anciens fichiers journaux d’archivage. Ce qui suit est un exemple de configuration de l’instance RDS for Oracle permettant de conserver les journaux d’archivage pendant 24 heures :

begin
 rdsadmin.rdsadmin_util.set_configuration(name => 'archivelog retention hours', value => '24');
end;
 /
commit;

Pour plus d’informations sur la liste et la purge des fichiers de trace, consultez la section Purger des fichiers de trace.

Vérifier l’allocation d’espace pour le répertoire des pompes à données

1.    Si l’espace alloué sur le répertoire de la pompe à données est plus important que prévu, recherchez les fichiers .dmp qui peuvent être supprimés :

SQL> SELECT * FROM TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) ORDER by mtime;

2.    Si cette requête trouve des fichiers .dmp, supprimez-les en exécutant celle-ci. Remplacez le nom du fichier par le nom des fichiers .dmp :

SQL> EXEC utl_file.fremove('DATA_PUMP_DIR','[file name]');

Informations connexes

Utilisation du stockage pour les instances de base de données Amazon RDS

Mettre fin à une session

Surveillance des métriques dans une instance Amazon RDS

L’instance de base de données Amazon RDS manque d’espace de stockage