All Products
Search
Document Center

ApsaraDB RDS:Optimalkan commit transaksi besar

Last Updated:May 13, 2026

Pada beban kerja yang melibatkan transaksi besar, proses commit dapat memakan waktu lama untuk menulis ke binlog. Hal ini dapat menyebabkan instans tidak menerima operasi tulis selama periode panjang atau bahkan hang. ApsaraDB RDS for MySQL memperkenalkan fitur binlog cache free flush untuk mengoptimalkan kecepatan commit transaksi besar. Fitur ini mengatasi fluktuasi performa dan ketidaktersediaan penulisan berkepanjangan, sehingga meningkatkan stabilitas instans secara keseluruhan.

Fitur

Karena penulisan binlog bersifat serial, transaksi besar memerlukan waktu lama untuk menulis event binlog-nya dan juga memblokir transaksi lain dari melakukan commit. Fitur ini mengoptimalkan mekanisme penulisan binlog untuk commit transaksi besar sehingga kecepatan commit tidak lagi bergantung pada jumlah event binlog. Fitur ini mengatasi masalah umum berikut:

  • Transaksi yang sangat besar memblokir instans, sehingga transaksi lain tidak dapat melakukan commit.

  • Transaksi besar menyebabkan konsumsi I/O tinggi, yang dapat menghabiskan sumber daya I/O dan memperlambat operasi lain, seperti kueri.

  • Transaksi besar memperlambat eksekusi transaksi kecil, menyebabkan lonjakan koneksi aktif dan fluktuasi performa. Dalam kasus parah, hal ini dapat memicu kegagalan berantai dan membuat instans tidak tersedia.

  • Eksekusi transaksi besar yang sering menyebabkan ketidakstabilan performa berkelanjutan pada beban kerja Anda.

Catatan
  • Transaksi besar mengacu pada transaksi yang menghasilkan volume besar event binlog. Untuk informasi lebih lanjut, lihat Analisis masalah.

  • Untuk informasi lebih lanjut tentang cara kerja fitur binlog cache free flush, lihat Cara kerja.

Prasyarat

Instans harus memenuhi salah satu persyaratan versi berikut:

  • MySQL 8.4

  • MySQL 8.0 dengan versi mesin minor 20240731 atau lebih baru.

  • MySQL 5.7 dengan versi mesin minor 20240731 atau lebih baru.

    Catatan

    Pada halaman Basic Information, periksa bagian Configuration Information untuk tombol Upgrade minor engine version. Jika tombol tersebut tersedia, Anda dapat melakukan upgrade instans Anda. Jika tombol tersebut tidak tersedia, instans Anda sudah menggunakan versi mesin minor terbaru. Untuk informasi lebih lanjut, lihat Upgrade minor engine version.

Penggunaan

  • Instans baru: Fitur binlog cache free flush diaktifkan secara default.

  • Instans yang sudah ada: Anda dapat mengaktifkan fitur ini dengan mengatur variabel sistem global loose_binlog_cache_free_flush. Perubahan berlaku segera tanpa memerlukan restart instans.

  • Parameter terkait:

    loose_binlog_cache_free_flush_limit_size: Setelah Anda mengaktifkan fitur binlog cache free flush, jika binlog yang dihasilkan oleh suatu transaksi melebihi nilai parameter ini, file temporary binlog cache akan dipromosikan menjadi file binlog saat commit. Nilai default: 256 MB. Rentang nilai: 20971520 hingga 18446744073709551615 (satuan: byte).

Analisis masalah

Saat sebuah instans MySQL menjalankan transaksi besar, log kueri lambat (slow query log) dapat mencatat penundaan tidak biasa untuk statement yang seharusnya selesai dengan cepat, seperti COMMIT.image

Masalah ini disebabkan oleh konflik sumber daya dalam mekanisme penulisan binlog yang bersifat serial. Transaksi besar dalam satu thread memerlukan waktu lama untuk menulis binlog-nya, sehingga memblokir transaksi lain dari proses commit dan menyebabkan penundaan global yang terserialisasi.

Selama pengujian sysbench oltp_write_only, setelah menjalankan operasi UPDATE besar yang menghasilkan binlog sebesar 512 MB setiap 5 detik, kami mengamati efek berikut:

  • Setiap kali operasi UPDATE besar tersebut melakukan commit, Transactions Per Second (TPS) turun tajam.

  • Dampak performa sebanding dengan ukuran binlog: semakin besar binlog yang dihasilkan oleh transaksi, semakin signifikan dampak latensi terhadap beban kerja lain.

Gambar berikut mengilustrasikan dampak transaksi besar terhadap beban kerja yang sedang berjalan.

image

Operasi terkait UPDATE:

CREATE TABLE t_large (a INT, b LONGTEXT) ENGINE = InnoDB;

