All Products
Search
Document Center

ApsaraDB RDS:Gunakan binlog cache free flush

Last Updated:Mar 29, 2026

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

ParameterDefaultDeskripsi
loose_binlog_cache_free_flushoffMengaktifkan atau menonaktifkan fitur. Variabel sistem global. Berlaku segera tanpa perlu restart instans. Nilai yang valid: on, off.
loose_binlog_cache_free_flush_limit_size268435456 (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

image

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

image

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

image

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

image

Saat transaksi besar dikomit, ruang yang dipesan di awal file temporary diisi dengan data berikut sebelum konversi:

DataDeskripsi
File headerMagic number 4-byte [0xFE 'bin'] yang mengidentifikasi file sebagai file log biner
Header eventsEvent deskripsi format dan event pengenal transaksi global (GTID) sebelumnya
Empty eventEvent bertipe ignorable yang mengisi sisa ruang yang dipesan
GTID eventGTID 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.

image

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

image.png

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.