All Products
Search
Document Center

ApsaraDB RDS:Gunakan OPTIMIZE TABLE untuk mereklaim tablespace MySQL

Last Updated:Aug 21, 2026

Saat Anda menggunakan pernyataan DELETE untuk menghapus data dari tabel MySQL berukuran besar, ruang disk tidak langsung dilepaskan. Sebaliknya, database hanya menandai catatan atau halaman data sebagai reusable. Untuk mereklaim tablespace dan mengurangi penggunaan disk, jalankan pernyataan OPTIMIZE TABLE.

Prasyarat

  • Pernyataan OPTIMIZE TABLE hanya didukung oleh mesin penyimpanan InnoDB dan MyISAM.

  • Ruang disk yang tersedia pada instans harus lebih besar dari atau sama dengan ukuran tabel yang ingin Anda optimalkan.

    Catatan

    Jika ruang disk yang tersedia tidak mencukupi, pertama-tama perluas ruang disk. Setelah operasi selesai, Anda dapat menurunkan skalanya sesuai kebutuhan, dan sistem akan mengembalikan selisih harga.

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

  1. Sambungkan ke instans ApsaraDB RDS for MySQL menggunakan client.

  2. Gunakan pernyataan DELETE untuk menghapus data yang tidak diperlukan berdasarkan kebutuhan bisnis Anda.

  3. 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

  1. Masuk ke instans ApsaraDB RDS for MySQL menggunakan DMS.

  2. Di panel navigasi sebelah kiri, pilih ID instans target, klik ganda database target, klik kanan nama tabel apa pun, lalu pilih batch operation table.

  3. Pilih tabel yang ingin Anda reklaim spacenya, lalu pilih table maintenance > optimize table.优化表

  4. Pada kotak dialog yang muncul, pastikan informasinya benar lalu klik OK.

Dokumen terkait

Reklaim space dari fragmentasi tabel

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:

  1. 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.

  2. Hindari mengandalkan informasi usang

    Jika Anda memeriksa ukuran tabel menggunakan information_schema.tables atau konsol ApsaraDB RDS (Database Autonomy Service (DAS) > one-click diagnosis > space analysis), tablespace yang ditampilkan mungkin tidak berubah karena keterlambatan pembaruan data. Oleh karena itu, gunakan metrik penggunaan storage keseluruhan instans sebagai dasar utama penilaian.

  3. 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.