Perlambatan Checkout Magento 2: Pembunuh Tabel Quote
Toko Magento 2 Anda memiliki pembunuh performa yang tersembunyi. Ia berada di dalam database Anda.
Tabel quote dan quote_item bertambah besar setiap kali pelanggan menambahkan produk ke keranjang. Jika mereka tidak membeli, catatan tersebut tetap ada. Selama berbulan-bulan, tabel-tabel ini bisa mencapai jutaan baris.
Saya pernah melihat sebuah toko dengan 15 juta baris di tabel quote. Kecepatan checkout turun dari 1,2 detik menjadi 8 detik. Pemilik toko tidak tahu mengapa. Bagian frontend telah di-cache, jadi semuanya tampak baik-baik saja sampai proses checkout gagal.
Tabel quote yang besar menyebabkan masalah berikut:
- Pemuatan halaman keranjang yang lambat karena proses database join yang berat.
- Panggilan AJAX checkout yang lambat untuk pengiriman dan total belanja.
- Pembuatan pesanan di admin yang lebih lambat.
- Waktu pencadangan (backup) dan pemulihan (recovery) database yang lebih lama.
- Tekanan memori yang tinggi pada PHP-FPM.
Cara memperbaikinya:
Ukur kerusakannya Periksa jumlah baris dan ukuran tabel Anda. Cari jumlah
stale_inactive. Ini adalah keranjang belanja yang ditinggalkan lebih dari 30 hari. Mereka tidak berguna tetapi memperlambat kueri Anda.Arsipkan sebelum menghapus Jangan menghapus jutaan baris sekaligus. Ini akan mengunci tabel Anda dan membuat database crash. Pertama, buat tabel arsip dan pindahkan
quoteyang tidak aktif yang berusia lebih dari 90 hari ke dalamnya.Gunakan penghapusan bertahap (batched deletes) Hapus baris dalam potongan kecil sebanyak 10.000. Ini mencegah penguncian tabel yang lama. Selalu hapus tabel anak (child tables) terlebih dahulu untuk menghormati relasi foreign key. Urutannya haruslah:
quote_item_optionquote_address_itemquote_shipping_ratequote_paymentquote_addressquote_itemquote
Optimalkan dan Beri Indeks Jalankan
OPTIMIZE TABLEuntuk mengambil kembali ruang disk. Tambahkan indeks komposit (composite indexes) untuk membantu database menemukanquoteyang aktif lebih cepat. Misalnya, tambahkan indeks pada(is_active, updated_at).Otomatiskan pembersihan Gunakan perintah Magento CLI:
bin/magento sales:cleanQuotes. Atur cron job untuk menjalankan ini setiap minggu saat trafik rendah.
Tips Pro: Keranjang tamu (guest carts) menyebabkan pembengkakan paling besar. Kurangi masa berlaku quote tamu menjadi 7 hari dalam konfigurasi Anda. Ini menjaga database Anda tetap ramping tanpa merugikan pelanggan asli.
Seorang klien melihat waktu pemuatan checkout mereka turun dari 6,5 detik menjadi 1,4 detik menggunakan langkah-langkah ini. Mereka juga berhasil menghemat ruang database sebesar 9GB.
Jaga agar tabel quote Anda tetap kecil untuk menjaga tingkat konversi tetap tinggi.
