Saat transaksi besar dikomit, ApsaraDB RDS for MySQL memegang write lock saat menyiram (flush) event log biner dari cache sesi ke file log biner. Jika cache log biner membengkak hingga puluhan GB, lock ini akan memblokir semua permintaan tulis dan dapat menghabiskan resource I/O, sehingga membuat instans tidak responsif.
Fitur binlog cache free flush mengatasi bottleneck ini dengan mengonversi file temporary di cache log biner langsung menjadi file log biner saat komit, alih-alih membaca dan menulis ulang setiap event di bawah lock. Pendekatan ini memperpendek waktu komit transaksi besar, mengurangi konsumsi I/O, dan menjaga instans tetap responsif.
Prasyarat
Sebelum memulai, pastikan bahwa:
Instans RDS Anda menjalankan MySQL 8.0 atau MySQL 5.7.
Versi mesin minor adalah 20240731 atau lebih baru.
Untuk memeriksa versi mesin minor, login ke konsol ApsaraDB RDS dan buka halaman Basic Information. Di bagian Configuration Information, periksa apakah tombol Upgrade Kernel Version ditampilkan. Jika tombol tersebut muncul, klik untuk melihat dan memperbarui versi mesin minor. Jika tombol tidak ditampilkan, berarti instans sudah menggunakan versi mesin minor terbaru. Untuk informasi selengkapnya, lihat Perbarui versi mesin minor.
Aktifkan dan konfigurasikan fitur
Aktifkan fitur
Jalankan perintah berikut untuk mengaktifkan binlog cache free flush:
SET GLOBAL loose_binlog_cache_free_flush = on;Perubahan berlaku segera. Anda tidak perlu melakukan restart instans.
Verifikasi fitur aktif
SHOW GLOBAL VARIABLES LIKE 'loose_binlog_cache_free_flush';Sesuaikan ambang batas
Parameter loose_binlog_cache_free_flush_limit_size menetapkan ukuran minimum data log biner yang memicu konversi. Nilai default-nya adalah 256 MB, artinya hanya transaksi yang datanya melebihi 256 MB yang menggunakan jalur free-flush.
Untuk menerapkan optimasi ini pada transaksi yang lebih kecil, turunkan ambang batasnya:
SET GLOBAL loose_binlog_cache_free_flush_limit_size = <size-in-bytes>;Nonaktifkan fitur
SET GLOBAL loose_binlog_cache_free_flush = off;Parameter
| Parameter | Default | Deskripsi |
|---|---|---|
loose_binlog_cache_free_flush | off | Mengaktifkan atau menonaktifkan fitur. Variabel sistem global. Berlaku segera tanpa perlu restart instans. Nilai yang valid: on, off. |
loose_binlog_cache_free_flush_limit_size | 268435456 (256 MB) | Ambang batas yang memicu konversi. Saat data log biner suatu transaksi melebihi nilai ini, file temporary di cache log biner akan dikonversi menjadi file log biner pada saat komit. Rentang nilai: 20971520–18446744073709551615 byte. |
Cara kerja
Cache log biner
Setiap sesi memiliki cache log biner sendiri—kombinasi ruang memori (dibatasi oleh binlog_cache_size) dan file temporary di disk. Saat event transaksi melebihi batas memori, data tersebut dialihkan ke file temporary.
Pada saat komit, engine membaca setiap event dari cache, memperbarui posisi akhir dan checksum, lalu menuliskannya ke file log biner di bawah write lock. Lock ini memastikan event ditulis tanpa gangguan, tetapi juga memblokir transaksi lain selama seluruh proses flush berlangsung.
Dampak penulisan log biner transaksi besar
Ketika cache log biner suatu transaksi mencapai puluhan GB, proses flush saat komit menyebabkan dua masalah:
Permintaan tulis diblokir: Write lock dipertahankan selama seluruh proses flush, sehingga mencegah transaksi lain melakukan operasi tulis.
Resource I/O habis: Penulisan sekuensial dalam jumlah besar mengonsumsi resource I/O dan dapat membuat instans tidak responsif.
Cara binlog cache free flush mengatasi masalah ini
AliSQL mengoptimalkan mekanisme caching log biner sehingga file temporary di cache dapat langsung dikonversi menjadi file log biner. Dua perubahan memungkinkan hal ini:
Ruang header yang dipesan: Saat event ditulis ke file temporary, ruang di awal file dipesan untuk header file log biner. Saat file temporary dikonversi menjadi file log biner, ruang yang dipesan tersebut diisi dengan header yang diperlukan—tidak diperlukan penulisan terpisah.
Posisi akhir telah dihitung sebelumnya: Setiap event menghitung posisi akhirnya berdasarkan ukuran ruang yang dipesan, sehingga posisi tersebut sudah benar setelah konversi.
Isi file log biner hasil konversi
Saat transaksi besar dikomit, ruang yang dipesan di awal file temporary diisi dengan data berikut sebelum konversi:
| Data | Deskripsi |
|---|---|
| File header | Magic number 4-byte [0xFE 'bin'] yang mengidentifikasi file sebagai file log biner |
| Header events | Event deskripsi format dan event pengenal transaksi global (GTID) sebelumnya |
| Empty event | Event bertipe ignorable yang mengisi sisa ruang yang dipesan |
| GTID event | GTID dari transaksi yang sedang dikomit, dihasilkan pada saat komit |
Sisa file tetap mempertahankan event asli transaksi: query events, table map events, row-based events, dan XID events.
Perbedaan dengan file log biner biasa
File log biner hasil konversi berbeda dari file log biner biasa dalam dua hal:
Berisi empty event (bertipe ignorable) yang menempati sisa ruang yang dipesan.
Checksum dinonaktifkan secara default.
Fitur binlog cache free flush tidak mengubah format file log biner. Replikasi dan alat pihak ketiga tidak terpengaruh.
Efek optimasi

Gambar tersebut membandingkan waktu komit transaksi besar pada instans yang menggunakan Enterprise SSD (ESSD) tingkat kinerja 1 (PL1) dan Premium Local SSD, dengan fitur diaktifkan dan dinonaktifkan. Mengaktifkan binlog cache free flush memperpendek waktu komit serta mengatasi habisnya resource I/O dan durasi write-lock yang panjang.