Amazon RDS for Oracle DB インスタンスが予想よりも多くのストレージを使用しているのはなぜですか?

所要時間4分
0

Oracle DB インスタンス用の Amazon リレーショナルデータベースサービス (Amazon RDS) を使用していますが、予想以上に多くのスペースを使用しています。

簡単な説明

さまざまなコンポーネントで Amazon RDS for Oracle インスタンスの基盤となるストレージを使用できます。これらのコンポーネントには、テーブルスペース、アーカイブログ、ログファイル、オンライン REDO ログファイル、およびデータポンプファイルが含まれます。

インスタンスのストレージ増加を管理するには、コンポーネントで使用するストレージ容量を確認してください。

1.テンポラリテーブルスペースを含むすべてのテーブルスペースのデータに割り当てられているスペースの量を調べます。

2.アーカイブログまたはトレースファイルのスペース割り当てを確認してください。

3.データポンプディレクトリのスペース割り当てを確認してください。

**注:**RDS インスタンスに割り当てられたストレージスペースはデータボリュームを表します。インスタンスを作成すると、Amazon RDS は割り当てられたストレージをデータボリュームにマッピングします。また、このプロセスでは、物理ストレージボリュームの上にファイルシステムを作成するために、未フォーマットディスク領域のごく一部しか使用しません。

解決方法

テーブルスペース内のデータに割り当てられているスペースの量を調べる

Oracle データベースのさまざまなコンポーネントに割り当てられているスペースの広がりを調べるには、次のクエリを使用します。

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);

デフォルトでは、Amazon RDS for Oracle DB インスタンスはすべてのテーブルスペースに対して自動拡張を有効にします。これには、データテーブルスペース、UNDO テーブルスペース、およびテンポラリテーブルスペースが含まれます。つまり、各テーブルスペースはより多くのデータを格納できるように拡張されます。この機能は、ストレージを追加する必要がなくなるか、割り当てられたストレージスペースをすべて使い果たすまで続きます。

テーブルスペースのサイズを変更

データテーブルスペースと UNDO テーブルスペース

データと UNDO テーブルスペースのサイズを変更するには、「Amazon RDS for Oracle DB インスタンスのテーブルスペースのサイズを変更するにはどうすればよいですか?」を参照してください。

テンポラリテーブルスペース

1.テンポラリテーブルスペースの使用状況に関する情報を表示するには、DBA_TEMP_FREE_SPACE ビューで次のクエリを実行します。

SQL> SELECT * FROM dba_temp_free_space;

2.テンポラリテーブルスペースのサイズを (たとえば 10 GB に) 変更するには、テーブルスペース使用量クエリの出力に基づいて次のクエリを実行します。

SQL> ALTER TABLESPACE temp RESIZE 10g;

割り当てられたテーブルスペースが 10 GB のしきい値を超えると、このコマンドは失敗する可能性があります。

3.コマンドが失敗した場合は、テンポラリテーブルスペースのスペースを縮小してください。

SQL> ALTER TABLESPACE temp SHRINK SPACE KEEP 10g;

4.ディスクへのアクティブなソートを実行する、テンポラリセグメントが割り当てられている長時間実行セッションを確認してください。そのためには、次のクエリを実行します。

SQL> SELECT * FROM v$sort_usage;

5.アプリケーションロジックとビジネスでセッションの終了が許可されている場合は、セッションを終了します。次に、ステップ 2 に示すように、テンポラリテーブルスペースのサイズを再度変更します。

6.セッションを終了できない場合は、新しいテンポラリテーブルスペースを作成してください。次に、新しいテーブルスペースをデフォルトとして設定し、古いテンポラリテーブルスペースを削除します。

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;

アーカイブログまたはトレースファイルのスペース割り当てを確認してください

1.現在のアーカイブログの保持を確認してください。

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

Amazon RDS for Oracle インスタンスでは、アーカイブログの保持はデフォルトで 0 に設定されています。つまり、アーカイブログを Amazon S3 にアップロードすると、Amazon RDS はそれらを基盤となるホストから自動的に削除します。Oracle LogMiner や GoldenGate などの製品でアーカイブログを使用する必要がある場合は、アーカイブログの保存期間を長くしてください

2.アーカイブログが基盤となるホスト上で使用する容量を計算します。まず、アーカイブログディレクトリを作成します

SQL> EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir;

次に、RDS インスタンスでのアーカイブログの正確な使用量を特定します。

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

3.アーカイブログに割り当てられた容量が予想よりも多い場合は、保持ポリシーの値を更新してください。次に、Amazon RDS の自動化で古いアーカイブログファイルを消去できるようにします。次の例では、アーカイブログを 24 時間保持するように RDS for Oracle インスタンスを設定しています。

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

トレースファイルの表示と削除の詳細については、「トレースファイルの削除」を参照してください。

データポンプディレクトリのスペース割り当てを確認してください

1.データポンプディレクトリの割り当てスペースが予想よりも多い場合は、削除できる .dmp ファイルを探してください。

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

2.このクエリで .dmp ファイルが見つかった場合は、次のクエリを使用してそれらを削除します。ファイル名を .dmp ファイルの名前に置き換えます。

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

関連情報

Amazon RDS DB インスタンス用のストレージの操作方法

セッションの終了

Amazon RDS インスタンスのモニタリングメトリクス

ストレージが不足している Amazon RDS DB インスタンス

コメントはありません