CodeGym /Kurslar /SQL SELF /Müqayisəli təhlil: EXPLAIN ANALYZE

Müqayisəli təhlil: EXPLAIN ANALYZEpg_stat_statements

SQL SELF
Səviyyə , Dərs
Mövcuddur

Bu mərhələdə səndə belə bir sual yarana bilər: niyə analiz üçün iki fərqli alət var? Hansı daha çox istifadə olunur: EXPLAIN ANALYZE yoxsa pg_stat_statements? Gəlin bu iki yanaşmanı, onların güclü və zəif tərəflərini, eləcə də hər birinin harada və nə vaxt istifadə olunduğunu aydınlaşdıraq.

Alətlərin həll etdiyi məsələlər

EXPLAIN ANALYZE: bir konkret sorğunu dərin analiz etmək üçün alətdir. Əgər maraqlanırsan ki, PostgreSQL sorğunu necə icra edir, hansı node-lardan istifadə olunur, neçə sətr emal olunur və hər bir əməliyyat nə qədər vaxt aparır — bu sənin seçimindir. Bu, belə bir suala cavab verir: "Niyə mənim konkret sorğum ləng işləyir?"

pg_stat_statements: daha yüksək səviyyədə monitorinq üçün alətdir, bazada icra olunan bütün sorğuların performansı barədə info verir. Əgər ümumi performans mənzərəsini görmək istəyirsənsə: "Bazamda ən ləng sorğular hansılardır?" və ya "Hansı sorğular serverə ən çox yük verir?" — bu sənin seçimindir.

EXPLAIN ANALYZE nə vaxt istifadə olunur

EXPLAIN ANALYZE — konkret sorğunun necə icra olunduğunu başa düşmək üçün debug alətindir. Onu aşağıdakı hallarda istifadə et:

Sorğunun nöqtəvi optimallaşdırılması Əgər app-ində hansısa səhifənin sonsuz yükləndiyindən şikayət gəlibsə, ilk növbədə həmin problemi yaradan sorğunu tapırsan və EXPLAIN ANALYZE tətbiq edirsən. Bu, sənə sorğunun icra planını və real metrikaları — məsələn, icra vaxtı və emal olunan sətr sayı — göstərəcək.

Düzgün index seçimi Yeni index yaradırsansa və ya mövcud index-i dəyişirsənsə, EXPLAIN ANALYZE ilə bax ki, PostgreSQL bu index-i istifadə edir, ya yox. Əgər yoxdursa, deməli, yaratdığın index sorğuları optimallaşdırmır.

Çətin sorğuların debug-u Əgər çoxlu JOINWHERE olan mürəkkəb sorğu yazırsansa, EXPLAIN ANALYZE ilə faktiki icra planını analiz et və bottleneck-ləri tap, məsələn, lazımsız ardıcıl scan-lar (salam, Seq Scan).

Nümunə: EXPLAIN ANALYZE ilə sorğunun optimallaşdırılması

-- Ləng işləyən sorğu
SELECT *
FROM students
WHERE name = 'Alice';

-- İcra planını analiz edirik
EXPLAIN ANALYZE
SELECT *
FROM students
WHERE name = 'Alice';

Əgər görürsənsə ki, Seq Scan istifadə olunur, yəqin ki, index yaratmağı unutmusan:

-- name sütununda index yaradırıq
CREATE INDEX idx_students_name ON students(name);

-- Yenidən yoxlayırıq
EXPLAIN ANALYZE
SELECT *
FROM students
WHERE name = 'Alice';

pg_stat_statements nə vaxt istifadə olunur

Bu alət bütün sistemin performansını analiz etmək üçün əvəzolunmazdır. Onu aşağıdakı hallarda istifadə et:

Production-da monitorinq pg_stat_statements müəyyən zaman aralığında sorğuların icra statistikalarını göstərir. total_time sütunu sayəsində ən ləng sorğuları asanlıqla tapa bilərsən — bu sütun hər bir sorğunun ümumi icra vaxtını göstərir.

