Saya menggunakan MySQL-5.1.50 dengan setup replikasi Master-slave.
Sebagian besar waktu budak tertinggal di belakang tuan.
Ketika saya menjalankan show processlist;
, tidak ada permintaan yang membutuhkan waktu lama. Saya mengaktifkan slow_log
juga. Namun, itu tidak menemukan permintaan berjalan lambat.
Budak terus memberi peringatan bahwa replikasi berada beberapa detik di belakang master. Terkadang, jeda waktu meningkat.
Bagaimana cara mendiagnosis penyebab masalah?
Saya butuh bantuan segera, karena masalah ini telah berlangsung selama 20 hari terakhir.
mysql
replication
adeela sahar
sumber
sumber
Jawaban:
Seconds_Behind_Master sangat suka melihat masa lalu melalui perjalanan waktu.
Pikirkan seperti ini:
Dengan cara yang sama, tampaknya Master sedang memproses banyak pertanyaan pada saat yang bersamaan.
Anda melihat kembali pada Budak, jalankan
SHOW SLAVE STATUS\G
dan dikatakan 200 untukSeconds_Behind_Master
. Bagaimana angka itu dihitung? Waktu Jam Slave (UNIX_TIMESTAMP (SEKARANG ()) - TIMESTAMP dari Kueri saat selesai dan dicatat dalam Log Biner Master.Ada metrik lain untuk dilihat selain
Seconds_Behind_Master
. Metrik itu disebutRelay_Log_Space
. Itu mewakili jumlah semua byte untuk semua file relai pada Slave. Secara default, log relai tunggal terbesar dibatasi hingga 1GB. JikaRelay_Log_Space
kurang dari 1GB, ini menunjukkan bahwa banyak permintaan yang berjalan lama dijalankan pada Master secara paralel. Sayangnya, karena sifat tunggal threaded Replication's SQL, query dieksekusi satu di belakang yang lain.Misalnya, anggap Anda memiliki skenario berikut pada Master:
Ketika Slave membaca queri-queri itu dari log relay dan memprosesnya satu per satu
Seconds_Behind_Master
Mengenai Slow Log, default untuk long_query_time adalah 10 detik. Jika semua pertanyaan Anda dalam log relai kurang dari 10 detik, Anda tidak akan pernah menangkap apa pun di Log Kueri Lambat.
Saya memiliki rekomendasi berikut untuk server Master dan Slave
Apr 26, 2012
: Apakah kinerja CPU relevan untuk server basis data?Sep 20, 2011
: Multi core dan Kinerja MySQLSep 12, 2011
: Kemungkinan untuk menggunakan MySQL lebih dari satu inti?May 26, 2011
: Tentang kinerja basis data single threaded versus multithreadedSeconds_Behind_Master
.PEMECAHAN MASALAH LEBIH LANJUT
Jika Anda ingin melihat kueri yang menyebabkan keterlambatan replciation, lakukan hal berikut:
SHOW SLAVE STATUS\G
Relay_Log_File
STOP SLAVE;
START SLAVE;
cd /var/lib/mysql
atau di mana pun log relai ditulisMisalnya, Ayo lakukan
SHOW SLAVE STATUS\G
Jika saya menjalankan
STOP SLAVE; START SLAVE;
, log relai ditutup dan yang baru terbuka. Tapi kamu maurelay-bin.000030
.Isi isinya sebagai berikut:
Anda sekarang dapat melihat pertanyaan yang sedang diproses oleh Slave. Anda dapat menggunakan kueri tersebut sebagai titik awal untuk penyetelan.
sumber
Apa format log biner yang Anda gunakan? Apakah Anda menggunakan ROW atau PERNYATAAN?
"
SHOW GLOBAL VARIABLES LIKE 'binlog_format';
"Jika Anda menggunakan ROW sebagai format binlog, pastikan bahwa semua tabel Anda memiliki Kunci Utama atau Unik:
SELECT t.table_schema,t.table_name,engine FROM information_schema.tables t INNER JOIN information_schema .columns c on t.table_schema=c.table_schema and t.table_name=c.table_name and t.table_schema not in ('performance_schema','information_schema','mysql') GROUP BY t.table_schema,t.table_name HAVING sum(if(column_key in ('PRI','UNI'), 1,0)) =0;
Jika Anda menjalankan mis satu pernyataan penghapusan pada master untuk menghapus 1 juta catatan pada tabel tanpa PK atau kunci unik maka hanya satu pemindaian tabel penuh akan terjadi di sisi master, yang bukan kasus pada slave.
Ketika ROW binlog_format digunakan, MySQL menulis perubahan baris ke log biner (bukan sebagai pernyataan seperti STATEMENT binlog_format) dan perubahan itu akan diterapkan pada baris sisi budak secara berurutan, yang berarti pemindaian tabel penuh 1 juta akan dilakukan pada slave hanya merefleksikan satu pernyataan delete pada master dan itu menyebabkan masalah slave lagging.
sumber
Nilai seconds_behind_master di SHOW SLAVE STATUS adalah perbedaan antara waktu sistem pada master, yang disimpan ketika acara awalnya dieksekusi dan dicatat dalam log biner ... dan waktu sistem pada budak ketika acara dieksekusi di sana.
Detik di belakang master akan memberikan nilai yang salah jika jam kedua sistem tidak sinkron.
sumber