Postgresql 8.3: Sorgu başına kaynak tüketimini sınırlayın


12

Ubuntu 8.04 Hardy jeo-uzamsal verileri depolamak için PostgreSQL 8.3 + PostGIS 1.3 kullanıyorum .

PostGIS'in bu özel sürümü, buffer()çok karmaşık segmentlerde hesaplanırken bir hataya neden olur, bu da sorgunun tüm makine sıkışana kadar daha fazla bellek almasına neden olur.

Ben bir PostgreSQL mekanizması arıyor:

  • Belirli bir sorgu tarafından kullanılan bellek tüketimini (ve belki de diğer kaynakları) sınırlayın.
  • Yürütme süresi belirli bir eşiği aşan sorguları otomatik olarak durdurun.

Herhangi bir fikir?


Neden sizi ısırmış bir hata içeren bir sürümü kullanmaya devam ediyorsunuz? Düzeltilen bir sürüm kullanın ve sorununuz gitti.
Frank Heikens

Doğru, ancak bazen kodumuzda hatalar var veya sadece toooooooo'yu uzun süren sorgular var. Günlük hata mesajı ile ölmelerini istiyorum.
Adam Matan

Yanıtlar:


9

Bellek tüketimini sınırlamak için ana yapılandırma parametresi work_mem. Bu, sorgu başına değil, işlem başına uygulandığından, N miktarda bellek harcamak istiyorsanız, bunu N olarak ayarlayamazsınız, ancak istenen sonucu elde etmek için ince ayar yapmanız ve biraz ayarlamanız gerekir.

Ancak, sunucu kodunda veya uzantılarında hatalar ve diğer bellek sızıntıları olması durumunda bu yardımcı olmaz. Bunu, denetlenen işleme özgü kaynak sınırları ile denetleyebilirsiniz ulimit. Ancak sınıra ulaşırsanız ve bellek ayırma başarısız olursa, ne olmak istersiniz? Muhtemelen çok iyi davranmayacak. Bu hataları daha iyi düzeltin veya farklı bir sürüm kullanın.

Yürütme süresi bir eşik değeri geçen durdurma sorguları `deyim_timeout 'parametresini kullanır, ör.

SET statement_timeout TO '10min';

Harika. Tam da aradığım şey.
Adam Matan

2

Postgres Wiki'ye bir göz atın :

PostgreSQL'in belirli bir kullanıcı, sorgu veya veritabanının kullandığı kaynakları sınırlayacak veya buna karşılık olarak bir kullanıcı / sorgu / veritabanı diğerlerinden daha fazla kaynak alacak şekilde öncelikleri belirleyecek hiçbir olanağı yoktur. Sınırlı önceliklendirmeyi mümkün kılmak için işletim sistemi tesislerini kullanmak gerekir.

Performans ayarlarını kullanıcı başına veya veritabanı başına ayarlayabilirsiniz ancak belirli sorguların ne zaman iptal edileceğini ayarlayamazsınız .


+1 Kümenin tümünün tüketebileceği bellek miktarına maksimum değer ayarlamaya ne dersiniz?
Adam Matan
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.