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 JOIN və WHERE 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:
pg_stat_statementsilə sistemində ən ləng və ya ən tez-tez işləyən sorğuları tap.Sonra həmin sorğuları
EXPLAIN ANALYZEilə 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 ANALYZE və pg_stat_statements ilə işləyərkən yeni başlayanlar bir neçə səhv edir:
Məlumatların aktuallığını unutmaq. Əgər boş cədvəldə sorğunu analiz edirsənsə,
EXPLAIN ANALYZEnəticəsi yanıltıcı ola bilər. Test bazanın real məlumat həcmini əks etdirdiyinə əmin ol.Monitorinqin resurs tələbini nəzərə almamaq. Production serverdə
pg_stat_statementsextension-u aktivdirsə, onu optimal qur ki, artıq yük yaratmasın.Teorik planı faktiki planla səhv salmaq. Sadə
EXPLAINyalnız teorik plan verir. Real məlumat üçünEXPLAIN ANALYZEistifadə 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.
GO TO FULL VERSION