Rumah > Artikel > pangkalan data > Mengoptimumkan Storan MySQL Aurora dengan Memadam Data yang Tidak Diperlukan
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.
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;
Rujukan: Dokumentasi MySQL
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
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/%';
Berikut ialah langkah untuk mengosongkan storan:
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
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!