Catatan penggunaan
-
Hapus sejumlah besar data terlebih dahulu: Menjalankan OPTIMIZE TABLE tidak efektif dalam mengurangi penggunaan tablespace kecuali Anda terlebih dahulu menghapus sejumlah besar data menggunakan pernyataan DELETE.
-
Peningkatan sementara penggunaan ruang disk: Menjalankan OPTIMIZE TABLE membuat tabel sementara untuk menyimpan data yang telah diatur ulang, sehingga sementara meningkatkan penggunaan ruang disk. Setelah operasi selesai, tabel sementara tersebut dihapus, dan penggunaan ruang disk kembali normal.
-
Statistik tabel dan indeks mungkin tidak berubah setelah reklamasi: Meskipun ruang disk telah dilepaskan, statistik tabel mungkin tidak diperbarui secara langsung. Untuk informasi lebih lanjut, lihat Mengapa penggunaan storage instans ApsaraDB RDS for MySQL saya tetap tidak berubah setelah menjalankan OPTIMIZE TABLE?.
-
Dampak performa dan risiko selama jam sibuk: Pada ApsaraDB RDS for MySQL 5.7 dan 8.0, pernyataan OPTIMIZE TABLE menggunakan online DDL, yang memungkinkan operasi DML berjalan bersamaan. Namun, menjalankan operasi ini pada tabel besar dapat menyebabkan lonjakan tiba-tiba pada konsumsi I/O dan resource buffer. Hal ini dapat menyebabkan kunci tabel atau konflik sumber daya, berpotensi mengakibatkan ketidaktersediaan instans atau gangguan pemantauan selama jam sibuk. Oleh karena itu, lakukan operasi ini selama jam sepi untuk menghindari dampak pada bisnis.
Gunakan command line
-
Sambungkan ke instans ApsaraDB RDS for MySQL menggunakan client.
-
Gunakan pernyataan DELETE untuk menghapus data yang tidak diperlukan berdasarkan kebutuhan bisnis Anda.
-
Jalankan pernyataan OPTIMIZE TABLE untuk mereklaim tablespace.
OPTIMIZE TABLE <$Database1>.<Table1>,<$Database2>.<Table2>;
Catatan
-
<$Database1> dan <$Database2> adalah nama database. <Table1> dan <Table2> adalah nama tabel.
-
Saat Anda menjalankan pernyataan OPTIMIZE TABLE pada mesin penyimpanan InnoDB, pesan berikut dikembalikan. Pesan ini diharapkan dan dapat diabaikan. Operasi berhasil jika output berisi "ok". Untuk informasi lebih lanjut, lihat Pernyataan OPTIMIZE TABLE.
Table does not support optimize, doing recreate + analyze instead
Gunakan DMS
-
Masuk ke instans ApsaraDB RDS for MySQL menggunakan DMS.
-
Di panel navigasi sebelah kiri, pilih ID instans target, klik ganda database target, klik kanan nama tabel apa pun, lalu pilih batch operation table.
-
Pilih tabel yang ingin Anda reklaim spacenya, lalu pilih .
-
Pada kotak dialog yang muncul, pastikan informasinya benar lalu klik OK.
FAQ
Mengapa storage usage tidak berubah setelah OPTIMIZE TABLE?
Permasalahan
Setelah menghapus sejumlah besar data menggunakan pernyataan DELETE dan menjalankan OPTIMIZE TABLE untuk mereklaim tablespace seperti yang dijelaskan dalam dokumentasi resmi ApsaraDB RDS for MySQL, Anda melakukan kueri terhadap bidang DATA_FREE di information_schema.tables dan menemukan bahwa nilainya tidak diperbarui. Hal ini mungkin membuat Anda mengasumsikan bahwa operasi gagal dan ruang disk tidak dilepaskan.
Penyebab
Ruang disk sebenarnya telah dilepaskan, tetapi statistik tabel MySQL tidak diperbarui secara tepat waktu. Masalah ini umum terjadi pada instans ApsaraDB RDS for MySQL 5.6, 5.7, dan 8.0 dengan versi mesin minor sebelum 20250531. Pada versi tersebut, menjalankan OPTIMIZE TABLE tidak secara otomatis memperbarui statistik tabel dan indeks. Akibatnya, nilai DATA_FREE di information_schema.tables mempertahankan nilai lama, yang tidak secara akurat mencerminkan penggunaan space sebenarnya. Untuk informasi lebih lanjut, lihat Bug #117426: optimize table does not update table and index stats.
Solusi
-
Solusi yang direkomendasikan: Upgrade versi mesin minor ke 20250531 (untuk MySQL 8.0)
Masalah ini telah diperbaiki pada versi mesin minor 20250531 untuk ApsaraDB RDS for MySQL 8.0. Setelah Anda melakukan upgrade, OPTIMIZE TABLE secara otomatis memperbarui statistik, dan bidang DATA_FREE secara akurat mencerminkan penggunaan space sebenarnya.
-
Solusi sementara: Paksa pembaruan statistik
Jika Anda tidak dapat melakukan upgrade versi database dalam waktu dekat, Anda dapat menjalankan pernyataan ALTER TABLE table_name ENGINE=InnoDB; pada tabel yang telah Anda optimalkan. Pernyataan ini memaksa tabel untuk dibangun ulang dan statistiknya diperbarui. Setelah perintah dieksekusi, bidang DATA_FREE di information_schema.tables akan menampilkan space yang telah direklaim secara akurat.
Apa yang harus dilakukan jika space tidak dilepaskan setelah pernyataan DELETE?
Pada ApsaraDB RDS for MySQL, saat Anda menggunakan pernyataan DELETE untuk menghapus data, perintah tersebut hanya menandai lokasi catatan atau halaman data sebagai reusable. Ukuran file disk tidak berubah, artinya tablespace tidak langsung direklaim. Hal ini menyebabkan fragmentasi storage, yang mengonsumsi ruang penyimpanan instans.
Anda dapat menggunakan perintah DDL native atau fitur lock-free schema change di DMS. Perhatikan bahwa sebelum menggunakan metode apa pun, pastikan instans Anda memiliki ruang disk yang cukup untuk mencegahnya terkunci.
-
Defragmentasi space menggunakan perintah: Jalankan operasi DDL seperti OPTIMIZE TABLE atau ALTER TABLE <table_name> ENGINE=InnoDB; untuk mengatur ulang struktur data dan indeks tabel, sehingga mereklaim space yang terfragmentasi.
Penting
Saat menggunakan perintah DDL native, lakukan selama jam sepi untuk menghindari kunci metadata. Untuk informasi lebih lanjut, lihat Catatan Penggunaan.
-
Gunakan fitur lock-free schema change di DMS: Untuk menghindari masalah terkait kunci metadata, gunakan fitur ini untuk mereklaim space dari fragmentasi storage.
Apa yang harus dilakukan jika space tidak dilepaskan setelah pernyataan TRUNCATE atau DROP?
Pada ApsaraDB RDS for MySQL, jika Anda menemukan bahwa ruang disk tidak dilepaskan setelah menjalankan operasi TRUNCATE atau DROP, ikuti langkah-langkah berikut:
-
Konfirmasi logika space reclamation
Setelah menjalankan pernyataan TRUNCATE atau DROP, pantau penggunaan storage instans untuk mengonfirmasi apakah space telah dilepaskan. Biasanya, penurunan penggunaan storage mencerminkan ukuran tabel yang di-drop relatif terhadap total ruang instans.
-
Hindari mengandalkan informasi usang
Jika Anda memeriksa ukuran tabel menggunakan information_schema.tables atau konsol ApsaraDB RDS (), tablespace yang ditampilkan mungkin tidak berubah karena keterlambatan pembaruan data. Oleh karena itu, gunakan metrik penggunaan storage keseluruhan instans sebagai dasar utama penilaian.
-
Dampak penghapusan asinkron
Jika fitur penghapusan asinkron (seperti fitur Alibaba Cloud Purge Large File Asynchronously) diaktifkan untuk instans Anda, space yang ditempati oleh file tabel tidak dilepaskan secara langsung. Sebaliknya, space tersebut secara bertahap dibersihkan oleh proses latar belakang. Ruang disk baru dilepaskan setelah proses ini selesai.