Back to intelligence register
Ma'lumotlar Bazasi 14 daqiqa 11 Aug 2026

PostgreSQL ma'lumotlar bazasini yuqori yuklamalar uchun optimallashtirish

Katta hajmdagi ma'lumotlar bilan ishlovchi ilovalar uchun PostgreSQL tezligini oshirish, so'rovlarni optimallashtirish va xotira bilan ishlash sozlamalarini to'g'rilash usullari.

Zirki UZ Muhandislari 508

# PostgreSQL ma'lumotlar bazasini yuqori yuklamalar uchun optimallashtirish

Zamonaviy loyihalarni qurishda ma'lumotlar bazasini to'g'ri tanlash va uni to'g'ri sozlash muhim ahamiyatga ega. Relyatsion ma'lumotlar bazalarini boshqarish tizimlari (RDBMS) orasida PostgreSQL o'zining ishonchliligi, ochiq kodliligi va SQL standartlariga to'la mos kelishi bilan butun dunyo bo'ylab dasturchilarning sevimli vositasiga aylangan.

Ammo, ilovadan foydalanuvchilar soni ortib, ma'lumotlar hajmi Terabaytlarga yetganda, standart sozlamalardagi PostgreSQL sekinlasha boshlaydi. So'rovlar (queries) uzoq vaqt oladi, serverga tushadigan yuklama (CPU va RAM) keskin ortadi. Aynan shunday vaqtlarda ma'lumotlar bazasini yuqori yuklamalar (Highload) uchun optimallashtirish zaruriyati tug'iladi.

Ushbu maqolada PostgreSQL'ning ishlash tezligini bir necha barobar oshirishi mumkin bo'lgan amaliy usullar va sozlamalar haqida gaplashamiz.

1. Server sozlamalarini (postgresql.conf) optimallashtirish

PostgreSQL o'rnatilganda barcha qurilmalar va sharoitlar uchun mos keladigan universal sozlamalar bilan keladi. Ammo katta loyihalarda bu sozlamalarni serverning apparat imkoniyatlaridan (RAM, CPU disk turi) kelib chiqib o'zgartirish shart.

