← Back to list

Ma’lumotlar bazasining Qora qutisi W.A.L.

Bazaga kiritilgan ma’lumot va o’zgarishlar to’g’ridan to’g’ri bazaga yozilmasligi bilarmidingiz ?

Javohir Abdirasulov · 2026-05-09 13:03 · 0 claps · 2.1 min read
#database #database-transaction #system-design-concepts #sql #nosql
Open on Medium ↗

Ma’lumotlar bazasining Qora qutisi W.A.L.

Bazaga kiritilgan ma’lumot va o’zgarishlar to’g’ridan to’g’ri bazaga yozilmasligi bilarmidingiz ?

Masalan SQL yoki NoSQL bazaga foydalanuvchi balansini yangilash haqida so’rov yubordingiz. Bunda o’zgarish bazaga yozilmay turib sizga darhol(millisekundlarda) OK ya’ni muvaffaqiyatli saqlandi degan javob qayatariladi. Bu o’zgarish esa bir necha daqiqadan keyingina bazaga yoziladi.

Bazaga ma’lumot yozish aslida qanday ishlaydi ? Write Ahead Log (WAL) — bu ma’lumotlar bazasi ishonchliligini(Durability) ta’minlaydigan eng muhim mexanizmlardan biridir. Ma’lumotlar avval RAM bufferga keyin WAL faylga undan keyin esa bazaga yoziladi. WAL bu ketma-ket(sequential) yozilgan binar fayllar jamlanmasi bo’lib, baza tarixini o’zida saqlab boradi. Ma’lumotni to’g’ridan-to’g’ri bazaga yozish bu juda xavfli. Chunki tizimda elektor muammosi, operatsion tizimdagi crashlar va boshqa favqulotda vaziyatlarda server o’chib qolsa shu log fayllardagi yozuvlar orqali chala qolgan tranzaksiyalar kelgan joyidan bexato va stabil davom etadi.

Keling jarayonni real PostgreSQL so’rov misolida qadam va qadam ko’rib chiqaylik:

  1. clients’ jadvalidagi ID=1 bo’lgan mijoz balansida $100 pul bor deb hisoblaylik.

  2. Balansni yangilaymiz: BEGIN; UPDATE clients SET balance=150 WHERE id=1; COMMIT;

  3. Postgre so’rovni qabul qiladi va tahlil qiladi (EXPLAIN, Syntax check…).

  4. Diskdan id=1 rowni topadi va uni Shared Buffer(RAM) ga yuklaydi va operativ xotirani o’zida o’zgartiradi. Bu o’zgarish hali diskga yozilmagani uchun Dirty Page deb belgilanadi.

  5. COMMIT bo’lishidan oldin RAM dagi o’zgarish diskdagi(HDD/SSD) WAL faylga aniq va tushunarli qilib yoziladi(fsync) va muvaffaqiyatli javob bilan tranzaksiya yopiladi. Ya’ni tarix doimiy xotiraga muxirlandi endi qo’rqmay OK qaytarsa bo’ladi. Ammo hali bazada balans $150 bo’lmaydi.

  6. Endi biroz vaqt o’tgach(checkpoint_timeout) baza RAM dagi yozuvlar bilan sinrxonizatsiya bo’ladi va u yerdan Dirty Page o’zgarishlarni yuklab oladi. Ya’ni balans bazada ham $150 ga o’zgaradi.

Postgres doim ma’lumotni avval Shared Buffer(RAM)dan izlaydi. U yerda mavjud bo’lmasa keyin diskga o’tadi. Shu sababli doim aktual ma’lumot qaytariladi.

To’satdan server o’chib yonsa RAM tozalanib ketadiku ? Ha bunday holatda RAM tozalanadi lekn o’zgarishlar allaqachon WAL faylga yozilgan. Shu sababli tizim qayta yonganida baza avval jadvalga emas WAL faylga qaraydi va RAMda qolib ketgan ma’lumotlarni diskdan qayta tiklab oladi.

WAL fayllarni bazaning doimiy aktual nusxasi deb qarash ham mumkin. Shu sababli replikatsiya jarayoni ham WAL fayllar yordamida amalga oshiriladi. Bunda asosiy bazaga tegmasdan(nagruzka bermay) barcha replikalar loglar bilan doimiy sinxronlab turiladi. WAL fayllar diskga ketma-ket (Sequential i/o) yozilgani sababli ularni o’qish ham (Random i/o ga nisbatan) juda tez bo’ladi.

WAL texnologiyasi NoSQL bazalarda ham mavjud va deyarli xuddi prinspda ishlaydi. Shunchaki NoSQL bazalarda bu boshqacharoq nomlanadi. Masalan MongoDB da bu mexanizm Journaling deb ataladi. WAL nafaqat bazalarda balki Kafka,Elasticsearch va Redis kabi tizimlarda ham qo’llaniladi. WAL sozlamalari har bir tizim va platforma uchun turli xil bo’lib ularni to’g’ri sozlash juda ham muhim hisoblanadi.

Ushbu postda WAL mexanizimi haqida qisqacha fundamental ma’lumot keltirildi. Har bir tizim uchun bu haqida batafsil yo’riqnomalar mavjud albatta.

database #wall #sql #noqsql #postgresql #algorithm #checkpoint #transaction


메타데이터
post_id
b06211cbb7dd
slug
malumotlar-bazasining-qora-qutisi-w-a-l-b06211cbb7dd
url
https://medium.com/@alienware7x/malumotlar-bazasining-qora-qutisi-w-a-l-b06211cbb7dd
canonical_url
https://medium.com/@alienware7x/malumotlar-bazasining-qora-qutisi-w-a-l-b06211cbb7dd
author_url
https://medium.com/@alienware7x
status
ok
fetched_at
2026-06-24 11:06:28