Yanıtlar:
pg_stat_activitySistem tablosunu kullanarak belirli bir Postgres arka uç kimliğini sistem işlem kimliğiyle eşleştirebilirsiniz .
SELECT pid, datname, usename, query FROM pg_stat_activity;iyi bir başlangıç noktası olabilir.
Hangi sorguların çalıştığını öğrendikten sonra daha fazla araştırma yapabilirsiniz ( EXPLAIN/ EXPLAIN ANALYZE; kilitleri kontrol et, vb.).
WHEREcümle ile izole edebilirsiniz , ancak çok sayıda PID'niz yoksa Tam çıktıyla arama yapmak kolaydır. Postgres kılavuz çıkmak ne hakkında daha fazla ayrıntı vardırpg_stat_activity , hem de diğer istatistik-toplayıcı tabloları (Sorununuz varsa size yardımcı olabilecek değil bir kullanıcı sorgu).
Ben de aynı sorunu yaşıyordum. Postgresql, AWS RDS üzerine kuruludur ve örneği arttırdıktan sonra bile% 100 cpu kullanımına sahipti. Burada gösterilen yöntemle hata ayıkladım ve bu yöntemlerden biri benim için çalıştı.
En uzun süre çalışan sorguyu kontrol ettim ve belirli sorguların sıkışıp kaldığını ve 3-4 saatten uzun süredir çalıştığını gördüm. Sorgunun ne kadar süre çalıştığını kontrol etmek için aşağıdaki komutu çalıştırın:
SELECT max(now() - xact_start) FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active');
Bu bir saatten fazla ise, sorun bu. Uzun süre çalışan bağlantıyı kesin ve uygulama tarafından bağlantının maksimum yaşını sınırlayın.
Bu gerçekten tüm bu CPU kullanan postacıysa, muhtemelen çok yüksek olması nedeniyle çekişme sorunlarını kilitlemeniz olasıdır max_connections. max_connectionsBu durumda, bir bağlantı havuzu indirmeyi ve kullanmayı düşünün .
Aksi takdirde: Detaylar lütfen. top -b -n 1Bir başlangıç için tam çıkış .
postgressISpostgresve sadece elle kopyaladık.