`shared_buffers` Bu PostgreSQL uchun ajratilgan tezkor xotira (RAM) miqdori bo'lib, u yerda tez-tez ishlatiladigan ma'lumotlar keshlari saqlanadi. Qoida tariqasida, buni serverning jami RAM miqdorining **25-40%** atrofida belgilash tavsiya etiladi. (Masalan, serverda 16 GB RAM bo'lsa, uni 4GB yoki 6GB qilib belgilang).

`work_mem` Bu parametr murakkab so'rovlarni, ayniqsa tartiblash (`ORDER BY`) va birlashtirish (`JOIN`) amallarini bajarish uchun har bir foydalanuvchi ulanishiga (connection) ajratiladigan xotira miqdoridir. Uni juda katta qilib belgilash xotira yetishmovchiligiga (OOM) olib kelishi mumkin, juda kichik bo'lsa so'rovlar diskka yozilib, ishni sekinlashtiradi. O'rtacha tizimlar uchun 16MB dan 64MB gacha tavsiya qilinadi.

`effective_cache_size` Bu parametr operatsion tizim xotirasida qancha ma'lumot keshlanganligini bildiradi. Buni server umumiy xotirasining **50-75%** qilib belgilash SQL Planerni (rejalashtiruvchini) to'g'ri ishlatishga yordam beradi.

`max_connections` Bir vaqtning o'zida MBga bog'lanishlar soni. Har bir connection ma'lum bir xotirani yeydi. Shuning uchun buni juda katta raqam qilib qo'yishdan qoching (masalan 100-200 yetarli). Agar loyiha ko'p ulanishlarni talab qilsa, bevosita `max_connections` ni ko'tarish o'rniga, **PgBouncer** kabi Connection Pooling vositalaridan foydalanish lozim.

2. Indekslardan to'g'ri foydalanish

Ma'lumotlar izlash tezligini oshirishning eng samarali usuli – bu indekslar yaratishdir. Bu xuddi kitobning mundarijasiga o'xshaydi: kerakli sahifani topish uchun butun kitobni emas, faqat mundarijani varoqlaysiz.

- **B-Tree indekslari**: Odatda ko'p ishlatiladigan (tenglik, katta/kichik) qidiruvlar uchun standart hisoblanadi. - **GIN va GiST indekslari**: To'liq matnli qidiruvlar (Full-text search) yoki JSON/JSONB formatidagi maydonlar ichidan ma'lumot izlash uchun ishlatiladi. - **Partial (Qisman) indekslar**: Agar siz faqat faol foydalanuvchilarni qidirsangiz, butun jadvalga emas, balki shart qo'yib indeks yaratish xotirani tejaydi. (`CREATE INDEX idx_active_users ON users (id) WHERE status = 'active';`)

> **Ogohlantirish:** Indekslarni me'yordan ortiq ko'p yaratish `INSERT`, `UPDATE` va `DELETE` amallarini juda sekinlashtirib yuboradi, chunki har safar ma'lumot o'zgarganda indekslar ham qayta hisoblanishi kerak.

3. Slow Queries (Sekin ishlaydigan so'rovlar) ni topish va to'g'rilash

Qanchalik zo'r server bo'lmasin, yomon yozilgan bitta SQL so'rov butun tizimni osib qo'yishi mumkin.

Sekin so'rovlarni topish uchun PostgreSQL ning `pg_stat_statements` kengaytmasidan foydalaning. Bu modul qaysi so'rovlar qancha vaqt olayotgani va qancha xotira sarflayotganini aniq ko'rsatib beradi.

Muammoli so'rovni topgach, uning oldiga `EXPLAIN ANALYZE` so'zini qo'yib ishlatib ko'ring. Bu vosita ma'lumotlar bazasi aynan qaysi qadamda (masalan, indeks bo'lmagani uchun butun jadvalni o'qib chiqish – `Seq Scan`) qiyinchilikka uchrayotganini tahlil qilib beradi.

4. Replikatsiya va Partitioning

- **Replikatsiya (Replication)**: O'qish (Read) yuklamalarini kamaytirish uchun bazaning aynan nusxasini (Replica) yaratib, ma'lumotlarni izlash bilan bog'liq amallarni ushbu serverga yo'naltirish mumkin. Asosiy server (Master) esa faqat ma'lumot yozish (Write) amallarini bajaradi. - **Partitioning (Bo'laklash)**: Millionlab qatorlarga ega bo'lgan ulkan jadvallar asta-sekin muammoga aylanadi. PostgreSQL ning Partitioning xususiyati orqali bitta katta jadvalni bir necha kichik mantiqiy bo'laklarga (masalan, oylar yoki yillar bo'yicha) bo'lib qo'yish mumkin. Bu qidiruv va ma'lumotni o'chirish tezligini sezilarli darajada oshiradi.

5. Vakuum jarayoni (Autovacuum)

PostgreSQL'da ma'lumot yangilangan yoki o'chirilganda eski ma'lumot darhol jismonan o'chib ketmaydi, u "o'lik qatorlar" (dead tuples) ko'rinishida saqlanib qoladi. Ularni tozalash `VACUUM` jarayoni orqali bajariladi.

Standart holatda `autovacuum` yoqilgan bo'ladi, lekin katta jadvallarda u tez-tez ishlamay qolishi mumkin. Shuning uchun `autovacuum` sozlamalarini (masalan `autovacuum_vacuum_scale_factor`) optimallashtirib, uning tez-tez, lekin tizimga og'irlik tushirmaydigan tarzda ishlab turishini ta'minlash muhimdir.

Xulosa

PostgreSQL optimallashtiruvdan so'ng dunyodagi eng tez va kuchli RDBMS lardan biriga aylana oladi. Buning uchun tizimni tushunish, sekin ishlayotgan so'rovlarni doimiy tahlil qilib borish va apparat imkoniyatlaridan to'liq foydalana oladigan konfiguratsiya tuzish muhimdir. Highload loyihalarda muntazam monitoring (Grafana, Prometheus orqali) va to'g'ri o'rnatilgan indekslar muvaffaqiyatning asosiy kalitidir.

Share note: