WAL — ma’lumotlar bazasida data page’larni diskka yozishdan oldin o‘zgarishlar haqidagi log yozuvlarini barqaror storage’ga saqlash usuli. Atama Write-Ahead Log so‘zlaridan tuzilgan.
Asosiy qoida:
avval log
keyin data page
Bu crash recovery, durability, replication va point-in-time recovery uchun asos yaratadi.
Log record
Har database o‘zgarishi WAL record yaratishi mumkin.
Record tarkibida:
- qaysi page yoki row;
- operation turi;
- oldingi yoki yangi qiymatning kerakli qismi;
- transaction;
- log position;
- checksum
bo‘lishi mumkin.
WAL oddiy text audit log emas. U database recovery formatidir.
Data page
Database table va index ma’lumotini page’larda saqlaydi.
Update memory buffer ichidagi page’ni o‘zgartiradi.
Page darhol asosiy data fayliga yozilmasligi mumkin.
Ammo tegishli WAL avval durable bo‘lishi kerak.
Commit
Transaction commit qilganda uning WAL yozuvlari storage’ga flush qilinadi.
Commit javobi qaysi nuqtada qaytishi configurationga bog‘liq.
Agar WAL durable bo‘lsa data page hali yozilmagan taqdirda ham crashdan keyin o‘zgarish qayta tiklanadi.
Crash recovery
Database kutilmaganda o‘chsa data file’lar transactionlarning turli bosqichidagi page’larni saqlashi mumkin.
Startupda database:
- checkpointdan keyingi WALni topadi;
- committed o‘zgarishlarni replay qiladi;
- incomplete transactionlar ta’sirini visibility qoidasi bilan bekor qiladi;
- consistent holatga keladi.
Recovery vaqti WAL hajmiga bog‘liq.
Checkpoint
Checkpoint dirty page’larning katta qismini data fayllariga yozadi va recovery boshlanish nuqtasini oldinga siljitadi.
Tez-tez checkpoint:
- ko‘proq disk burst;
- kamroq recovery WAL.
Kam checkpoint:
- silliqroq write;
- uzoqroq recovery;
- ko‘proq WAL retention.
Checkpoint interval va size workloadga mos tanlanadi.
Log sequence number
WAL ichidagi pozitsiya log sequence numberga o‘xshash qiymat bilan belgilanadi.
U:
uchun ishlatiladi.
Bu business transaction ID emas.
Physical replication
Replica primary WAL oqimini qabul qilib, o‘z data fayllariga replay qiladi.
Replica qayergacha:
- received;
- flushed;
- replayed
qilganini alohida pozitsiyalar ko‘rsatishi mumkin.
Read replica replay positionidan eski data ko‘rishi mumkin.
Archiving
WAL segmentlari uzoq muddatli archive storage’ga ko‘chiriladi.
Base backup bilan birga archive loglar ma’lum vaqt nuqtasiga tiklash imkonini beradi.
Archive upload muvaffaqiyatsiz bo‘lsa primary eski segmentlarni o‘chirmay, diskni to‘ldirishi mumkin.
Point-in-time recovery
Base backup olinadi.
Keyin WAL archive ma’lum timestamp, transaction yoki log positiongacha replay qilinadi.
Masalan, noto‘g‘ri delete’dan bir soniya oldingi holatga tiklash mumkin.
Recovery alohida instance’da bajarilib, kerakli data ko‘chirilishi mumkin.
WAL segment
WAL fixed-size segment fayllarga bo‘linishi mumkin.
Segment nomi timeline va log positionni ifodalaydi.
Segmentlar:
- active;
- recycle;
- archive;
- delete
holatlaridan o‘tadi.
File’ni qo‘lda o‘chirish database’ni buzishi mumkin.
WAL volume
Write-heavy workload katta WAL yaratadi.
WAL hajmiga:
ta’sir qiladi.
WAL bandwidth disk va replica network capacity’siga kiritiladi.
Full-page image
Page checkpointdan keyin birinchi marta o‘zgarganda torn page’dan himoya uchun butun page nusxasi WALga yozilishi mumkin.
Bu checkpointdan keyin WAL spike yaratadi.
Checksum va storage atomic write xususiyatlari bilan bog‘liq.
WAL compression
Full-page image va boshqa log qismlari compression qilinishi mumkin.
Bu disk va networkni kamaytiradi.
Evaziga CPU sarfi oshadi.
Compressibility workload va data type’iga bog‘liq.
Synchronous commit
Commit primary WAL bilan birga replica tasdig‘ini ham kutishi mumkin.
Kafolat kuchayadi, latency oshadi.
Qaysi replica flush yoki apply qilishi kerakligi policy bilan belgilanadi.
Asynchronous commit
Clientga WAL to‘liq durable flush bo‘lishidan oldin javob qaytarilishi mumkin.
Bu latency’ni kamaytiradi, ammo server crashida yaqin vaqtli transactionlar yo‘qolishi ehtimoli bor.
Bunday rejim faqat yo‘qolishi qabul qilinadigan data uchun ishlatiladi.
Logical decoding
Physical WALdan row-level o‘zgarishlar logical eventlarga aylantirilishi mumkin.
Bu:
- change data capture;
- logical replication;
- event pipeline;
- migration
uchun ishlatiladi.
Schema va transaction boundary event consumerga to‘g‘ri yetkazilishi kerak.
Replication slot
Consumer yoki replica kerakli WAL segmentlari o‘chirilmasligini ta’minlaydigan slotga ega bo‘lishi mumkin.
Consumer uzoq ishlamasa retained WAL diskni to‘ldiradi.
Slot lag, active holat va retained byte muntazam kuzatiladi.
Security
WAL ichida table data’sining maxfiy qismlari bo‘lishi mumkin.
Archive:
- encryption;
- access control;
- retention;
- secure deletion;
- audit
bilan himoyalanadi.
WAL faylini oddiy log deb public storage’ga joylashtirish mumkin emas.
Timeline
Failover yoki point-in-time recovery’dan keyin yangi WAL timeline yaratilishi mumkin.
Timeline eski tarixdan qaysi nuqtada ajralganini bildiradi.
Restore jarayoni kerakli timeline history fayllariga ega bo‘lishi kerak.
WAL monitoring
Kuzatiladi:
- generation rate;
- archive failure;
- retained segment;
- replica receive va replay position;
- checkpoint spike;
- diskdagi WAL hajmi.
WAL keskin ko‘payishi bulk update, index build yoki checkpoint muammosini ko‘rsatishi mumkin.
Disk ajratilishi
WAL va asosiy data bir diskda bo‘lsa write burstlar bir-biriga raqobat qiladi. Alohida tez storage yoki I/O limit latency’ni barqarorlashtirishi mumkin.
Bog‘liq tushunchalar
Write-Ahead Log, Transaction log, Checkpoint, Crash recovery, Replication, Log sequence number, Point-in-time recovery, WAL archive, Durability