CodeGym /Kurslar /SQL SELF /PostgreSQL Sistem Metrikləri

PostgreSQL Sistem Metrikləri

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

Təsəvvür elə ki, sənin PostgreSQL serverin restoran kimidir, biz də onun yoxlayıcılarıyıq. Restoranın stabil işləməsi üçün nə qədər inqrediyent (CPU, yaddaş, disk) istifadə olunduğunu, nə vaxt bitdiyini və kim tərəfindən istifadə edildiyini bilməliyik. Əgər bu məqamı qaçırsan, "restoran" ya həddindən artıq sifariş qəbul edib öhdəsindən gələ bilməyəcək, ya da günün ortasında çökəcək. Ona görə də sistem metriklərini başa düşmək həyati vacibdir.

PostgreSQL üçün monitorinqdə əsas metriklər:

  1. CPU: sorğuların icrası üçün nə qədər prosessor vaxtı sərf olunduğunu göstərir.
  2. Yaddaş (RAM): PostgreSQL-in əməli yaddaşı necə istifadə etdiyini, o cümlədən sorğuların cache-lənməsini göstərir.
  3. Disk sahəsi: bəlkə də ən proqnozlaşdırılandır: disk imkan verdiyindən artıq məlumat saxlaya bilməzsən.

Məqsədimiz — PostgreSQL-in sistem metriklərini yoxlamağı və şərh etməyi öyrənməkdir ki, performans problemləri və resurs çatışmazlığının qarşısını alaq.

CPU istifadəsinin monitorinqi

Prosessor — serverinin ürəyidir. PostgreSQL həm mürəkkəb sorğuların icrası, həm də fon tapşırıqları üçün (məsələn, autoanaliz və autovacuum) CPU istifadə edə bilər. Əgər sənin bazan acgöz yeyən kimidirsə və CPU-nu "yeyirsə", müdaxilə vaxtıdır.

  1. Sistem alətlərindən istifadə.
    Əvvəlcə müəyyən et ki, PostgreSQL sistem səviyyəsində nə qədər prosessor vaxtı istifadə edir. Linux-da top və ya htop komandalarından istifadə edə bilərsən.

PostgreSQL prosesini tap (adətən orada bazanın adı olur). Məsələn, postgres: postgres [your_query].

%CPU sütununa bax. Əgər orada rəqəm həmişə yüksəkdirsə, bu artıq siqnaldır.

  1. PostgreSQL-dən CPU yükünün analizi.

PostgreSQL-də yükü izləmək üçün daxili view-lar var. Ən faydalısı — pg_stat_activity-dir, aktiv sorğuları göstərir.

Sorgu nümunəsi:

SELECT pid, usename, query, state, now() - query_start AS duration
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY duration DESC;

Burada nə vacibdir?

  • state = 'active' — hazırda icra olunan sorğuları göstərir.
  • duration — sorğuların CPU-ya nə qədər vaxtdır yük verdiyini göstərir.

Praktik məsləhət:

Əgər uzun çəkən sorğu görürsənsə və bu qədər vaxt almamalıdırsa, istifadə olunan indeksləri yoxla. Problemli prosesi pg_terminate_backend ilə dayandıra da bilərsən.

Dayandırma nümunəsi:

SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE state = 'active' AND duration > interval '10 minutes';

Yaddaş istifadəsinin monitorinqi

Yaddaş — PostgreSQL üçün ikinci ən vacib resursdur, xüsusilə də məlumatların cache-lənməsi məsələsində. PostgreSQL əməli yaddaşı aktiv istifadə edir (work_memshared_buffers parametrləri ilə) ki, əməliyyatlar daha sürətli getsin.

  1. PostgreSQL-də yaddaş istifadəsi üçün əsas parametrlər:
  • shared_buffers: PostgreSQL üçün ayrılan əsas yaddaş blokudur. Adətən serverin ümumi RAM-ının 25-40%-ni tutur.
  • work_mem: Bir sorğuda sort və hash əməliyyatları üçün yaddaşdır. Dəyəri nə qədər böyük olsa, bir o qədər çox müvəqqəti əməliyyatlar RAM-da (diskdə yox) icra oluna bilər.
  1. Yaddaş parametrlərinin cari dəyərlərini yoxlamaq.

PostgreSQL üçün hansı yaddaş parametrlərinin aktiv olduğunu görmək üçün belə et:

SHOW shared_buffers;
SHOW work_mem;

Nümunə çıxışı:

1GB
4MB

Bu o deməkdir ki, serverdə shared_buffers üçün 1 GB, hər sort/hash əməliyyatı üçün isə 4 MB yaddaş ayrılıb.

  1. pg_stat_activity ilə yaddaş monitorinqi

Hazırda aktiv bağlantıların nə qədər yaddaş istifadə etdiyini yoxlaya bilərsən. Bunun üçün rahat sorgu var:

SELECT pid, usename, state, backend_start, pg_size_pretty(pg_backend_memory_contexts_size(pid)) AS memory_used
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY memory_used DESC;

Bu sorgu hər bir aktiv bağlantının nə qədər RAM istifadə etdiyini göstərəcək.

Məsləhət: əgər hansısa bağlantı həddindən artıq yaddaş istifadə edirsə, sorğuda sort və ya aggregation əməliyyatları olub-olmadığını və onları optimallaşdırmaq mümkünlüyünü yoxla.

Disk sahəsinin monitorinqi

Disk — PostgreSQL üçün resursların sonuncu anbarıdır. Hətta kifayət qədər RAM və CPU olsa belə, PostgreSQL-ə məlumatları, transaction log-ları (WAL) və müvəqqəti faylları saxlamaq üçün disk lazımdır.

  1. Bazanın ölçüsünü yoxlamaq.

Ən əsasdan başlayaq: bazanın ölçüsünü müəyyənləşdir.

SELECT pg_size_pretty(pg_database_size(current_database())) AS db_size;

Bu sorgu nə edir?

Hazırkı bazanın ümumi ölçüsünü rahat formatda (MB, GB) göstərir.

  1. Cədvəl və indekslərin ölçüsünü yoxlamaq.

Bazadakı "ağırçəkililəri" tapmaq üçün istifadə et:

SELECT relname AS table_name, pg_size_pretty(pg_total_relation_size(relid)) AS total_size
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;

Nümunə çıxışı:

table_name total_size
orders 1 GB
customers 500 MB
transactions 300 MB
  1. WAL (transaction log-larının) monitorinqi.

Əgər bazan aktivdirsə, transaction log-lar tez böyüyə bilər. Onların ölçüsünü belə yoxlaya bilərsən:

SELECT pg_size_pretty(pg_xlog_location_diff(pg_current_wal_lsn(), '0/0')) AS wal_size;

Nəticə

Artıq PostgreSQL-in sistem metriklərini izləmək üçün alətlərin və biliklərin var:

  1. CPU yükünü izləmək üçün htop və ya pg_stat_activity-dən istifadə et.
  2. Yaddaşdan optimal istifadə üçün shared_bufferswork_mem parametrlərini tənzimlə.
  3. Disk sahəsinin tükənməməsi üçün bazanın, cədvəllərin və indekslərin ölçüsünü mütəmadi yoxla.

Bu bacarıqlar sənə gözlənilməz problemlərin qarşısını almağa və PostgreSQL serverini əla vəziyyətdə saxlamağa kömək edəcək. Server barədə düşünəndə unutma: düzgün təşkil olunmuş resurslar məhsulunu istifadəçilər arasında ən populyar edəcək.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION