跳至內容

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

2 分的閱讀內容
0

我想知道為什麼我的 Amazon Relational Database Service (Amazon RDS) for MySQL 資料庫執行個體使用的空間超出了我的預期。我還想最佳化磁碟儲存空間。

解決方法

若要監控 Amazon RDS 資料庫執行個體的可用儲存空間,您可以使用 Amazon CloudWatch FreeStorageSpace 指標。但是,FreeStorageSpace 指標不會顯示資料庫執行個體中儲存空間的使用情況。若要判斷哪些項目使用儲存空間和回收儲空間,請使用下列方法。

執行 OPTIMIZE TABLE

資料表只會使用那些未處於積極使用狀態的空間。但是,Amazon RDS 仍然會為資料表分配空間。如果您開啟了 innodb_file_per_table,那麼您可以執行 OPTIMIZE TABLE 命令來回收空間。如需詳細資訊,請參閱 MySQL 網站上的 OPTIMIZE TABLE 陳述式

您可以對 InnoDB、MyISAM 和 ARCHIVE 資料表使用 OPTIMIZE TABLE。當您根據 Amazon RDS 預設的 innodb_file_per_table 組態設定,在單獨的資料表空間中建立資料表時,OPTIMIZE TABLE 就會發揮作用。如需詳細資訊,請參閱 MySQL 網站上的 File-per-table 資料表空間

 Amazon RDS 接受 OPTIMIZE TABLE 命令,但其實際上會改為執行 ALTER TABLE...FORCE 命令。發生此情況時,您會收到類似下列內容的警告訊息:

「資料表不支援最佳化,請改為重新建立並分析。」

更新您的統計資料,然後執行以下 information_schema.tables 查詢,以根據統計資料估計儲存空間使用情況:

SELECT    table_name,
    data_length,
    max_data_length,
    index_length,
    data_free
FROM
    information_schema.tables
WHERE table_schema='schema_name'
;

**注意:**在上述查詢中,加入適合您使用案例的值。

data_free 欄會顯示配置給未處於積極使用狀態之資料表的可用空間量。

減少應用程式資料表儲存空間

若要查看應用程式資料表在 RDS MySQL 資料庫執行個體上使用的儲存空間量,請執行下列查詢:

SELECT TABLESPACE_NAME,
ROUND(DATA_FREE/EXTENT_SIZE,0) FREE_DATA_MB,
 FREE_EXTENTS FREE_EXTENTS_MB, TOTAL_EXTENTS
TOTAL_EXTENTS_MB FROM
INFORMATION_SCHEMA.FILES;

若要尋找 RDS MySQL 資料庫執行個體上最大的應用程式資料表,請執行下列查詢:

SELECT TABLESPACE_NAME,  
ROUND(DATA_FREE/EXTENT_SIZE,0) FREE_DATA_MB,  
FREE_EXTENTS FREE_EXTENTS_MB,
TOTAL_EXTENTS  TOTAL_EXTENTS_MB FROM  
INFORMATION_SCHEMA.FILES
ORDER BY TOTAL_EXTENTS_MB DESC;

**注意:**如果資料庫包含長度可變的資料欄且長度超過 768 位元組的資料表,則無法計算資料庫和資料表使用的個別儲存空間。此限制包括 BLOBTEXTVARCHARVARBINARY 命令。

減少二進位日誌儲存空間

如果您將讀取複本新增至 Amazon RDS 執行個體,則來源執行個體的二進位日誌會使用額外的儲存空間。若要確定來源執行個體上的二進位日誌使用了多少儲存空間,請查看 BinLogDiskUsage CloudWatch 指標。如果二進位日誌使用的儲存空間越來越多,那麼您可能需要同步讀取複本。

減少或關閉一般日誌和慢速查詢日誌儲存空間

當您關閉一般日誌和慢速查詢日誌參數時,執行個體會開始儲存日誌和日誌備份。若要輪換這些檔案並控制磁碟使用量,請參閱 mysql.rds_rotate_general_logmysql.rds_rotate_slow_log

**注意:**當您不進行疑難排解時,最佳做法是關閉一般查詢日誌和慢速查詢日誌。

管理或減少 InnoDB 系統資料表空間大小

系統資料表空間從 10 MB 的空間開始,並包含 InnoDB 資料字典和復原空間。配置空間後,該檔案大小至少為 10 MB,且可能會使用更多可用的儲存空間。

預設情況下,Amazon RDS 會將 innodb_file_per_table 設為 1,以便資料庫將每個資料表空間的資料儲存在自己的 .ibd 檔案中。若要復原相關資料表的可重複使用空間,請使用 OPTIMIZE TABLE 調整每個資料表空間檔案的大小。您也可以刪除資料表。

如果將 innodb\file\per\table 設定為 0,則 Amazon RDS 會將所有資料表指派給系統資料表空間。如果您刪除資料表或索引,或從系統中已配置的資料表中刪除或截斷資料,則資料表空間會將這些空間標記為可重複使用。但是,innodb_file_per_table 不會釋放檔案系統的空間。

您無法在其所在的執行個體中縮減系統資料表空間的大小。請改為匯出目前資料庫的資料,然後將資料匯入新的執行個體。若要減少停機時間,請將新的 MySQL 執行個體設為來源 Amazon RDS 執行個體的複本。當複本與來源 Amazon RDS 執行個體同步後,請切換至新的執行個體。

**注意:**當您從快照還原或建立讀取複本時,您無法復原系統資料表空間中的空間。兩種方法都使用了包含系統資料表空間的來源執行個體儲存磁碟區快照。

相關資訊

Amazon RDS 資料庫執行個體儲存空間不足

修改 Amazon RDS 資料庫執行個體

使用 Amazon RDS for MySQL 時,如何對「MySQL HA_ERR_RECORD_FILE_FULL」錯誤進行疑難排解?