為什麼我的 Amazon RDS for Oracle 資料庫執行個體使用的儲存體超出預期?
我擁有 Amazon Relational Database Service (Amazon RDS) for Oracle 資料庫執行個體,但其使用的空間超出我的預期。
簡短說明
各種元件可以使用 Amazon RDS for Oracle 執行個體的基礎儲存體。這些元件包含表格空間、保存日誌、日誌檔、線上重做日誌檔,以及資料泵檔案。
若要管理執行個體的儲存體成長,請識別元件使用多少儲存空間:
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 資料庫執行個體的所有表格空間都會啟用 auto-extend。這包含資料表格空間、UNDO 表格空間,以及暫時表格空間。這表示每個表格空間都會增加以容納更多資料。此功能會繼續執行,直到您不再需要更多儲存體或使用所有已配置儲存空間為止。
調整表格空間的大小
資料表格空間和 UNDO 表格空間
若要調整資料和 UNDO 表格空間的大小,請參閱如何調整 Amazon RDS for Oracle 資料庫執行個體的表格空間大小?
暫時表格空間
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 自動化清除較舊的保存日誌檔。下列範例將 RDS for Oracle 執行個體設為保留 24 小時的保存日誌:
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]');
相關資訊
相關內容
- 已提問 6 個月前lg...
- 已提問 3 個月前lg...
- 已提問 10 個月前lg...
- 已提問 9 個月前lg...
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前