Saat bekerja dengan tabel MySQL berukuran besar, menjalankan pernyataan DELETE tidak serta-merta melepaskan ruang disk. Pernyataan tersebut hanya menandai catatan database atau halaman data sebagai dapat digunakan kembali. Untuk mereklaim tablespace dan mengurangi penggunaan disk, Anda dapat menjalankan perintah OPTIMIZE TABLE.
Prasyarat
-
Pernyataan
OPTIMIZE TABLEhanya didukung oleh mesin penyimpanan InnoDB dan MyISAM. -
Ruang disk yang tersedia pada instans harus minimal sebesar ukuran tabel yang ingin Anda optimalkan.
CatatanJika instans Anda memiliki ruang disk yang tidak mencukupi, Anda harus terlebih dahulu memperluas ruang disk. Setelah itu, Anda dapat memperkecil kembali ukuran disk, dan sistem akan mengembalikan selisih biaya.
Catatan penggunaan
-
Hapus sejumlah besar data terlebih dahulu: Menjalankan
OPTIMIZE TABLEtidak efektif kecuali Anda terlebih dahulu menggunakanDELETEuntuk menghapus sejumlah besar data. -
Peningkatan sementara dalam penggunaan ruang disk: Saat menjalankan
OPTIMIZE TABLE, MySQL membuat tabel sementara untuk menyimpan data yang telah diatur ulang. Hal ini menyebabkan peningkatan sementara dalam penggunaan ruang disk. Setelah operasi selesai, tabel sementara tersebut dihapus, dan penggunaan ruang disk kembali normal. -
Statistik tabel dan indeks mungkin tidak berubah setelah ruang direklaim: Meskipun ruang disk telah direklaim, statistik tabel MySQL mungkin tidak diperbarui secara langsung. Untuk informasi lebih lanjut, lihat Mengapa penggunaan ruang disk 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,
OPTIMIZE TABLEmenggunakan online DDL, yang mendukung operasi DML secara konkuren. Namun, menjalankan operasi ini pada tabel besar dapat menyebabkan lonjakan tiba-tiba dalam konsumsi I/O dan resource buffer, sehingga berisiko menyebabkan penguncian tabel atau konflik sumber daya. Selama jam sibuk, hal ini bahkan dapat menyebabkan instans tidak tersedia atau gangguan pada pemantauan. Oleh karena itu, kami menyarankan Anda menjalankan operasi ini selama jam sepi agar tidak memengaruhi bisnis Anda. -
Menghentikan secara manual operasi OPTIMIZE TABLE: Menekan Ctrl+C di klien database, seperti tool command-line MySQL atau jendela SQL DMS, hanya memutus sesi klien saat ini. Ini tidak menghentikan operasi OPTIMIZE TABLE di backend. Untuk menghentikan operasi tersebut, Anda harus membuat koneksi database lain, menjalankan
SHOW PROCESSLIST;untuk menemukan ID thread dari operasi OPTIMIZE TABLE, lalu menjalankanKILL <thread ID>;untuk menghentikan thread tersebut.
Gunakan command line
-
Hubungkan ke instans ApsaraDB RDS for MySQL Anda menggunakan klien database.
-
Gunakan pernyataan
DELETEuntuk membersihkan data yang tidak diperlukan sesuai kebutuhan bisnis Anda. -
Jalankan perintah
OPTIMIZE TABLEuntuk mereklaim tablespace.OPTIMIZE TABLE <$Database1>.<Table1>,<$Database2>.<Table2>;Catatan-
<$Database1> dan <$Database2> merepresentasikan nama database, sedangkan <Table1> dan <Table2> merepresentasikan nama tabel.
-
Saat menjalankan
OPTIMIZE TABLEpada tabel InnoDB, perintah tersebut mengembalikan pesan berikut. Ini merupakan perilaku yang diharapkan dan dapat diabaikan. Operasi berhasil jika hasil akhirnya adalah "ok". Untuk informasi lebih lanjut, lihat dokumentasi resmi MySQL untuk Pernyataan OPTIMIZE TABLE.Table does not support optimize, doing recreate + analyze instead
-
Gunakan DMS
-
Di panel navigasi sebelah kiri, pilih ID instans target, klik ganda database, klik kanan tabel target, lalu pilih Batch operation table.
-
Pilih tabel yang ingin Anda optimalkan, lalu pilih .
-
Verifikasi informasi dalam kotak dialog dan klik OK.