# Masukkan satu baris dengan teks sebesar 256 MB. Operasi UPDATE berikutnya akan menghasilkan 512 MB event binlog.
INSERT INTO t_large VALUES (1, repeat('a', 256000000)); 

UPDATE t_large SET a = a + 1;

Efek optimasi

  • Stabilitas TPS yang jauh lebih baik

    • Sebelum optimasi: Operasi UPDATE besar yang dijalankan setiap 5 detik menyebabkan fluktuasi TPS yang parah.

    • Setelah optimasi (garis oranye): Dampak operasi UPDATE besar terhadap TPS hampir sepenuhnya dihilangkan.

    image

  • Tidak ada fluktuasi latensi yang signifikan

    • Seperti yang ditunjukkan oleh garis oranye (setelah optimasi), dampak operasi UPDATE dengan berbagai ukuran terhadap latensi tidak lagi signifikan.

    • Bahkan ketika ukuran binlog melebihi 512 MB, latensi commit transaksi lain tidak terpengaruh secara signifikan.

    image

Cara kerja

Binlog cache

Binlog cache adalah ruang sementara tingkat sesi yang digunakan untuk menampung sementara event binlog. Setiap sesi dialokasikan binlog cache-nya sendiri, yang terdiri dari cache memori (buffer) dan file sementara. Ukuran cache memori dikontrol oleh parameter binlog_cache_size. Ketika suatu transaksi cukup besar hingga memenuhi cache memori, event-nya ditulis ke file sementara.

Selama eksekusi transaksi, event yang dihasilkan disimpan sementara di binlog cache. Saat commit, sistem harus membaca event-event tersebut secara berurutan dari binlog cache, memperbarui end_pos (posisi akhir) dan checksum untuk setiap event, lalu menuliskannya ke file binlog. Untuk memastikan event transaksi tersebut berurutan di file binlog, seluruh proses ini dilindungi oleh lock. Selama satu transaksi memegang lock ini untuk menulis ke file binlog, semua transaksi lain yang sedang melakukan commit akan diblokir.

Masalah pada penulisan binlog transaksi besar

Menulis event-event tersebut ke file binlog saat commit bisa memakan waktu lama dan berdampak parah terhadap instans dalam dua cara utama:

  • Proses ini memegang lock penulisan binlog, sehingga seluruh instans menjadi tidak dapat menerima tulisan selama proses penulisan berlangsung.

  • Proses penulisan mengonsumsi sumber daya I/O yang signifikan. Di lingkungan dengan kapasitas I/O terbatas, hal ini dapat menyebabkan seluruh instans hang.

Optimasi binlog cache free flush

AliSQL mendesain ulang file sementara yang digunakan oleh binlog cache, sehingga file tersebut dapat langsung dipromosikan menjadi file binlog. Saat fitur ini diaktifkan, commit transaksi besar akan langsung mempromosikan file sementaranya menjadi file binlog baru. Proses ini sangat cepat, mengonsumsi sumber daya I/O minimal, dan sepenuhnya menghilangkan dampak negatif dari penulisan binlog untuk transaksi besar.

Perubahan pada binlog cache

Agar file sementara binlog cache dapat langsung dipromosikan menjadi file binlog, AliSQL memodifikasi cara penggunaan binlog cache dalam dua aspek utama:

  • Saat menulis ke file sementara binlog cache, ruang kosong dicadangkan di awal file. Selama proses promosi, ruang ini digunakan untuk menyimpan header event binlog.

  • Saat menulis ke binlog cache, end_pos setiap event dihitung berdasarkan ukuran ruang yang dicadangkan ini.

Promosi file binlog

Saat transaksi besar dilakukan commit, file sementara binlog cache-nya langsung dipromosikan menjadi file binlog baru. Selama proses ini, header file binlog dan event header awal ditulis ke ruang yang telah dicadangkan. Ruang cadangan ini terdiri dari empat komponen utama:

  • File Header: Penanda 4-byte, [ 0xFE 'bin'], ditulis di awal setiap file binlog untuk mengidentifikasinya sebagai file binlog.

  • Header Events: Meliputi event Format description dan event Previous gtid.

  • Empty event: Jenis event yang sudah ada dan dapat diabaikan digunakan untuk mengisi sisa ruang cadangan.

  • Gtid event: GTID untuk transaksi besar dihasilkan selama fase commit, dan event-nya juga ditulis ke ruang cadangan.

Konten setelah ruang cadangan terdiri dari event dari binlog cache asli, yang biasanya mencakup event Query, Table map, Row, dan Xid.

File binlog yang dipromosikan melalui fitur ini berbeda dari file biasa dalam dua hal:

  • Berisi satu Empty event tambahan.

  • Checksum untuk file ini dinonaktifkan secara default.

Fitur binlog cache free flush tidak mengubah format binlog. Replikasi dan alat pihak ketiga yang bergantung pada file binlog tidak terpengaruh.