Sorgu yaşam döngüsü ve planlayıcı

PostgreSQL'de Sorgu Performansını İyileştirme

Amy McCarty

Instructor

Temel sorgu yaşam döngüsü

Sistem Ön uç adımları Arka uç işlemleri
1 Parser Sorguyu veritabanına gönderir Söz dizimini kontrol eder. Sistemdeki kurallara göre SQL’i daha makine dostu biçime çevirir.
2 Planner & Optimizer Sorgu görevlerini değerlendirir ve iyileştirir Veritabanı istatistiklerini kullanarak sorgu planı oluşturur. Maliyetleri hesaplar ve en iyi planı seçer.
3 Executor Sorgu sonuçlarını döndürür Sorgu planını izleyerek sorguyu çalıştırır.
PostgreSQL'de Sorgu Performansını İyileştirme

Sorgu planlayıcı ve iyileştirici

SQL yapısındaki değişikliklere duyarlı

  • Plan ağaçları üretir
    • Adımlara karşılık gelen düğümler
    • EXPLAIN ile görselleştirin
  • Her ağacın maliyetini tahmin eder
    • pg_tables istatistikleri
    • Zaman temelli optimizasyon
1 Plan tree: https://www.postgresql.org/docs/current/querytree.html
PostgreSQL'de Sorgu Performansını İyileştirme

pg_tables istatistikleri

SELECT * FROM pg_class
WHERE relname = 'mytable'
-- örnek çıktı sütunları
| relname | relhasindex |
SELECT * FROM pg_stats
WHERE tablename = 'mytable'
-- örnek çıktı sütunları
null_frac | avg_width | n_distinct | 
  • Sütun indeksleri
  • Null değer sayımı
  • Sütun genişliği
  • Farklı değer sayısı
PostgreSQL'de Sorgu Performansını İyileştirme

EXPLAIN

 

  • Sorgu planına bakış
  • Adımlar ve maliyet tahminleri
    • Sorguyu çalıştırmaz

 

  • Cheeses tablosunda sıralı tarama
  • Maliyet ve boyut tahminleri

 

EXPLAIN
SELECT * FROM cheeses

 

Seq Scan on cheeses 
(cost=0.00..10.50 rows=5725 width=296)
PostgreSQL'de Sorgu Performansını İyileştirme

EXPLAIN: Tarama

 

  • Sorgu planı adımı
  • Satır döndürür

 

Seq Scan on cheeses (cost=0.00..10.50 rows=5725 width=296)

 

 

 

 

  • Seq Scan: tablodaki tüm satırların taranması
PostgreSQL'de Sorgu Performansını İyileştirme

EXPLAIN: Maliyet

 

  • Boyutsuz
  • Aynı çıktılı yapıları karşılaştırın
    • Farklı çıktılı sorguları karşılaştırmayın

 

Seq Scan on cheeses (cost=0.00..10.50 rows=5725 width=296)

 

 

 

 

 

  • 0.00.. : başlatma süresi
  • ..10.50 : toplam süre

  • toplam süre = başlatma + çalışma süresi

PostgreSQL'de Sorgu Performansını İyileştirme

EXPLAIN: Boyut

 

  • Boyut tahminleri

 

Seq Scan on cheeses (cost=0.00..10.50 rows=5725 width=296)

 

 

 

  • rows: çalışmak için incelenecek satırlar
  • width: satırların bayt genişliği
PostgreSQL'de Sorgu Performansını İyileştirme

WHERE koşulu ile EXPLAIN

EXPLAIN
SELECT * FROM cheeses WHERE species IN ('goat','sheep') 
Seq Scan on cheeses (cost=0.00..378.90 rows=3 width=118)
 -> Filter: (species = ANY ('{"goat","sheep"}'::text[]))
  • Alttan üste
    • Adım 1: Filtre
    • Adım 2: Sıralı tarama
  • WHERE koşulu
    • Taranacak satırları azaltır ve toplam maliyeti artırır
PostgreSQL'de Sorgu Performansını İyileştirme

İndeks ile EXPLAIN

EXPLAIN
SELECT * FROM cheeses WHERE species IN ('goat','sheep') -- index on species column
Bitmap Index Scan using species_idx on cheeses (cost=0.29..12.66 rows=3 width=118)
  Index Cond: (species = ANY ('{"goat","sheep"}'::text[]))
  • Adım 1: Bitmap Index Scan
    • Index Cond tarama adımını açıklar
  • İNDEKS
    • Başlatma maliyeti 0’dan arttı
    • Genel maliyet 379’dan azaldı
PostgreSQL'de Sorgu Performansını İyileştirme

Haydi pratik yapalım!

PostgreSQL'de Sorgu Performansını İyileştirme

Preparing Video For Download...