Yukarıda @ max-malysh'ın mükemmel cevabına bazı güncellenmiş bilgiler ve referanslar ekleyeceğim.
Kısacası, efendide bir şey yaparsanız, köle üzerinde çoğaltılması gerekir. Postgres bunun için WAL kayıtlarını kullanır, bu kayıtlar master üzerinde her kaydedilmiş eylemden sonra slave'e gönderilir. Ardından köle eylemi yürütür ve ikisi yeniden senkronize olur. Birkaç senaryodan birinde, bir WAL eyleminde efendiden gelenlerle köle üzerinde çatışma yaşayabilirsiniz. Çoğunda, köle üzerinde WAL eyleminin değiştirmek istediği şeyle çelişen bir işlem var. Bu durumda, iki seçeneğiniz vardır:
- WAL eyleminin uygulanmasını biraz geciktirerek, slave'in çakışan işlemini bitirmesine izin verin, ardından eylemi uygulayın.
- Slave'deki çakışan sorguyu iptal edin.
# 1 ve iki değerle ilgileniyoruz:
max_standby_archive_delay
- bu, veriler geçerli veri olmayan bir WAL arşivinden okunurken, master ve slave arasındaki uzun bir bağlantı kesilmesinden sonra kullanılan gecikmedir.
max_standby_streaming_delay
- akış çoğaltması yoluyla WAL girdileri alındığında sorguları iptal etmek için kullanılan gecikme.
Genel olarak, sunucunuz yüksek kullanılabilirlikli çoğaltma amaçlıysa, bu sayıları kısa tutmak istersiniz. Bunun için varsayılan ayar 30000
(milisaniye belirtilmemişse milisaniye) yeterlidir. Bununla birlikte, çok uzun süren sorguları olabilen bir arşiv, raporlama veya okuma-çoğaltma gibi bir şey ayarlamak istiyorsanız, iptal edilen sorguları önlemek için bunu daha yüksek bir şeye ayarlamak istersiniz. Yukarıda önerilen 900s
ayar iyi bir başlangıç noktası gibi görünür. -1
İyi bir fikir olarak sonsuz bir değer belirleme konusunda resmi belgelere katılmıyorum - bazı hata kodlarını maskeleyebilir ve birçok soruna neden olabilir.
Uzun süren sorgular ve bu değerlerin daha yüksek ayarlanmasıyla ilgili bir uyarı, WAL eyleminin gecikmesine neden olan uzun süredir devam eden soruna paralel olarak slave üzerinde çalışan diğer sorguların, uzun sorgu tamamlanana kadar eski verileri görmesidir. Geliştiricilerin bunu anlamaları ve aynı anda çalıştırılmaması gereken sorguları serileştirmeleri gerekecektir.
Nasıl max_standby_archive_delay
ve nasıl max_standby_streaming_delay
çalıştığının ve nedeninin tam açıklaması için buraya gidin .