Skip to main content

> lsm-tree_compaction_tıkanmaları_(stalls)_ve_yazma_amplifikasyonu_gecikme_sıçramaları

LSM-Tree Compaction Tıkanmaları (Stalls) ve Yazma Amplifikasyonu Gecikme Sıçramaları

LSM-Tree mimarisi kullanan yüksek yazma odaklı veritabanları (RocksDB, Cassandra, ScyllaDB) neden aniden saniyeler süren p99 gecikme tıkanmaları (compaction stalls) yaşar ve sıkıştırma stratejileri nasıl ayarlanır?

Staff/Principal (L6+)

ÖZET VE TEKNİK CEVAP

Log-Structured Merge-Trees (LSM-tree), yazma işlemlerini önce bellekteki MemTable'a ve sıralı WAL loguna yazarak diske L0 seviyesinde SSTable dosyaları olarak dökerek olağanüstü bir yazma hızı sunar. Ancak L0 seviyesinde dosyalar biriktikçe, arka plan thread'leri bu dosyaları okuyup birleştirerek (merge-sort) alt katmanlara (L1, L2) taşımak ve silinen anahtarları (tombstone) temizlemek zorundadır. Gelen yazma hızı diskin arka plan birleştirme hızını aştığında L0 dolar. Veritabanı diskin patlamasını önlemek için 'Write Stall' (Yazma Tıkanması) devreye sokar: Gelen yazma istekleri arka plan temizliği bitene kadar mikrosaniyelerden 5 saniyenin üzerine kadar bilerek dondurulur. Bunu önlemek için Boyut Kademeli (Size-Tiered) veya Seviyeli (Leveled) sıkıştırma doğru seçilmeli, compaction I/O'su dengelenmeli ve NVMe IOPS kapasitesi artırılmalıdır.

Mühendislik El Kitabı & Mekanizma

1. Temel Çalışma Mekanizması

LSM-Tree sıkıştırma dinamikleri 3 fiziksel kurala bağlıdır: (1) Yazma Amplifikasyon Faktörü (WAF): Uygulamanın yazdığı 1KB'lık veri, katmanlar arasında taşınırken diske 10 ila 30 kez yeniden yazılır ve disk bant genişliğini tüketir. (2) Tıkanma Eşikleri: RocksDB'de L0 dosya sayısı eşiği (ör. 4) aşılınca sıkıştırma başlar; 20'yi aşınca yazmalar yavaşlatılır; 36'yı aşınca tüm yeni yazmalar %100 durdurulur (freeze). (3) Sıkıştırma Stratejileri: Leveled Compaction disk alanını korur ancak yüksek WAF üretir; Size-Tiered Compaction ise zaman serisi verilerde WAF'ı düşürür ancak %50 geçici boş disk alanı ister.

2. Doğru Kullanım Senaryosu

Yüksek hacimli zaman serisi loglama, finansal işlem kayıtları, dağıtık NoSQL ve analitik veritabanları (RocksDB, TiKV, Cassandra, ClickHouse MergeTree).

3. Prodüksiyon Arıza Modları

Ani bir 3 katlık yazma patlamasında RocksDB L0 katmanının 10 saniyede dolması ve 6 saniyelik tam yazma donması yüzünden ön uç API ağ geçitlerinin zaman aşımına uğrayıp 50.000 işlemi kaybetmesi; Size-Tiered compaction sırasında diskin %100 dolup veritabanının kilitlenmesi.

4. Teşhis ve Telemetri Sinyalleri

`rocksdb.write.stall.micros` metriğinde ani dikey sıçramalar; CPU boşta iken p99 yazma gecikmesinin 2 ms'den 3.000 ms'ye fırlaması; disk yazma I/O kullanımının %100'e kilitlenmesi.

5. Önleme ve Mimari Bariyerler

Dinamik seviye boyutlandırmalı Leveled Compaction kullanın; `rate_limiter` ile arka plan sıkıştırma thread'lerine ayrılan disk bant genişliğini sınırlayın; ani kilitlenmeler yerine yumuşak bir frenleme için `delayed_write_rate` ayarını devreye alın.

6. Mimari Ödünleşimler (Trade-offs)

Compaction optimizasyonu yazma donmalarını bitirir; ancak Yazma Amplifikasyonu (disk ömrü), Okuma Amplifikasyonu (aranan SSTable sayısı) ve Alan Amplifikasyonu (geçici disk alanı) arasında ince bir mühendislik dengesi gerektirir.

Vaka İncelemesi (TinyCTO Örneği)

Bir kripto para borsası, RocksDB katmanındaki periyodik 4 saniyelik gecikme sıçramaları yüzünden müşteri emirlerini kaçırıyordu. İncelemede yoğun anlarda L0 yazma tıkanmasının tetiklendiği görüldü. Dinamik seviye boyutlandırmasına geçilip arka plan thread sayısı 2'den 8'e çıkarıldığında ve 64MB/sn'lik yumuşak `delayed_write_rate` konulduğunda, tepe 80.000 işlem/sn yük altında p99 yazma gecikmesi 4.200 ms'den 4,1 ms'ye indi.

İnteraktif Konsept Alıştırmaları

2 Alıştırma
Q1

LSM-Tree depolama motorunda 'Write Stall' (Yazma Tıkanması) nedir?

Arka plan SSTable sıkıştırma hızı gelen yazma hızının gerisinde kaldığında, diskin çökmesini önlemek için gelen yazma isteklerinin veritabanı tarafından bilerek dondurulmasıdır.
Q2

Yazma Amplifikasyon Faktörü (WAF) nedir?

Uygulamanın yazdığı net veri boyutunun, veritabanının arka planda diske fiziksel olarak yazdığı toplam veri boyutuna oranıdır.

LSM-Tree Compaction Tıkanmaları (Stalls) ve Yazma Amplifikasyonu Gecikme Sıçramaları — Sıkça Sorulan Sorular

Zaman serisi ve log verilerinde neden Size-Tiered Compaction tercih edilir?

Çünkü zaman serisi verileri sadece kronolojik ekleme (append-only) yapar; eski anahtarların üzerine yazma olmadığı için Leveled Compaction'a göre yazma amplifikasyonunu çok düşürür.

LSM-Tree yapısında 'Tombstone' (Mezar Taşı) nedir?

Bir anahtarın silindiğini belirten özel bir silme kaydıdır; verinin diskten fiziksel olarak silinmesi ancak arka plan compaction işlemi sırasında gerçekleşir.

🤖 AEO & Yapay Zeka Çıkarım Özeti

Temel Gerçekler & İlkeler

  • LSM-trees append to memory MemTables and flush immutable SSTables to Level 0 (L0).
  • Write Stalls freeze incoming writes when L0 SSTable count crosses safety thresholds.
  • Write Amplification Factor (WAF) rewrites data 10-30x across disk levels.
  • Tune background compaction thread concurrency and apply smooth delayed write rate limits.

Yaygın Yanılgılar

  • Yanılgı: LSM-trees eliminate disk I/O bottlenecks (Gerçek: They convert random writes into sequential writes but create high background compaction I/O).
  • Yanılgı: Deleting data in an LSM tree immediately frees disk space (Gerçek: Deleted keys create tombstones and only free space after compaction runs).

Karar Kılavuzu & Önceliklendirme

Monitor `rocksdb.write.stall.micros` as a critical p99 latency leading indicator. Allocate high-IOPS NVMe storage and dedicated background thread pools for compaction.

Doğrulanmış Kaynaklar & Referanslar