6 & 100,000 2 mempermudah aplikasi untuk menambahkan pelambatan ke operasi besar-besaran. Namun, insinyur masih perlu menyadari bahwa operasi mereka harus menggunakan pelambatan, dan dibutuhkan perubahan terprogram pada kode untuk memanggil pelambatan. Kami sedang mencari kueri yang mengidentifikasi secara cerdas. teknisi akan menjalankan kode kueri "normal", dan adaptor atau proxy akan mengidentifikasi apakah kueri tersebut memerlukan pembatasan, dan bagaimana caranya Keterlambatan total diamati dengan metrik Show
Konfigurasi replika lebih cepatKami memiliki dua cara untuk membuat replika MySQL menerapkan perubahan lebih cepat. Pengguna dapat mengonfigurasi replika mereka dengan opsi berikut
Replikasi paralelReplikasi paralel dapat membantu kelambatan replikasi dengan mengonfigurasi replika untuk menggunakan beberapa utas yang bekerja secara paralel untuk menerapkan perubahan pada replika. Untuk informasi tentang penggunaan replikasi paralel, lihat Pembilasan kinerja tinggiSecara default, Cloud SQL untuk MySQL menghapus redo log ke disk setelah setiap transaksi. Pembilasan kinerja tinggi mengurangi frekuensi redo log disiram ke disk menjadi satu kali per detik, yang meningkatkan kinerja penulisan Setel bendera pada replika baca ke 2. Anda juga harus menyetel bendera Lihat untuk informasi lebih lanjut tentang bendera ini Saat tanda ditetapkan pada replika baca dan Cloud SQL mendeteksi bahwa mungkin terjadi error, Cloud SQL akan otomatis membuat ulang replika tersebut Optimalkan kueri dan skemaBagian ini menyarankan beberapa pengoptimalan skema dan kueri umum yang dapat Anda buat untuk meningkatkan kinerja replikasi Tingkat isolasi kueri di replika bacaLevel isolasi transaksi 0 memperoleh kunci yang mungkin memblokir perubahan replikasi. Pertimbangkan untuk mengurangi tingkat isolasi kueri Anda di replika. Tingkat isolasi transaksi 1 mungkin berkinerja lebih baikCatatan. Level isolasi transaksi default MySQL adalah REPEATABLE READ karena alasan historisTransaksi yang berjalan lama di database utamaJika sejumlah besar baris diperbarui dalam satu transaksi, ini dapat menyebabkan lonjakan tiba-tiba dalam jumlah perubahan yang perlu diterapkan ke instance utama dan kemudian dikirim ke replika. Ini berlaku untuk pembaruan atau penghapusan pernyataan tunggal yang memengaruhi banyak baris sekaligus. Perubahan dikirim ke replika setelah dilakukan. Menerapkan lonjakan perubahan yang tiba-tiba pada replika dapat meningkatkan kemungkinan penguncian sanggahan pada replika jika beban kueri pada replika juga tinggi, yang menyebabkan kelambatan replikasi Pertimbangkan untuk memecah transaksi besar menjadi beberapa transaksi kecil Kunci utama tidak adaReplika baca Cloud SQL menggunakan replikasi berbasis baris, yang berperforma buruk jika tabel MySQL yang direplikasi tidak memiliki kunci utama. Kami merekomendasikan agar semua tabel yang direplikasi memiliki kunci primer Kunci eksklusif karena DDLPerintah bahasa definisi data (DDL), seperti 3 dan 4, dapat menyebabkan kelambatan replikasi dalam replika karena penguncian eksklusif. Untuk menghindari pertentangan kunci, pertimbangkan untuk menjadwalkan eksekusi DDL saat beban kueri lebih rendah pada replikaReplika yang kelebihan bebanJika replika baca menerima terlalu banyak kueri, replikasi dapat diblokir. Pertimbangkan untuk membagi pembacaan di antara beberapa replika untuk mengurangi beban masing-masing replika Untuk menghindari lonjakan kueri, pertimbangkan membatasi kueri baca replika di logika aplikasi Anda atau di lapisan proxy jika Anda menggunakannya Jika ada lonjakan aktivitas pada instans utama, pertimbangkan untuk menyebarkan pembaruan Basis data primer monolitikPertimbangkan sharding database utama secara vertikal (atau horizontal) untuk mencegah satu atau beberapa tabel lagging menahan semua tabel lainnya Pantau kelambatan replikasiAnda dapat menggunakan metrik ( 7)Jumlah detik status replika tertinggal dari status instance utama. Ini adalah perbedaan antara waktu saat ini dan stempel waktu asli di mana database utama melakukan transaksi yang saat ini sedang diterapkan pada replika. Secara khusus, penulisan mungkin dihitung sebagai lagging meskipun telah diterima oleh replika, jika replika belum menerapkan penulisan ke database Metrik ini melaporkan nilai 8 saat 9 dijalankan pada replika. Untuk informasi selengkapnya, lihat Memeriksa Status Replikasi di Manual Referensi MySQLNomor kesalahan utas I/O terakhir( network_lag _0)Menunjukkan kesalahan terakhir yang menyebabkan utas I/O gagal. Jika ini bukan nol, replikasi rusak. Ini jarang terjadi, tetapi mungkin saja terjadi. Periksa dokumentasi MySQL untuk memahami apa yang ditunjukkan oleh kode kesalahan. Misalnya, file binlog di instance utama mungkin telah dihapus sebelum replika menerimanya. Cloud SQL biasanya membuat ulang replika secara otomatis jika replikasi rusak. Metrik ( network_lag _2)Menunjukkan kesalahan terakhir yang menyebabkan utas SQL gagal. Jika ini bukan nol, replikasi rusak. Ini jarang terjadi, tetapi mungkin saja terjadi. Periksa dokumentasi MySQL untuk memahami apa yang ditunjukkan oleh kode kesalahan. Cloud SQL biasanya akan membuat ulang replika secara otomatis jika replikasi rusak. Metrik ( network_lag _4)Durasi waktu, dalam detik, yang diperlukan dari penulisan binlog di database utama hingga mencapai utas IO di replika Jika Verifikasi replikasiUntuk memverifikasi bahwa replikasi berfungsi, jalankan pernyataan berikut terhadap replika _Jika terjadi replikasi, Jika replikasi tidak terjadi, kolom Menurut dokumentasi MySQL, beberapa bidang menarik lainnya yang berhubungan dengan kelambatan replikasi adalah replica_lag _4Nama file log biner sumber yang sedang dibaca oleh utas I/O. replica_lag _5Posisi dalam file log biner sumber saat ini yang telah dibaca oleh utas I/O. replica_lag _6Nama file log relai yang sedang dibaca dan dijalankan oleh utas SQL. replica_lag _7Posisi dalam file log relai saat ini yang telah dibaca dan dieksekusi oleh utas SQL. replica_lag _8Nama file log biner sumber yang berisi peristiwa terbaru yang dieksekusi oleh utas SQL Dalam contoh di atas Dalam hal ini, utas SQL tertinggal di replika Anda juga dapat terhubung ke database utama dan mengeksekusi _Perintah ini menunjukkan kepada Anda file binlog mana yang sedang ditulis di database utama Jika file log biner basis data utama lebih baru dari Saat utas I/O tertinggal, metrik Perintah sebelumnya memungkinkan Anda mengamati detail kelambatan saat kelambatan terjadi, tetapi metrik Bagaimana cara mengatasi kelambatan replikasi di MySQL?Mengaktifkan pencadangan otomatis pada replika dapat mengakibatkan overhead untuk menyinkronkan log biner ke disk pada replika. Nilai default parameter sync_binlog diatur ke 1. Jika Anda mengubah nilai ini menjadi 0, maka Anda juga mematikan sinkronisasi log biner ke disk oleh server MySQL
Bagaimana cara meningkatkan kinerja replikasi MySQL?Salah satu cara untuk meningkatkan performa proses replikasi adalah dengan membuat struktur replikasi yang lebih dalam yang memungkinkan sumber untuk mereplikasi hanya ke satu replika, dan agar replika yang tersisa terhubung ke replika utama ini untuk kebutuhan replikasi masing-masing.
Bagaimana Anda menghentikan lag replikasi?Untuk mengurangi kelambatan replikasi untuk operasi besar, kami menggunakan pengelompokan . Kami tidak pernah menerapkan perubahan pada 100.000 baris sekaligus. Setiap pembaruan besar dipecah menjadi segmen kecil, subtugas, masing-masing sekitar 50 atau 100 baris. Sebagai contoh, katakanlah aplikasi kita perlu membersihkan beberapa baris yang memenuhi syarat dari tabel yang sangat besar.
Bagaimana saya bisa membuat replikasi lebih cepat?Pastikan alokasi file data database dan file log yang tepat . Gunakan drive disk terpisah untuk log transaksi untuk semua database yang terlibat dalam replikasi. Anda dapat mengurangi waktu yang dibutuhkan untuk menulis transaksi dengan menyimpan file log pada disk drive yang berbeda dari yang digunakan untuk menyimpan database. |