MySQL çoğaltması ne kadar hızlı?


19

Şube ofislerimizde uygulama performansını (önemli ölçüde) geliştirmek için ana ofiste master sahibi olurken, şubelerimizin her birinde yerel kölelere sahip olabilmek için mysql db'nin kopyasını kurmayı düşünüyorum.

Db kendisi büyük değil (<1gb) ama merak ediyorum; 200-300 kayıt güncellemesi / dakika başı dikkate alındığında: çoğaltma ne kadar hızlı? (ilk önce 5mb'lik genel bir dsl bağlantısı varsayalım, gerekirse daha hızlı - maliyetleri olabildiğince düşük tutmaya çalışıyorum, ancak para daha fazlası için var)

Tüm tablolar toplu olarak kopyalanıyor mu? Çoğaltma, bir tablodaki her kayıt güncellendiği için isteğe bağlı olarak yapılıyor mu (dokümanlardan, yapılandırılabilir olduğunu düşünüyorum)?

Notlar:

  • Ben docs gibi 1 master, (2 şube şimdilik) 2 köle kurulum düşünüyorum burada bir uygulama değil, bir web istemcisi olmasının dışında
  • Master üzerinde yapılan herhangi bir güncellemenin <10 dakika içinde diğer slave'lere çoğaltılması gerekir.
  • Bütün bunlar, ORM (DevExpress XPO) 'yu köle okuma ve ustaya yazma kavramıyla mutlu edebileceğimi varsayar.

Yanıtlar:


21

MySQL çoğaltması, disk ve ağ G / Ç'si ile sınırlı olabildiğince gerçek zamana yakın bir şekilde gerçekleşir. Köleler efendiye açık tutulan bir soket açar. Master üzerinde bir işlem gerçekleştiğinde, binlog'a kaydedilir ve sadece slave (ler) de yeniden oynatılır. Master ve slave arasındaki soket kesilirse, bir sonraki başarılı bağlantıda binlog slave için yeniden oynatılır.

Çok master çoğaltma aynı şeyi yapar, ancak her iki yönde.

Bazı temel hesaplamalar, bant genişliği ihtiyaçlarınızı daha iyi belirlemenize yardımcı olacaktır.

Average transaction size * number of slaves * updates/minute = bandwidth needed

Bu yardımcı olur umarım.


4

Köle tarafındaki çoğaltma iki bağımsız iplik tarafından gerçekleştirilir.

  • Master'a bağlanan günlük okuyucu işlemi, her veri değiştirme ifadesini alır ve röle günlüğüne yazar.
  • Geçiş günlüğünden yeni öğeler alan sql writer işlemi, köle veritabanındaki ifadeleri işler, ardından sorgunun alındığını belirtmek için köle işaretçisini bu ifadenin ötesine taşır.

Çoğaltma gecikmesi IO ile sınırlandırılır, öncelikle aktarma günlüğünden (karmaşık SQL sorguları içerebilir) işlemleri uygulamak için ikincil veritabanındaki IO ve ikincisi binlog'u okumak ve her slave'e aktarmak için master üzerindeki IO tarafından sınırlanır.

MySQL çoğaltma artar sorgu kapasitesi okumak ama yok IO en hem master üzerindeki binlog temizlenip edilebilir hızda işlenir sorgu yazma performansı, ve köle artırmak


3

MySQL Çoğaltma hızlı çalıştırmak mümkün olacak daha (köle verileri almak için oldukça hızlı UPDATEyöneticisinde ve başka pencereye geçiş bir çalıştırmak için SELECT, köle üzerinde ise(ve yalnızca) ağ bağlantılarının hepsi çalışıyorsa ve her şey yolundaysa. Herhangi bir DSL sınıfı bağlantı, normal küçük sorgularınızın genel durumu için iyi olmalıdır, ancak büyük ekleme / güncelleme sorgularının kopyalanması biraz zaman alabilir ve bir çoğaltma doldurması durumunda yeniden senkronizasyon gerçekleştirilebilir (ve MySQL, maalesef) biraz zaman alacaktır (tüm veritabanınızı master'dan tekrar kopyalamak). MySQL'inizi LVM üzerine koymak gibi, yeniden senkronizasyonun efendiniz üzerindeki etkisini sınırlamak için hileler vardır, böylece çok hızlı bir kilit / anlık görüntü yapabilir ve anlık görüntü içeriğini köle ile yeniden senkronize edebilirsiniz, ancak sonuçta bir resync emilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.