Dasturlash

PostgreSQL’da fon ishlarini bajarish: pg_background kengaytmasi

29-mart, 2026, 02:0016 ko'rish3 daqiqa o'qish
PostgreSQL’da fon ishlarini bajarish: pg_background kengaytmasi

PostgreSQL ma'lumotlar bazasini kengaytirish uchun ko'plab vositalar mavjud, lekin ularning orasida pg_background kengaytmasi alohida e'tiborni tortadi. Ushbu kengaytma yordamida uzun SQL so‘rovlarini yoki ma'lumotlar bazasini texnik xizmat ko‘rsatish ishlarini foydalanuvchi sessiyasi bloklanmasdan fon jarayonida bajarish mumkin.

pg_background nima?

pg_background – PostgreSQL server ichida alohida background worker jarayonlarini yaratib, ularga asinxron SQL buyruqlarini topshirish imkonini beruvchi kengaytma. Bu, dblink kabi alohida ulanishlar yoki mijoz tomonida asinxron kod yozishdan farq qiladi: workerlar serverning ichki resurslari bilan ishlaydi va o‘z tranzaksiya kontekstiga ega bo‘ladi.

V2 API afzalliklari

2026-yilning ikkinchi yarmida chiqarilgan v2 API, (pid, cookie) kombinatsiyasini ishlatadi. Bu kombinatsiya worker jarayonining PID (process ID) qayta ishlatilishining oldini oladi, ya'ni uzun muddatli tizimlarda xavfsizlikni oshiradi.

  • Cookie‑based identifikatsiya – har bir workerga kriptografik tasodifiy cookie beriladi.
  • Explicit cancel vs detachcancel workerni to‘xtatadi, detach esa faqat kuzatuvni to‘xtatadi.
  • Synchronous wait – natijani kutish uchun oddiy SELECT buyrug‘i yetarli.
  • Yaxshilangan monitoringpg_background_stats_v2() va pg_background_progress() funksiyalari orqali holat va progressni kuzatish mumkin.

Amaliy misollar

Quyidagi misollar v2 API yordamida qanday ishlashni ko‘rsatadi.

-- Workerni ishga tushirish va xavfsiz handle olish
SELECT * FROM pg_background_launch_v2(
    'SELECT pg_sleep(5); SELECT count(*) FROM large_table'
) AS handle;

-- Natijani olish (natija bir martalik)
SELECT * FROM pg_background_result_v2(, ) AS (cnt BIGINT);

-- Faqat yon ta'sir (INSERT) kerak bo‘lsa
SELECT * FROM pg_background_submit_v2(
    'INSERT INTO audit_log(ts, event) VALUES (now(), ''system_check'')'
);

-- Cancel va detach farqi
SELECT pg_background_cancel_v2(, );
SELECT pg_background_detach_v2(, );

Bu kodlar yordamida VACUUM, ANALYZE yoki katta ma'lumotlarni backfill qilish kabi vazifalarni foydalanuvchi sessiyasini bloklamasdan bajarish mumkin.

O‘rnatish va sozlash

Kengaytmani o‘rnatish oddiy: make && make install dan so‘ng CREATE EXTENSION pg_background; buyrug‘ini bajarish kerak. Eng muhim sozlama max_worker_processes bo‘lib, bu parametr worker jarayonlari uchun ajratiladigan maksimal sonni belgilaydi. Kerakli miqdorni aniqlashda serverning umumiy ishchi jarayonlari va boshqa kengaytmalar bilan muvozanatni saqlash zarur.

Xavfsizlik va resurslar

v1.7 va v1.8 versiyalarida quyidagi yaxshilanishlar kiritildi:

  • Cookie generatsiyasi pg_strong_random() yordamida kriptografik xavfsizlikka ega bo‘ldi.
  • Uzoq muddatli sessiyalar uchun maxsus WorkerInfoMemoryContext joriy qilindi, bu esa xotira oqimini oldini oladi.
  • CPU sarfini kamaytirish uchun exponential backoff polling qo‘shildi.
  • Yangi GUC parametrlar: pg_background.max_workers, pg_background.worker_timeout, pg_background.default_queue_size.

Windows platformasida cancel operatsiyasi cheklanganligini, COPY protokoli o‘chirib qo‘yilganligini va worker ichida tranzaksiya boshqaruvi ruxsat berilmaganligini unutmang.

Xulosa

pg_background PostgreSQL’ga toza, aniq va xavfsiz asinxron bajarish yo‘nalishini qo‘shadi. V2 API bilan PID‑cookie himoyasi, yaxshilangan monitoring va operatsion sozlamalar ishlab chiqarish muhitida bu kengaytmani ishonchli tanlovga aylantiradi. Agar sizga uzun VACUUM, ma'lumotlarni qayta to‘ldirish yoki audit yozuvlarini “fire‑and‑forget” usulida bajarish kerak bo‘lsa, pg_background yordamida bu vazifalarni server darajasida, foydalanuvchi sessiyasini bloklamasdan amalga oshirishingiz mumkin.

Manba: Hacker News
#PostgreSQL #pg_background #asynchronous SQL #background workers #v2 API
Telegram da muhokama qilish