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:
- İşin filtresine uyan kök satırları seç.
- Tanımlı ilişkileri izleyerek onlara ait tüm satırları keşfet.
- Sonucu, üst kayıtlardan başlayarak hedefe kopyala.
- Kopyanın kaynakla eşleştiğini doğrula.
- 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.
