Performans düşüşünü görmeye başlamadığınız sürece manuel olarak vakumlamanız gerektiğini düşünmüyorum. Ancak, vakum ve otovakum ayarlarınızı gözden geçirmenizi ve ihtiyaçlarınıza göre değiştirmenizi şiddetle tavsiye ederim
Mevcut ayarlarınızı görmek için şu sorguyu çalıştırın:
SELECT *
FROM pg_settings
WHERE name LIKE '%vacuum%'
Alanların çoğu kendiliğinden açıklayıcıdır, ancak işte bunlarla ilgili belgeler:
https://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html
Amacınız çöpü tutarlı bir şekilde temizlemek için otovakümü yapılandırmak olmalı, ancak otovakümü sürekli çalıştırmayın.
En önemli ayarlar:
- autovacuum_vacuum_scale_factor - bir temizleme tetiklenmeden önce ölen kapların yüzdesini belirler. Varsayılan değer = 0.2
- autovacuum_vacuum_threshold - temizleme tetiklenmeden önce minimum ölü tuple sayısı. Varsayılan değer = 50
Eşik, küçük tablolar için temizleme işleminin çok sık tetiklenmesini önlemeye yardımcı olur.
Çok büyük tablolarınız yoksa, varsayılan ayarlar iyi çalışır. Basitçe söylemek gerekirse, 100GB alan bir masanız varsa, otomatik vakum tetiklenmeden önce 20GB çöp toplayacaksınız. Bu nedenle, genellikle ölçek faktörünü düşük ayarlamanızı öneririm. Kendiniz için ne kadar düşük bir karar vermelisiniz. Mevcut projemde 0.05 kullanıyorum
Eşikler de arttırılabilir. Birçok uygulamada sık sık güncellenen birkaç tablo vardır ve 50 tuple o kadar da değildir. Bunu 1000'e çıkarmak herhangi bir soruna yol açmamalıdır, ancak elbette kendi vakanızı düşünmelisiniz
Ayrıca, otomatik vakumun ince ayarını yapabilir ve bazı tablolarınız için farklı ayarlara sahip olabilirsiniz.
ALTER TABLE your_table SET (autovacuum_vacuum_scale_factor = 0.05);
Scale_factor ve eşikleri yapılandırırsanız iyi olmalısınız. Ayrıca autovacuum_vacuum_cost_limit
varsayılan vacuum_cost_limit
olarak 200'e ayarlanmış olan bu değeri artırabilirsiniz. Bu, tüm kaynakları tüketmesine izin vermeyen ve uygulamanızın vakumlama işlemi sırasında bile verilerle çalışmasına izin veren çok önemli bir vakum özelliğidir. , ancak varsayılan değer çok düşük. 1000'e yükseltmek önemli bir gecikmeye yol açmamalı, ancak vakum işleminin çok daha hızlı bitmesine izin verecektir
Tabii ki, vakumu manuel olarak da çalıştırabilirsiniz. En basit durumda, DB'nize sıkça erişilmediğinde her gece tam bir temizlik yapacak basit bir cron işine sahip olabilirsiniz.
Umarım yardımcı olur!