Doküman menüsü

Sürüm 1.8.0-community

Batch İşleme

GoArchive işi batch'lere nasıl böler ve üretim sunucusunu yormamak için hızını nasıl ayarlar.

GoArchive bir tabloyu asla tek işlemde ele almaz. İş batch’lere bölünür ve her batch, bir sonraki başlamadan önce eksiksiz tamamlanır.

Batch döngüsü

Her batch aynı beş adımı izler:

  1. İşin filtresine uyan kök satırları seç.
  2. Tanımlı ilişkileri izleyerek onlara ait tüm satırları keşfet.
  3. Sonucu, üst kayıtlardan başlayarak hedefe kopyala.
  4. Kopyanın kaynakla eşleştiğini doğrula.
  5. Kaynak satırları, alt kayıtlardan başlayarak sil.

İlerleme her batch’in sonunda kaydedilir. Yarıda duran bir çalışma, tamamlanmış batch’ler bırakır; hiçbir zaman yarım bir batch bırakmaz.

Batch boyutu

batch_size, bir batch’in kaç kök satırı kapsayacağını belirler. Aynı değer, o batch içinde kök ve alt tüm tabloların okuma ve yazma birimi olarak da kullanılır.

processing:
  batch_size: 1000

Büyük batch’ler daha az gidiş-geliş ve daha yüksek verim demektir. Küçük batch’ler daha az bellek ve sunucuda daha kısa süren işlemler demektir. Bin makul bir başlangıçtır; gerçek bir çalışmayı gözlemledikten sonra ayarlayın.

dry-run, seçtiğiniz boyutu hedefin sınırlarına karşı denetler ve belirli bir tablo için fazla büyükse size söyler.

Silme boyutu ayrı ayarlanır

Silme, kopyalamadan bağımsız olarak ayarlanır:

processing:
  batch_delete_size: 500

Bu değer her silme ifadesinin kaç satırı kapsayacağını belirler. Düşürmek, daha küçük ve daha sık işlemler üretir; bu da bir seferde oluşan replikasyon trafiğini azaltır.

Hız ayarı

İki bağımsız ayar duraklama ekler ve iki farklı baskıyı hedefler.

processing:
  sleep_seconds: 1           # batch'ler arasında
  delete_sleep_seconds: 0    # silme işlemleri arasında

sleep_seconds batch’ler arasında bekler. Sunuculardaki genel yükü rahat bulduğunuz bir aralıkta tutmak için kullanın.

delete_sleep_seconds bir batch içindeki silme işlemleri arasında bekler. Sınırlayıcı etken kaynak sunucudaki yük değil de değişikliklerin replica’lara ulaşma hızıysa bunu kullanın.

Her ikisi de ondalıklı değer kabul eder; her ikisi de genel olarak veya iş bazında ayarlanabilir.

Replica farkındalığı

Bir replica tanımlandığında GoArchive her batch’ten önce gecikmesini denetler ve eşiğinizi aştığı sürece bekler.

replica:
  enabled: true
  host: replica-db.internal
  user: repl_user
  password: change_me

safety:
  lag_threshold: 10
  check_interval: 5

Replica yetiştiğinde işlem kendiliğinden sürer. Hiçbir şey kaybolmaz, hiçbir şeyi yeniden başlatmak gerekmez.

Çalışan bir işi duraklatmak

Bir iş, durdurulmadan duraklatılabilir. Yapılandırmada bir dosya adı verin:

processing:
  sentinel_file: /var/run/goarchive/pause.flag

Bu dosya var olduğu sürece GoArchive her batch’ten önce bekler ve saniyede bir yeniden denetler. Dosyayı silin, işlem devam eder.

touch /var/run/goarchive/pause.flag   # duraklat
rm /var/run/goarchive/pause.flag      # sürdür

Veritabanının ilgisine başka bir şeyin ihtiyaç duyduğu anlarda işe yarar. Süreç ayakta kalır, yerini korur ve kaldığı noktadan devam eder.