Fitur Binlog in Redo meningkatkan kinerja database dengan menulis konten log biner ke redo log saat transaksi di-commit, sehingga mengurangi operasi I/O disk sinkron.
Prasyarat
Versi database:
MySQL 8.4
MySQL 8.0: Versi mesin minor harus 20200430 atau lebih baru. Untuk melakukan upgrade versi mesin minor instans Anda, lihat Upgrade the minor engine version.
Atur parameter
sync_binloginstans ke1dan parameterbinlog_order_commitskeOFF. Untuk informasi selengkapnya, lihat Atur parameter instans.Atur mode replikasi data instans ke replikasi asinkron. Untuk informasi selengkapnya, lihat Query and modify the data replication mode.
Informasi latar belakang
Pada skenario MySQL yang bersifat mission-critical, untuk memastikan keamanan data, log biner dan redo log harus secara sinkron dituliskan ke disk saat transaksi di-commit. Artinya, dua parameter berikut harus diatur ke nilai 1:
sync_binlog = 1;
innodb_flush_log_at_trx_commit = 1;MySQL standar memerlukan dua operasi I/O disk sinkron untuk setiap commit transaksi: satu untuk log biner dan satu untuk redo log. Persyaratan ini mengurangi efisiensi commit, terutama pada cloud disk.
Untuk meningkatkan efisiensi commit transaksi, AliSQL memperkenalkan fitur Binlog in Redo, yang diaktifkan dengan mengatur parameter persist_binlog_to_redo=ON dan dinonaktifkan secara default. Saat transaksi di-commit, fitur ini menggabungkan konten log biner dengan redo log dan menuliskannya secara bersamaan. Hanya diperlukan satu operasi I/O sinkron untuk menyimpan redo log, yang sekaligus juga menuliskan data log biner ke disk. Desain ini menghilangkan dua operasi I/O terpisah yang diperlukan dalam MySQL standar untuk log biner dan redo log, sehingga secara signifikan mengurangi latensi dan meningkatkan throughput.
Selain itu, Binlog in Redo menggunakan pemrosesan batch dan mekanisme group commit untuk mengurangi kontensi lock akibat alokasi GTID dalam skenario konkurensi tinggi. Pendekatan ini mengurangi konflik lock dan memastikan kinerja tinggi.
Sebuah thread latar belakang secara asinkron menuliskan file log biner dengan menambahkan data secara batch secara berkala. Hal ini menghindari tekanan pada sistem file yang disebabkan oleh panggilan fsync secara real-time dan meningkatkan efisiensi I/O secara keseluruhan. Bahkan jika database restart secara tidak terduga, sistem dapat secara otomatis memulihkan integritas file log biner dengan memutar ulang data log biner yang tersimpan dalam redo log, sehingga memastikan konsistensi data.
Fitur Binlog in Redo tidak mengubah format log biner. Replikasi dan tool pihak ketiga yang berbasis log biner tidak terpengaruh.
Catatan
Setelah mengaktifkan fitur Binlog in Redo, untuk memulihkan instans disk lokal berkinerja tinggi ke database yang dikelola sendiri menggunakan file backup fisik, Anda harus menggunakan tool XtraBackup yang disediakan oleh RDS. Untuk menginstal tool XtraBackup, lihat Tool preparation.
Parameter
persist_binlog_to_redo
Mengaktifkan atau menonaktifkan fitur Binlog in Redo. Ini adalah variabel sistem global. Nilai yang valid:
onatauoff. Perubahan pada parameter ini langsung berlaku tanpa perlu me-restart instans.CatatanUntuk mengaktifkan fitur ini, selain mengatur
persist_binlog_to_redokeon, Anda juga harus mengaturbinlog_order_commitskeoffdan mengatur mode replikasi data instans ke replikasi asinkron.Untuk informasi selengkapnya tentang cara menyetel parameter instans, lihat Setel parameter instans.
Untuk informasi selengkapnya tentang cara mengatur mode replikasi data, lihat Kueri dan modifikasi mode replikasi data.
Jika parameter
sync_binloginstans Anda tidak diatur ke 1, fitur Binlog in Redo tidak akan aktif meskipun Anda telah mengonfigurasi parameter-parameter di atas. Dalam kasus ini, kami merekomendasikan Anda menggunakan fitur Binlog Parallel Flush untuk mengoptimalkan kinerja instans Anda.sync_binlog_interval
Interval persistensi asinkron log biner. Ini adalah variabel sistem global dan hanya berlaku ketika
persist_binlog_to_redo = on. Nilai default-nya adalah 50, dengan satuan milidetik (ms). Pada sebagian besar kasus, nilai default sudah cukup. Perubahan pada parameter ini langsung berlaku tanpa perlu me-restart instans.
Benchmark kinerja
Lingkungan pengujian
Server aplikasi: Instance ECS Alibaba Cloud
Spesifikasi instans RDS: 32 core, memori 128 GB, cloud disk ESSD
Jenis instans: Edisi Ketersediaan Tinggi (mode replikasi data: replikasi asinkron)
Kasus uji
Kasus uji Sysbench bawaan berikut digunakan:
oltp_update_non_index
oltp_write_only
Hasil pengujian
oltp_update_non_index
Setelah Binlog in Redo diaktifkan, TPS meningkat secara signifikan pada skenario konkurensi rendah dan terlihat jelas pada skenario konkurensi tinggi, dengan latensi yang lebih rendah.


oltp_write_only
Setelah Binlog in Redo diaktifkan, TPS meningkat secara substansial baik pada skenario konkurensi rendah maupun tinggi, dengan latensi yang lebih rendah.


Kesimpulan
Kasus uji
oltp_update_non_indexhanya berisi transaksi satu pernyataan, sehingga lebih sering melakukan commit. Sebaliknya,oltp_write_onlyberisi transaksi multi-pernyataan (dua pernyataanUPDATE, satu pernyataanDELETE, dan satu pernyataanINSERT), sehingga lebih jarang melakukan commit. Akibatnya, peningkatan kinerja untukoltp_update_non_indexlebih signifikan dibandingkanoltp_write_only.Pada jumlah koneksi bersamaan kurang dari 64, fitur Binlog in Redo secara signifikan meningkatkan kinerja dan mengurangi latensi. Hal ini menjadikannya efektif untuk sebagian besar beban kerja produksi.
Pada jumlah koneksi bersamaan lebih dari 256, fitur Binlog in Redo memberikan kinerja puncak yang lebih tinggi dan latensi yang lebih rendah, sehingga mampu menangani lonjakan traffic secara lebih baik.