透過刪除不必要的資料來優化 Aurora MySQL 存儲

DDD
發布: 2024-09-14 10:18:17
原創
745 人瀏覽過

我們的 Aurora MySQL 資料庫中的一個表格消耗了總儲存的大約 80%(約 400 GB)。由於我們能夠將舊資料存檔為 CSV 文件,因此我們決定刪除舊記錄並釋放儲存空間。

我一開始以為刪除記錄就能釋放儲存空間,但結果比想像的還要複雜。所以,我記錄了詳細步驟以供日後參考。

檢查表格儲存使用情況

您可以使用以下查詢檢查每個 .ibd 檔案的大小:

SELECT file_name, ROUND(SUM(total_extents * extent_size)/1024/1024/1024,2) AS "TableSizeinGB" 
FROM information_schema.files 
GROUP BY file_name 
ORDER BY total_extents DESC;
登入後複製

Optimizing Aurora MySQL Storage by Deleting Unnecessary Data

參考:MySQL 文件

重要提示

AWS re:Post 建議使用以下查詢來檢查表格大小,但目標表的結果比第一個查詢小約 150 GB。

SELECT table_schema "DB Name", table_name, 
       (data_length + index_length)/1024/1024/1024 AS "TableSizeinGB" 
FROM information_schema.tables 
WHERE table_schema = 'database_name';
登入後複製

當我諮詢 AWS Support 時,他們確認 information_schema.tables 僅提供統計值,而這些值通常不準確。他們建議使用 information_schema.files 來取得精確的資料。

有關表大小(390 GB)的資訊是從 information_schema.tables 中檢索的,由於這是統計數據,因此可能不準確。未來,我們建議使用 information_schema.files 來檢索表格大小資訊。

參考:AWS re:Post

檢查資料庫儲存使用情況

以下查詢檢查整體資料庫使用情況。這也使用 information_schema.files 來確保準確性。

SELECT file_name, ROUND(SUM(total_extents * extent_size)/1024/1024/1024,2) AS "TableSizeinGB" 
FROM information_schema.files 
WHERE file_name LIKE '%/database_name/%';
登入後複製

釋放資料庫儲存的步驟

以下是釋放儲存空間的步驟:

  1. 刪除舊記錄。
  2. 如有必要,請變更實例類別。
  3. 運行 OPTIMIZE TABLE ;.

單純刪除記錄並不會釋放儲存空間;您需要執行 OPTIMIZE TABLE 來釋放空間。

此外,在 OPTIMIZE TABLE(或 ALTER TABLE ... FORCE)操作期間,會建立臨時中間表檔案。在 Aurora 中,這些暫存檔案儲存在本機儲存中。本地儲存量取決於實例類別。就我而言,db.r6g.xlarge 實例只有 80 GB 本地存儲,這不足以容納已刪除記錄的大小。因此,我暫時擴展到 db.r6g.8xlarge (640 GB)。

參考:最佳化表

參考:更改表

參考:InnoDB Online DDL空間需求

參考:Aurora MySQL 暫存

使用 OPTIMIZE TABLE 時的注意事項

刪除大約 250 GB 的記錄後,運行 OPTIMIZE TABLE 花費了大約 130 分鐘(大約 2 小時)。由於 OPTIMIZE TABLE 會鎖定表,因此您可能需要安排停機時間或在非尖峰時段執行此操作。作為參考,刪除所有記錄總共花了大約 15 個小時,我分散了好幾天。

以上是透過刪除不必要的資料來優化 Aurora MySQL 存儲的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!