Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, yüksek CPU kullanımının kök nedeninin nasıl tanımlandığı açıklanır. Ayrıca PostgreSQL için Azure Veritabanı'nı kullanırken CPU kullanımını denetlemek için olası düzeltme eylemleri sağlar.
Bu makalede şunları öğrenebilirsiniz:
- Kök nedenleri belirlemek ve azaltmak için öneriler almak için sorun giderme kılavuzları hakkında.
- Azure Ölçümleri, sorgu deposu ve pg_stat_statements gibi yüksek CPU kullanımını belirleme araçları hakkında.
- Uzun süre çalışan sorgular ve toplam bağlantılar gibi kök nedenleri belirleme.
- EXPLAIN ANALYZE, bağlantı havuzu oluşturma ve vakum tablolarını kullanarak yüksek CPU kullanımını çözümleme.
Sorun giderme kılavuzları
Sorun giderme kılavuzlarını kullanarak yüksek CPU senaryosunun olası kök nedenini belirleyebilir ve bulunan sorunu azaltmak için önerileri okuyabilirsiniz.
Sorun giderme kılavuzlarını ayarlamayı ve kullanmayı öğrenmek için kurulum sorun giderme kılavuzlarını izleyin.
Yüksek CPU kullanımını belirleme araçları
Yüksek CPU kullanımını belirlemek için aşağıdaki araç listesini kullanmayı göz önünde bulundurun.
Azure Ölçümleri
Azure Ölçümleri, belirli bir dönem için CPU kullanımını denetlemek için iyi bir başlangıç noktasıdır. Ölçümler, CPU kullanımının yüksek olduğu dönemde kullanılan kaynaklar hakkında bilgi sağlar. İş yükünün yüksek CPU'ya neden olduğu zamanları bulmak için Yazma IOP'leri, Okuma IOP'leri, Okuma Aktarım Hızı Baytları/Sn ve Yazma Aktarım Hızı Bayt/Sn grafiklerini CPU yüzdesiyle karşılaştırın.
Proaktif izleme için ölçümler üzerinde uyarılar yapılandırabilirsiniz. Adım adım yönergeler için bkz . Azure Ölçümleri.
Sorgu deposu
Sorgu deposu sorguların geçmişini ve çalışma zamanı istatistiklerini otomatik olarak yakalar ve bunları gözden geçirmeniz için saklar. Zamansal kullanım desenlerini görebilmeniz için verileri zamana göre dilimler. Tüm kullanıcılar, veritabanları ve sorgular için veriler, PostgreSQL için Azure Veritabanı esnek sunucu örneğinde adlı azure_sys bir veritabanında depolanır.
Sorgu deposu, bekleme olayı bilgilerini sorgu çalışma zamanı istatistikleriyle ilişkilendirebilir. sorgu deposunu, ilgilendiğiniz süre boyunca yüksek CPU tüketimine sahip sorguları tanımlamak için kullanın.
Daha fazla bilgi için bkz . sorgu deposu.
pg_stat_statements
Uzantı, pg_stat_statements sunucuda zaman tüketen sorguları tanımlamaya yardımcı olur. Bu uzantı hakkında daha fazla bilgi için belgelerine bakın.
Ortalama veya ortalama yürütme süresi
Postgres 13 ve üzeri sürümlerde, ortalama veya ortalama yürütme süresine göre ilk beş SQL deyimini görüntülemek için aşağıdaki deyimi kullanın:
SELECT userid::regrole, dbid, query, mean_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 5;
Toplam yürütme süresi
Toplam yürütme süresine göre ilk beş SQL deyimini görüntülemek için aşağıdaki deyimleri yürütebilirsiniz.
Postgres sürüm 13 ve üzeri için, toplam yürütme süresine göre ilk beş SQL deyimini görüntülemek için aşağıdaki deyimi kullanın:
SELECT userid::regrole, dbid, query
FROM pg_stat_statements
ORDER BY total_exec_time
DESC LIMIT 5;
Kök nedenleri tanımlama
CPU tüketim düzeyleri genel olarak yüksekse, aşağıdakiler olası kök nedenler olabilir:
Uzun süre çalışan işlemler
Uzun süre çalışan işlemler, yüksek CPU kullanımına neden olabilecek CPU kaynaklarını kullanabilir.
Aşağıdaki sorgu, en uzun süre çalışan bağlantıların belirlenmesine yardımcı olur:
SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() AND state IN ('idle in transaction', 'active')
ORDER BY duration DESC;
Toplam bağlantı sayısı ve duruma göre bağlantı sayısı
Veritabanına çok sayıda bağlantı olması cpu ve bellek kullanımının artmasına da neden olabilir.
Aşağıdaki sorgu, duruma göre bağlantı sayısı hakkında bilgi verir:
SELECT state, count(*)
FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
GROUP BY state
ORDER BY state ASC;
Yüksek CPU kullanımını çözümleme
EXPLAIN ANALYZE kullanın, yerleşik PgBouncer bağlantı havuzu oluşturucuyu kullanmayı düşünün ve yüksek CPU kullanımını çözmek için uzun süre çalışan işlemleri sonlandırın.
EXPLAIN ANALYZE kullanma
Daha fazla CPU tüketen sorguları öğrendiğiniz zaman, daha fazla araştırmak ve ayarlamak için EXPLAIN ANALYZE kullanın.
EXPLAIN ANALYZE komutu hakkında daha fazla bilgi için belgelerini gözden geçirin.
PgBouncer, yerleşik bağlantı havuzu oluşturucu
Çok sayıda kısa süreli bağlantının veya hayatının büyük bir bölümünde boşta kalan birçok bağlantının olduğu durumlarda, PgBouncer gibi bir bağlantı havuzu oluşturucu kullanmayı göz önünde bulundurun.
PgBouncer hakkında daha fazla bilgi için bkz . PostgreSQL ile bağlantı havuzu oluşturucu ve bağlantı işleme en iyi yöntemleri
PostgreSQL için Azure Veritabanı, yerleşik bir bağlantı havuzu çözümü olarak PgBouncer sunar. Daha fazla bilgi için bkz . PgBouncer.
Uzun süre çalışan işlemleri sonlandırma
Bir seçenek olarak uzun süre çalışan bir işlemi öldürmeyi düşünebilirsiniz.
Oturumun PID'sini sonlandırmak için aşağıdaki sorguyu kullanarak piD'sini bulmanız gerekir:
SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() AND state IN ('idle in transaction', 'active')
ORDER BY duration DESC;
Ayrıca, (kullanıcı adı), (veritabanı adı) usename gibi datname diğer özelliklere göre de filtreleyebilirsiniz.
Oturumun PID'sini aldıktan sonra, aşağıdaki sorguyu kullanarak oturumu sonlandırabilirsiniz:
SELECT pg_terminate_backend(pid);
Vakum ve tablo istatistiklerini izleme
Tablo istatistiklerinin güncel tutulması sorgu performansının geliştirilmesine yardımcı olur. Düzenli otomatik vakum gerçekleştirilip gerçekleştirilmediğini izleyin.
Aşağıdaki sorgu, vakum gerektiren tabloları tanımlamaya yardımcı olur:
SELECT schemaname,relname,n_dead_tup,n_live_tup,last_vacuum,last_analyze, last_autovacuum,last_autoanalyze
FROM pg_stat_all_tables
WHERE n_live_tup > 0;
last_autovacuum ve last_autoanalyze sütunları tablonun en son otomatik olarak vakumlandığı veya çözümlendiği tarih ve saati verir. Tablolar düzenli aralıklarla vakumlanmadıysa otomatik vakum ayarlama adımlarını izleyin.
Otomatik vakum sorunlarını giderme ve ayarlama hakkında daha fazla bilgi için bkz . Otomatik Vakum Sorunlarını Giderme.
Kısa vadeli bir çözüm, yavaş sorguların görüldüğü tabloların el ile vakum analizini yapmaktır:
VACUUM ANALYZE <table>;
İlgili içerik
- PostgreSQL için Azure Veritabanı'nda yüksek bellek kullanımı sorunlarını giderme.
- PostgreSQL için Azure Veritabanı'nda yüksek IOPS kullanımı sorunlarını giderme.
- PostgreSQL için Azure Veritabanı'nda yavaş çalışan sorguların sorunlarını giderin ve belirleyin.
- PostgreSQL için Azure Veritabanı'nda sunucu parametreleri.
- PostgreSQL için Azure Veritabanı'nda otomatik vakum ayarlama.