Rumah  >  Artikel  >  pangkalan data  >  Mengoptimumkan Storan MySQL Aurora dengan Memadam Data yang Tidak Diperlukan

Mengoptimumkan Storan MySQL Aurora dengan Memadam Data yang Tidak Diperlukan

DDD
DDDasal
2024-09-14 10:18:17833semak imbas

Satu jadual dalam pangkalan data MySQL Aurora kami menggunakan kira-kira 80% (sekitar 400 GB) daripada jumlah storan. Memandangkan kami dapat mengarkibkan data lama sebagai fail CSV, kami memutuskan untuk memadamkan rekod lama dan mengosongkan storan.

Saya pada mulanya menyangka bahawa memadamkan rekod akan mengosongkan ruang storan, tetapi ternyata ia lebih rumit daripada yang dijangkakan. Jadi, saya sedang mendokumentasikan langkah terperinci untuk rujukan masa hadapan.

Menyemak Penggunaan Storan Meja

Anda boleh menyemak saiz setiap fail .ibd menggunakan pertanyaan berikut:

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

Rujukan: Dokumentasi MySQL

Nota Penting

AWS re:Post mengesyorkan pertanyaan berikut untuk menyemak saiz jadual, tetapi keputusan untuk jadual sasaran adalah kira-kira 150 GB lebih kecil berbanding dengan pertanyaan pertama.

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

Apabila saya berunding dengan Sokongan AWS, mereka mengesahkan bahawa information_schema.tables hanya menyediakan nilai statistik, yang selalunya tidak tepat. Mereka menasihatkan menggunakan information_schema.files untuk mendapatkan data yang tepat.

Maklumat mengenai saiz jadual (390 GB) telah diambil daripada information_schema.tables dan memandangkan ini adalah data statistik, ia mungkin tidak tepat. Pada masa hadapan, kami mengesyorkan menggunakan information_schema.files untuk mendapatkan semula maklumat saiz jadual.

Rujukan: AWS re:Post

Menyemak Penggunaan Storan Pangkalan Data

Pertanyaan berikut menyemak keseluruhan penggunaan pangkalan data. Ini juga menggunakan information_schema.files untuk ketepatan.

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/%';

Langkah-langkah untuk mengosongkan Storan Pangkalan Data

Berikut ialah langkah untuk mengosongkan storan:

  1. Padamkan rekod lama.
  2. Tukar kelas instance jika perlu.
  3. Jalankan OPTIMIZE TABLE ;.

Hanya memadamkan rekod tidak mengosongkan ruang storan; anda perlu menjalankan OPTIMIZE TABLE untuk melepaskan ruang.

Selain itu, semasa operasi OPTIMIZE TABLE (atau ALTER TABLE ... FORCE), fail jadual perantara sementara dicipta. Di Aurora, fail sementara ini disimpan pada storan setempat. Jumlah storan setempat bergantung pada kelas contoh. Dalam kes saya, contoh db.r6g.xlarge hanya mempunyai 80 GB storan tempatan, yang tidak mencukupi untuk saiz rekod yang dipadamkan. Jadi, saya menskalakan buat sementara waktu kepada db.r6g.8xlarge (640 GB).

Rujukan: Jadual Optimumkan

Rujukan: Alter Table

Rujukan: Keperluan Ruang DDL Dalam Talian InnoDB

Rujukan: Storan Sementara Aurora MySQL

Berhati-hati Apabila Menggunakan OPTIMIZE TABLE

Selepas memadamkan kira-kira 250 GB rekod, menjalankan OPTIMIZE TABLE mengambil masa lebih kurang 130 minit (kira-kira 2 jam). Memandangkan OPTIMIZE TABLE mengunci jadual, anda mungkin perlu menjadualkan masa henti atau melakukan operasi ini semasa waktu luar puncak. Sebagai rujukan, ia mengambil masa kira-kira 15 jam untuk memadam semua rekod, yang saya sebarkan selama beberapa hari.

Atas ialah kandungan terperinci Mengoptimumkan Storan MySQL Aurora dengan Memadam Data yang Tidak Diperlukan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn