Skip to main content

Yazma Öncesi Günlük (Write-Ahead Log - WAL)

Sistem Analizi

Veri ve Depolama

Normal Davranış

Bir uygulama bir işlem (transaction - örn. INSERT, UPDATE) yürüttüğünde, veritabanı motoru işlem değişikliklerini ikili bir günlük kaydına (binary log record) serileştirir (serializes), monoton (monotonically) olarak artan bir Günlük Sıra Numarası (Log Sequence Number - LSN) atar ve bunu aktif WAL segment dosyasına ekler (appends). İşlem kesinleştirme (transaction commit) sırasında, motor WAL arabelleğini (buffer) uçucu olmayan (non-volatile) fiziksel diske senkron (synchronously) olarak temizlemek (flush) için bir işletim sistemi (OS) fsync sistem çağrısı gönderir. Sadece fsync başarılı olduktan sonra veritabanı müşteriye kesinleştirmeyi onaylar. Arka planda, asenkron bir denetim noktası oluşturucu (checkpointer) değiştirilmiş bellek içi sayfaları (in-memory pages - 'kirli sayfalar' / 'dirty pages') periyodik olarak ana veri dosyalarına temizler ve eski WAL segmentlerini güvenle geri dönüştürür.

Çöküş Davranışı

İleriye Dönük Yazma Günlüğü (Write-Ahead Logging), disk G/Ç (disk I/O) darboğazları yazma verimini (write throughput) boğduğunda veya geri dönüştürülmemiş (un-recycled) WAL segmentleri disk alanını tükettiğinde başarısız olur. Doymuş disk denetleyicileri (disk controllers) veya ağa bağlı depolama (network-attached storage) nedeniyle senkron fsync işlemlerinde gecikme (latency) sıçramaları yaşanırsa, veritabanı kesinleştirme (commit) gecikmesi anında sıçrar; arka plan denetim noktaları (checkpoints) geride kalırsa veya bağlı bir veritabanı çoğaltma yuvası (replication slot) duraklarsa, veritabanı motoru eski WAL dosyalarını geri dönüştüremez, bu da WAL segmentlerinin mevcut disk alanının %100'ünü hızla tüketmesine neden olarak veritabanını anında acil bir kapanmaya veya salt okunur (read-only) panik durumuna zorlar.

İş Sonuçları

İleriye Dönük Yazma Günlüğünün (Write-Ahead Log - WAL) başarısız olması veya bozulması, bir veritabanının ACID garantilerini (ACID guarantees) paramparça eder. Bir sistem çökmesi durumunda, kesinleştirilmemiş işlemler (uncommitted transactions) geri alınamaz (roll back) ve kesinleştirilmiş işlemler kalıcı olarak kaybolur. Bu, ciddi veri bozulması (data corruption), telafi edilemez finansal tutarsızlıklar (financial discrepancies) ve kurumsal veri bütünlüğünün (data integrity) tamamen kaybıyla sonuçlanır.

Görsel Tezahür

"Terminale sürekli olarak 'PANIC: could not locate a valid checkpoint record' ve 'FATAL: the database system is in recovery mode' yazdıran felaketle sonuçlanan bir veritabanı başlatma hatası."

Satirical Behavior

"The database's frantic, messy diary where it scribbles down what it's about to do just in case someone pulls the power cord in the next 5 milliseconds."

Bilinen İsimler

WALCommit LogTransaction LogRedo Log

Teknik Terminoloji

atomicitydurabilitycrash recoveryappend-onlyfsynclog sequence number

Hata Göstergeleri

disk fulllog corruptionslow fsynccheckpoint failure

Sistem Mimarisi

Click or hover to interact

FAQ

Normalde nasıl davranır?

