PostgreSQL-də pg_stat_statements genişlənməsi — sorğuların statistikası üçün bir alətdir. Bu, sənə imkan verir görəsən ki, hansı sorğular daha çox işlədilir, hansılar daha çox vaxt aparır və bazanın resursları nə qədər effektiv istifadə olunur. Hər bir sorğunu əl ilə EXPLAIN ilə analiz etmək əvəzinə, biz bazanın performansının ümumi mənzərəsini görə bilirik.
pg_stat_statements-dən istifadə etməyin üstünlükləri:
Real vaxtda monitorinq: hansı sorğuların indi bazanı yüklədiyini görə bilirsən.
Bütün sistemin performans analizi: məlumatlar bütün sorğular üçün əlçatandır, təkcə əl ilə analiz etdiklərin üçün yox.
Yavaş sorğuların tapılması: hansı sorğuların daha çox vaxt apardığını asanlıqla müəyyən edə bilərsən.
Təkrarlanan sorğuların aşkarlanması: populyar sorğular üçün cache optimizasiyası və index əlavə etmək imkanı verir.
pg_stat_statements-in quraşdırılması və sazlanması
İndi sən başa düşdün ki, pg_stat_statements nəyə lazımdır, gəlin addım-addım onu necə quraşdırmaq və sazlamaq lazımdır baxaq.
1. PostgreSQL-in hazır olub-olmadığını yoxlayırıq. Əmin ol ki, sənin PostgreSQL-də pg_stat_statements genişlənməsi dəstəklənir. Bu genişlənmə PostgreSQL 9.2-dən başlayaraq standart paketə daxildir. Genişlənmənin olub-olmadığını yoxlamaq üçün belə et:
SELECT extname FROM pg_extension;
Əgər pg_stat_statements siyahıda yoxdursa, bu o deməkdir ki, admin tərəfindən quraşdırılmayıb.
Quraşdırılmış və aktiv edilmiş genişlənmə belə görünməlidir:
| extname |
|---|
| plpgsql |
| pg_stat_statements |
Biz indi PostgreSQL 17.5 öyrənirik, yəni hər şey qaydasındadır. Amma işə gedəndə heç bir zəmanət yoxdur ki, orda ən yeni server versiyası işləyir. Ola bilər ki, artıq 10 ildir heç kim onu yeniləməyib. Axı proqramçının əsas qaydası nədir? İşləyir — toxunma.
2. Genişlənmənin əlavə olunması.
pg_stat_statements-i aktiv etmək üçün onu PostgreSQL-in preload kitabxanalar siyahısına əlavə etmək lazımdır. Bu, postgresql.conf konfiqurasiya faylında edilir.
Addımlar:
postgresql.conffaylını tap. Adətən bu, PostgreSQL-in data qovluğunda olur.- Onu redaktə üçün aç.
- Aşağıdakı sətri əlavə et və ya dəyiş:
shared_preload_libraries = 'pg_stat_statements'
Niyə bu lazımdır? Çünki pg_stat_statements sistem səviyyəsində sorğuları izlədiyinə görə əvvəlcədən yüklənməlidir.
Dəyişiklikləri yadda saxla və PostgreSQL serverini yenidən başlad ki, dəyişikliklər qüvvəyə minsin. Linux üçün komanda belədir:
sudo systemctl restart postgresql
Əgər sən lokalda işləyirsənsə və ya test edirsənsə, sadə server restart da kifayət edəcək.
3. Bazada genişlənmənin yaradılması. PostgreSQL serveri restart edildikdən sonra, artıq pg_stat_statements genişlənməsini konkret bazada yarada bilərik. Lazım olan bazaya psql və ya başqa alətlə qoşul və belə et:
CREATE EXTENSION pg_stat_statements;
Əgər hər şey uğurla keçdisə, komanda səhvsiz bitəcək. İndi pg_stat_statements sənin bazanda aktivdir.
4. pg_stat_statements parametrlərinin sazlanması.
Genişlənmə quraşdırıldıqdan sonra, statistik məlumatların düzgün toplanması üçün parametrləri sazlamaq faydalıdır. Əsas parametrləri postgresql.conf faylında təyin etmək olar.
Əsas parametrlər
pg_stat_statements.track- Hansı sorğuların izlənəcəyini təyin edir.
- Dəyərlər:
all— bütün sorğuları izləmək (debug və analiz üçün tövsiyə olunur).top— yalnız top-level sorğuları izləmək.none— izləməni söndürmək.
- Sazlama nümunəsi:
pg_stat_statements.track = 'all'
pg_stat_statements.max- Statistikada saxlanacaq maksimum sorğu sayı.
- Default: 5000.
- Əgər sistemdə çoxlu sorğu varsa, bu dəyəri artırmaq olar, məsələn:
pg_stat_statements.max = 10000
pg_stat_statements.save- Server restartları arasında statistik məlumatların saxlanıb-saxlanmayacağını təyin edir.
- Dəyərlər:
onvə yaoff. - Tövsiyə olunur
onqoymaq:pg_stat_statements.save = on
Parametrləri dəyişəndən sonra serveri yenidən başladın.
pg_stat_statements-in işləməsini yoxlamaq
İndi genişlənmə quraşdırılıb və sazlanıb, gəlin işləməsini yoxlayaq. Toplanmış sorğu statistikasını görmək üçün belə sorğu et:
SELECT
queryid, -- Sorğunun unikal identifikatoru
query, -- Sorğunun mətni
calls, -- Sorğunun çağırılma sayı
total_time, -- İcra müddətinin cəmi (millisaniyə ilə)
rows -- Sorğu ilə qaytarılan sətr sayı
FROM pg_stat_statements
ORDER BY total_time DESC;
Bu sütunlar nə deməkdir?
queryid: sorğunun unikal identifikatoru, fərqli parametrlərlə eyni sorğuları tapmaq üçün faydalıdır.query: işlədilən SQL-sorğunun mətni.calls: sorğu neçə dəfə çağırılıb.total_time: ümumi vaxt (bütün çağırışların cəmi).rows: sorğu ilə qaytarılan sətr sayı.
Məsələn, əgər görürsən ki, calls = 100 və total_time = 50000 (50 saniyə) olan sorğu sistemdə əsas vaxtı tutur, bu artıq siqnaldır ki, onu optimizasiya etmək lazımdır.
pg_stat_statements-in tipik istifadə ssenariləri
- Ən yavaş sorğuların tapılması. Ən çox vaxt aparan sorğuları tapmaq üçün nəticələri
total_time-a görə sırala:
SELECT query, total_time, calls
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 5;
- Ən aktiv sorğuların aşkarlanması. Ən çox işlədilən sorğuları tapmaq üçün
calls-a görə sırala:
SELECT query, calls, total_time
FROM pg_stat_statements
ORDER BY calls DESC
LIMIT 5;
- İndekslərin istifadəsinin analizi. Əgər çoxlu yavaş sorğu görürsənsə, indekslərin istifadəsini yoxla. Məsələn,
WHEREilə filtrasiya olan sorğularda indeksin olmaması tez-tez zəif performansın səbəbidir.
pg_stat_statements məlumatlarının təmizlənməsi
Bəzən statistik məlumatları sıfırlamaq lazım olur ki, analizi təzədən başlaya biləsən. Bunu belə edə bilərsən:
SELECT pg_stat_statements_reset();
Sıfırlamadan sonra bütün statistika təmizlənəcək və məlumatlar yenidən toplanacaq.
Praktik məsləhətlər
Toplanan statistikanın həcmini məhdudlaşdır: əgər yüksək yüklü sistemdə milyonlarla sorğu varsa, pg_stat_statements.max-ı normal səviyyədə saxla ki, əlavə yük olmasın.
Statistikanı mütəmadi təmizlə: performans analizinə başlamazdan əvvəl köhnə və yeni məlumatlar qarışmasın deyə bunu etmək faydalıdır.
Yavaş sorğulara diqqətlə yanaş: hətta nadir işləsə də, bir dəfəlik yavaş sorğu bazanı ciddi yükləyə bilər.
İndi sən bilirsən ki, pg_stat_statements genişlənməsini necə quraşdırmaq, sazlamaq və sorğuların performansını analiz etmək üçün istifadə etmək olar. Növbəti leksiyada biz daha dərindən baxacağıq ki, yavaş sorğuları necə tapmaq və onların icrasını optimizasiya etmək olar.
GO TO FULL VERSION