跳至內容

如何管理我的 Amazon RDS for Oracle 資料庫執行個體的儲存空間?

3 分的閱讀內容
0

我想使用最佳實務來管理 Amazon Relational Database Service (Amazon RDS) for Oracle 資料庫執行個體的儲存空間。

簡短說明

當您的 RDS 資料庫執行個體進入 storage-full (儲存空間已滿) 狀態時,您的執行個體登入將會凍結、資料庫增長會停止,且您會收到下列錯誤訊息:

"ORA-27061: waiting for async I/Os failed
Error: Linux-x86_64 Error: 28: No space left on device"

若要管理您的可用儲存空間,使其不會達到 storage-full 狀態,請使用下列最佳實務。

解決方法

監控 FreeStorageSpace 指標

如果 FreeStorageSpace 指標快速下降,且您的資料庫執行個體使用了超過 90% 的已分配儲存空間,則資料庫會遇到低儲存空間事件。低儲存空間的 RDS 事件 ID 為 RDS-EVENT-0007RDS-EVENT-0089

若要監控 FreeStorageSpace 指標,並在儲存空間達到其配額時收到通知,請建立 Amazon CloudWatch 警示。如需更多資訊,請參閱 Monitoring metrics in an Amazon RDS instance (監控 Amazon RDS 執行個體中的指標)。

若要防止此問題,您可以開啟自動擴展以自動新增儲存空間。

檢閱任何自動擴展的資料表空間

RDS for Oracle 資料庫執行個體的預設資料表空間類型為開啟 AUTOEXTENDbigfilebigfile 資料表空間的大小上限為 16 TiB。資料表空間會增加至資料表空間的最大限制配額或資料庫執行個體的已分配儲存空間。若已分配儲存空間已滿,您的執行個體會切換至 storage-full 狀態,且資料表空間無法擴展。如需更多資訊,請參閱 Oracle 網站上的 Autoextend tablespace (自動擴展資料表)。

最佳實務是根據您應用程式的需求來規劃資料表空間擴展。若要在大量載入前避免 storage-full 問題,請調整資料表空間大小分配更多空間。若您擴展儲存空間,資料庫執行個體效能通常不會受到影響,且不會發生停機。修改儲存空間大小後,您的資料庫執行個體會處於儲存空間最佳化狀態

注意: 在修改資料庫執行個體之前,請參閱 Working with storage for Amazon RDS DB instances (使用 Amazon RDS 資料庫執行個體的儲存空間)。

檢查 Amazon RDS 的 Oracle 檔案大小配額

在您的 RDS for Oracle 資料庫執行個體中,單一檔案大小上限為 16 TiB。

若您調整 bigfile 資料表空間中的資料檔案大小超出此配額,您會收到類似下列內容的錯誤訊息:

"ORA-01237: cannot extend datafile 6
ORA-01110: data file 6: '/rdsdbdata/db/mydir/datafile/myfile.dbf'ORA-27059:
could not reduce file sizeLinux-x86_64 Error: 27:
File too largeAdditional information: 2"

解決 "Storage quota exceeded" 錯誤

若您達到儲存空間配額並嘗試建立新的 RDS 資料庫執行個體,您會收到類似下列內容的錯誤訊息:

<x><x>"Storage quota exceeded by ; requested size: "

若要解決此問題,請申請增加配額,或者刪除未使用的備份以立即釋放您 AWS 帳戶中的空間。

管理佔用 BDUMP 目錄的大型追蹤檔案

您的資料庫不時會在 BDUMP 目錄中建立大型追蹤檔案。追蹤檔案會使用磁碟空間,並導致資料庫執行個體發生 storage-full 的情況。根據預設,Amazon RDS 會清理超過 7 天的追蹤檔案與日誌檔案。

若要檢視您目前的追蹤檔案保留期間,請執行下列命令:

EXEC rdsadmin.rdsadmin_util.show_configuration;

若要設定新的追蹤檔保留期間,請執行下列命令:

EXEC rdsadmin.rdsadmin_util.set_configuration('tracefile retention',1440);
commit;

注意: 請將 1440 替換為您想要保留追蹤檔案的分鐘數。如需關於如何管理追蹤檔案的更多資訊,請參閱 RDS for Oracle database log files (RDS for Oracle 資料庫日誌檔案)。