Bir uygulama bir işlem (transaction - örn. INSERT, UPDATE) yürüttüğünde, veritabanı motoru işlem değişikliklerini ikili bir günlük kaydına (binary log record) serileştirir (serializes), monoton (monotonically) olarak artan bir Günlük Sıra Numarası (Log Sequence Number - LSN) atar ve bunu aktif WAL segment dosyasına ekler (appends). İşlem kesinleştirme (transaction commit) sırasında, motor WAL arabelleğini (buffer) uçucu olmayan (non-volatile) fiziksel diske senkron (synchronously) olarak temizlemek (flush) için bir işletim sistemi (OS) fsync sistem çağrısı gönderir. Sadece fsync başarılı olduktan sonra veritabanı müşteriye kesinleştirmeyi onaylar. Arka planda, asenkron bir denetim noktası oluşturucu (checkpointer) değiştirilmiş bellek içi sayfaları (in-memory pages - 'kirli sayfalar' / 'dirty pages') periyodik olarak ana veri dosyalarına temizler ve eski WAL segmentlerini güvenle geri dönüştürür.

Nasıl çöker?

İleriye Dönük Yazma Günlüğü (Write-Ahead Logging), disk G/Ç (disk I/O) darboğazları yazma verimini (write throughput) boğduğunda veya geri dönüştürülmemiş (un-recycled) WAL segmentleri disk alanını tükettiğinde başarısız olur. Doymuş disk denetleyicileri (disk controllers) veya ağa bağlı depolama (network-attached storage) nedeniyle senkron fsync işlemlerinde gecikme (latency) sıçramaları yaşanırsa, veritabanı kesinleştirme (commit) gecikmesi anında sıçrar; arka plan denetim noktaları (checkpoints) geride kalırsa veya bağlı bir veritabanı çoğaltma yuvası (replication slot) duraklarsa, veritabanı motoru eski WAL dosyalarını geri dönüştüremez, bu da WAL segmentlerinin mevcut disk alanının %100'ünü hızla tüketmesine neden olarak veritabanını anında acil bir kapanmaya veya salt okunur (read-only) panik durumuna zorlar.

İş sonuçları nelerdir?

İleriye Dönük Yazma Günlüğünün (Write-Ahead Log - WAL) başarısız olması veya bozulması, bir veritabanının ACID garantilerini (ACID guarantees) paramparça eder. Bir sistem çökmesi durumunda, kesinleştirilmemiş işlemler (uncommitted transactions) geri alınamaz (roll back) ve kesinleştirilmiş işlemler kalıcı olarak kaybolur. Bu, ciddi veri bozulması (data corruption), telafi edilemez finansal tutarsızlıklar (financial discrepancies) ve kurumsal veri bütünlüğünün (data integrity) tamamen kaybıyla sonuçlanır.

What is a Write-Ahead Log (WAL) and why must transactions be logged before writing to main database files?

A WAL is an append-only sequential file where database changes are recorded before updating in-memory pages or B-Trees on disk. It is necessary because sequential disk writes are drastically faster than random page writes, and it guarantees crash recovery—if the system crashes mid-transaction, the WAL allows the database to replay committed transactions and roll back incomplete ones.

How does a lagging replication slot or broken checkpoint cause a database crash via WAL accumulation?

A database cannot purge or recycle WAL segments that are still needed by active replication followers or un-checkpointed memory pages. If a replica subscriber disconnects or stalls, WAL files accumulate continuously until the storage disk reaches 100% capacity, abruptly forcing the primary database to crash and shut down.

AI özeti

Write-Ahead Log is a DATA_AND_STORAGE system in TinyCTO.tv. When an application executes a transaction (e.g., INSERT, UPDATE), the database engine serializes the transaction modifications into a binary log record, assigns a monotonically increasing Log Sequence Number (LSN), and appends it to the active WAL segment file. During transaction commit, the engine issues an OS fsync system call to flush the WAL buffer synchronously to non-volatile physical disk. Only after fsync succeeds does the database acknowledge the commit to the client. In the background, an asynchronous checkpointer periodically flushes modified in-memory pages ('dirty pages') to the main data files and safely recycles old WAL segments.