"Ağır" sorğuların tapılması Bazanda ən çox yük verən sorğuları tapmaq istəyirsən? Sorğuları yaddaşdan oxuma sayı (shared_blks_hit) və ya emal olunan sətr sayı (rows) üzrə sırala.

Çox icra olunan sorğuların aşkarlanması Bəzən təkcə uzun çəkən sorğu yox, tez-tez icra olunan sorğular da problem yaradır. Məsələn, hansısa sorğu dəqiqədə 100 dəfə işləyirsə, hətta kiçik optimallaşdırma belə server yükünü ciddi azalda bilər.

Nümunə: pg_stat_statements ilə ləng sorğuların tapılması

-- Sorğuların statistikası
SELECT query,
       calls,
       total_time,
       rows
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 5;

Bu sorğu ən çox vaxt aparan top-5 sorğunu göstərəcək.

Yanaşmaların müqayisəsi: fərq nədədir?

Kriteriya EXPLAIN ANALYZE pg_stat_statements
Analiz fokus Bir konkret sorğu Bütün sorğuların qlobal monitorinqi
Detallılıq səviyyəsi Planın hər node-u üzrə faktiki məlumatlar Hər sorğu üzrə ümumi statistika
Kontekst Development zamanı istifadə olunur Production-da istifadə olunur
İcra tələbi Sorğunu icra edir və vaxtını ölçür Sorğuları icra etmir, sadəcə məlumatları toplayır
Quraşdırma asanlığı Quraşdırma tələb etmir Extension-un quraşdırılması lazımdır
Resurs istifadəsi Anlıq ölçmə Daimi statistika yığımı, yükdən asılıdır

Hər iki aləti birlikdə istifadə edirik

Proqramlaşdırmada hər şeydə olduğu kimi, bütün problemləri həll edən sehrli düymə yoxdur. Ən yaxşı yanaşma — hər iki aləti birlikdə istifadə etməkdir. Məsələn:

  1. pg_stat_statements ilə sistemində ən ləng və ya ən tez-tez işləyən sorğuları tap.

  2. Sonra həmin sorğuları EXPLAIN ANALYZE ilə analiz et və problemli yerləri başa düş.

Praktik nümunə: kompleks yanaşma

-- Addım 1: Ən ləng sorğunu tap
SELECT query, total_time, calls
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 1;

-- Addım 2: Bu sorğunu analiz et
EXPLAIN ANALYZE
<əvvəlki addımdan sorğunu kopyala>;

İstifadədə tipik səhvlər

EXPLAIN ANALYZEpg_stat_statements ilə işləyərkən yeni başlayanlar bir neçə səhv edir:

  1. Məlumatların aktuallığını unutmaq. Əgər boş cədvəldə sorğunu analiz edirsənsə, EXPLAIN ANALYZE nəticəsi yanıltıcı ola bilər. Test bazanın real məlumat həcmini əks etdirdiyinə əmin ol.

  2. Monitorinqin resurs tələbini nəzərə almamaq. Production serverdə pg_stat_statements extension-u aktivdirsə, onu optimal qur ki, artıq yük yaratmasın.

  3. Teorik planı faktiki planla səhv salmaq. Sadə EXPLAIN yalnız teorik plan verir. Real məlumat üçün EXPLAIN ANALYZE istifadə et.

İndi artıq ləng sorğularla mübarizə aparmaqla kifayətlənməyib, onların yaranmasının qarşısını almaq üçün də lazım olan bütün biliklər səndə var. PostgreSQL güclü alətlər verir və onları düzgün birləşdirmək hətta yüklü sistemlərdə də optimal performans əldə etməyə imkan verir.

1
Sorğu/viktorina
, səviyyə, dərs
Əlçatan deyil
Sorguların optimallaşdırılması
Sorguların optimallaşdırılması
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION