Postgres EXPLAIN ANALYZE Komutu

Postgres Explain Analyze Komutu



Veritabanlarıyla ilgili olarak, performans yüksek önceliğe sahip bir özelliktir. Bu, uygulamaların verileri maksimum hız ve verimlilikle sorgulayabilmesini ve yazabilmesini sağlar.

Veritabanı yöneticileri olarak, veritabanı performansını artırma araçlarına ve yöntemlerine takıntılı olmamız gerekir.

PostgreSQL'de, belirli bir veritabanı sorgusunun yürütme planını ve performansını analiz etmemizi sağlayan EXPLAIN ANALYZE komutuna erişimimiz var. Komut, veritabanı motorunun sorguyu nasıl işlediği hakkında ayrıntılı bilgi döndürür. Bu, gerçekleştirilen işlemlerin sırasını, tahmini sorgu maliyetlerini, yürütme zamanlamasını ve daha fazlasını içerir.







Daha sonra bu bilgileri, veritabanı sorgularını belirlemek ve olası performans darboğazlarını belirlemek ve düzeltmek için kullanabiliriz.



Bu öğretici, sorgu performansını görüntülemek ve optimize etmek için PostgreSQL'de EXPLAIN ANALYZE komutunun nasıl kullanılacağını tartışır.



PostgreSQL ANALİZİ AÇIKLAYIN

Komut oldukça basittir. Öncelikle EXPLAIN ANALYZE komutunu analiz etmek istediğimiz sorgunun başına koymamız gerekiyor.





Komut sözdizimi aşağıdaki gibidir:

ANALİZİ AÇIKLAYIN

Komutu yürüttüğünüzde, PostgreSQL sağlanan sorgu hakkında ayrıntılı bir çıktı döndürür.



EXPLAIN ANALYZE Sorgu Çıktısını Anlama

Belirtildiği gibi, EXPLAIN ANALYZE komutunu çalıştırdığımızda, PostgreSQL sorgu planının ve yürütme istatistiklerinin ayrıntılı bir raporunu oluşturur.

Çıktı, yararlı bilgiler içeren bir dizi sütundan oluşur. Ortaya çıkan sütunlar, ilgili anlamlarıyla gösterildiği gibidir:

SORGU PLANI – Bu sütun, belirtilen sorgunun yürütme planını görüntüler. Yürütme planı, veritabanı motorunun sorguyu başarıyla tamamlamak için gerçekleştirdiği bir dizi işlem anlamına gelir.

PLAN – İkinci sütun PLAN sütunudur. Bu, yürütme planındaki her işlemin veya adımın metinsel bir temsilini içerir. Yine, her işlem, işlem hiyerarşisini belirtmek için girintilidir.

TOPLAM TUTAR – Toplam maliyet sütunu, sorgunun tahmini toplam maliyetini temsil eder. Maliyet, veritabanı sorgu planlayıcısının en uygun yürütme planını belirlemek için kullandığı göreli bir ölçüyü ifade eder.

GERÇEK SATIRLAR – Bu sütun, sorgu yürütmedeki her adımda işlenen satırların tam sayısını gösterir.

ASIL ZAMAN – Bu sütun, hem işlemin yürütme süresini hem de kaynaklar için harcanan zamanı içeren her bir işlemin aldığı gerçek süreyi gösterir.

PLANLAMA ZAMANI – Bu sütun, sorgu planlayıcının bir yürütme planı oluşturmak için harcadığı süreyi gösterir. Bu, sorgu optimizasyonunun ve plan oluşturmanın toplam süresini içerir.

UYGULAMA VAKTİ – Bu sütun, sorguyu yürütmek için toplam süreyi gösterir. Buna planlama ve sorgu yürütme süresi için harcanan süre de dahildir.

PostgreSQL EXPLAIN ANALYZE Örneği

EXPLAIN ANALYZE deyimini kullanmanın bazı temel örneklerine bakalım.

Örnek 1: İfade Seçin
PostgreSQL'de basit bir select deyiminin yürütülmesini göstermek için EXPLAIN ANALYZE deyimini kullanalım.

ANALİZİ AÇIKLAYIN wp_users'dan * seçin burada id > 3;

Önceki ifadeyi çalıştırdığımızda, aşağıdaki gibi bir çıktı almalıyız:

SORGU PLANI
-------------------------------------------------- -----------------
wp_users üzerinde Sıralı Tarama  (maliyet=0,00..10,38 satır=10 genişlik=2256) (gerçek zaman=0,009..0,010 satır=7 döngü=1)
Filtrele: (kimlik > 3)
Filtreyle Kaldırılan Satır Sayısı: 3
Planlama Süresi: 0.995 ms
Yürütme Süresi: 0,021 ms
(5 sıra)

