Bosh sahifa Wiki WAL

WAL

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:

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:

  1. checkpointdan keyingi WALni topadi;
  2. committed o‘zgarishlarni replay qiladi;
  3. incomplete transactionlar ta’sirini visibility qoidasi bilan bekor qiladi;
  4. 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:

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:

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