若要排序並移除大型追蹤檔案,請完成下列步驟:

  1. 若要按大小排序 BDUMP 目錄中的檔案,請執行類似下列內容的命令:

    select FILENAME, FILESIZE/1024/1024/1024"GB",MTIME from TABLE
      (rdsadmin.rds_file_util.listdir(p_directory => 'BDUMP')) order by 3 desc
  2. 找出您不使用的檔案。

  3. 執行下列 fremove dbms 套件,以刪除追蹤檔案保留區中的大型檔案:

    exec UTL_FILE.FREMOVE ('BDUMP',' <TRACEFILENAME');

    注意: 請將 TRACEFILENAME 替換為您不使用的追蹤檔案名稱。

管理使用 DATA_PUMP_DIR 目錄的大型 Data Pump 目錄

若您使用 Oracle Data Pump 移動資料,則可能會複製大型轉儲檔案而減少可用儲存空間。若要解決此問題,請整合 RDS for Oracle 與 Amazon Elastic File System (Amazon EFS),如此便不需要使用 DATA_PUMP_DIR 進行資料庫重新整理。

檢查您的封存日誌保留

Amazon RDS 會根據備份保留,將封存日誌備份至內部儲存空間,以用於時間點復原 (PITR)。根據 RDS for Oracle 的封存日誌保留設定,您在本機 RDS 儲存空間中儲存的封存日誌會佔用已分配儲存空間的使用量。

若要保留已封存的重做日誌,請使用下列參數執行 rdsadmin.rdsadmon_util.set_configuration

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

注意: 請將 24 替換為您想要保留已封存重做日誌的小時數。

若要檢查您的資料庫執行個體在特定時間段內使用了多少空間,請執行下列查詢:

SELECT SUM(BLOCKS * BLOCK_SIZE) bytes
  FROM V$ARCHIVED_LOG
 WHERE FIRST_TIME >= SYSDATE-(hours/24) AND DEST_ID=1;

注意: 請將 hours 替換為您想要查詢的小時數。

若要檢視保留的封存日誌,請執行下列命令建立目錄物件作為 ARCHIVELOG_DIR

EXEC rdsadmin.rdsadmin_master_util.create_archivelog_dir;
SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'ARCHIVELOG_DIR'));

檢查您的資料庫是否有碎片化物件

碎片會導致資料庫速度變慢,並佔用不必要的儲存空間量。若要找出使用最多空間的碎片化物件,請執行類似下列內容的命令:

SELECT
owner,
table_name,
ROUND((blocks * 8 / 1024), 2) "size (mb)",
ROUND((num_rows * avg_row_len / 1024 / 1024), 2) "actual_data (mb)",
ROUND((blocks * 8 / 1024) - (num_rows * avg_row_len / 1024 / 1024), 2) "wasted_space (mb)"
FROM
dba_tables
WHERE
owner = UPPER('&schema_name')
AND blocks > 0
AND (blocks * 8 / 1024) > (num_rows * avg_row_len / 1024 / 1024)
ORDER BY 5 DESC;

若要移除碎片,請使用匯出與匯入、重新建立資料表,或將資料表移動至新的資料表空間。

注意: 清空碎片化物件並將其移動至新的資料表空間,然後刪除碎片化資料表空間後,可用儲存空間指標即會更新。

使用 AWR Explorer 分析您資料庫執行個體的成長趨勢

使用 Oracle Enterprise 版本,您可以使用 AWR Explorer 查詢您的歷史資訊並分析資料庫的成長趨勢。若要檢查您的資料庫結構描述在特定天數內針對每種物件類型的成長,請執行下列命令:

title "Total Disk Used by Object Type"  select c.segment_type, sum(space_used_delta) / 1024 / 1024 "Space used (M)", sum(c.bytes) / 1024 / 1024 "Total Space (M)",  
round(sum(space_used_delta) / sum(c.bytes) * 100, 2) || '%' "Percent of Total Disk Usage"  
from  
dba_hist_snapshot sn,  
dba_hist_seg_stat a,  
dba_objects b,  
dba_segments c  
where end_interval_time > trunc(sysdate) - &days_back  
and sn.snap_id = a.snap_id  
and b.object_id = a.obj#  
and b.owner = c.owner  
and b.object_name = c.segment_name  
and space_used_delta > 0  
and c.owner = '&schema_name'  
group by rollup(segment_type);

相關項目

如何減少 Amazon RDS 資料庫執行個體的儲存大小和成本?

為什麼我的 Amazon RDS for Oracle 資料庫執行個體所使用的儲存空間超出預期?

Amazon RDS DB instance running out of storage (Amazon RDS 資料庫執行個體儲存體不足)

AWS 官方已更新 5 個月前