Bu durumda, Sorgu planı bölümünün, sorgunun wp_users tablosunda sıralı bir tarama gerçekleştirdiğini gösterdiğini görebiliriz. Filtre satırı, elde edilen satırları filtrelemek için kullanılan koşulu belirtir.

Ardından, filtre koşulu tarafından elenen satır sayısını gösteren “Filtre Tarafından Kaldırılan Satırlar” ı görüyoruz.

Son olarak yürütme süresi, sorgunun toplam yürütme süresini gösterir. Bu durumda, sorgu 0,021 ms sürer.

Örnek 2: Bir Birleştirmeyi Analiz Etme
SQL birleştirme içeren daha karmaşık bir sorguyu ele alalım. Bunun için Pagila örnek veritabanını kullanıyoruz. Gösterim amacıyla örnek veri tabanını indirip makinenize kurabilirsiniz.

Aşağıda gösterildiği gibi basit bir birleştirme çalıştırabiliriz:

açıkla analiz et SELECT f.title, c.name
f filminden
KATIL film_category fc AÇIK f.film_id = fc.film_id
JOIN kategorisi c AÇIK fc.category_id = c.category_id;

Verilen sorguyu çalıştırdığımızda, çıktıyı aşağıdaki gibi görmeliyiz:

Aşağıdaki sorgu planını inceleyelim:

  1. İç İçe Döngü – Bu, birleştirmenin iç içe bir döngü birleştirme stratejisi kullandığını gösterir.
  2. Hash Join – Bu işlem, bir Hash birleştirme algoritması kullanarak film_category ve film tablolarını birleştirir. Bu işlemin maliyeti 77.50 ve tahmini 1000 satırdır. Ancak, bu işlem için harcanan gerçek süre 0,254 ila 0,439 milisaniyedir ve 1000 satır alır.
  3. Hash Cond – Bu, birleştirme koşulunun, film tablolarındaki film_id sütunları ve film_category sütunlarıyla eşleştirmek için bir Hash birleştirme kullandığını gösterir.
  4. film_category'de Sıralı Tarama – Bu işlem, film_category tablosunda 16,00 maliyet ve tahmini 1000 satırlık sıralı bir tarama gerçekleştirir. Bu işlem için harcanan gerçek süre 0,008 ila 0,056 milisaniyedir ve 1000 satır alır.
  5. Filmde Seq Scan – Sorgu, bu işlemde ortaya çıkan tahmini ve fiili maliyetler ve satırlarla birlikte film tablosunda sıralı bir tarama gerçekleştirir.
  6. Memoize – Bu işlem, sonraki kullanım için film_category ve film tabloları arasındaki birleştirmenin sonuçlarını önbelleğe alır.
  7. Önbellek Anahtarı – Bu, not alma için kullanılan önbellek anahtarının film_category'deki Category_id sütununu temel aldığını gösterir.
  8. Önbellek Modu – Bu, sorgunun mantıksal önbellek modunu kullandığını gösterir.
  9. İsabetler, Iskalamalar, Tahliyeler, Taşmalar – Üç satır, yürütme sırasında önbellek, isabet, ıskalama, tahliye ve taşma sayısı hakkında istatistikler sağlar. Bu blok, sorgu yürütme sırasındaki bellek kullanımını da içerir.
  10. Category_pkey kullanarak Dizin Taraması – Bu, birincil anahtar dizinini kullanarak kategori tablosunda bir dizin taraması gerçekleştiren işlemi gösterir.
  11. Dizin Koşulu – Bu, dizin taramasının kategori tablosundaki Category_id sütunuyla eşleşen koşulu temel aldığını gösterir.
  12. Planlama Süresi – Bu satır, 3.005 milisaniye olan sorgu planlaması için geçen süreyi gösterir.
  13. Yürütme Süresi – Son olarak, bu satır, sorgunun 0,745 milisaniye olan toplam yürütme süresini gösterir.

İşte aldın! PostgreSQL'de basit bir birleştirmenin yürütülmesi hakkında ayrıntılı bilgi.

Çözüm

PostgreSQL'de EXPLAIN ANALYZE deyiminin gücünü ve kullanımını keşfettiniz. EXPLAIN ANALYZE ifadesi, sorgu analizi ve optimizasyonu için güçlü bir araçtır. Verimli ve daha az kaynak yoğun sorgular oluşturmak için bu aracı kullanın.