Biyoloji derslerinde bize hep insan kalbinin asaleti, beynin karmaşık dehası veya akciğerlerin ferahlığı anlatılır. Vücudun en sessiz, en nankör ama durduğu an insanı saatler içinde öldüren kahramanlarından ise pek bahsedilmez: Böbrekler ve Karaciğer.

Her bir dakikada kalbin pompaladığı kanın yaklaşık dörtte biri (1.2 litre) doğrudan böbreklerden geçer. Neden mi? Çünkü trilyonlarca hücremiz durmaksızın çalışır, glikoz yakar, protein sentezler ve bu hayati metabolizmanın kaçınılmaz bir sonucu olarak devasa miktarda toksik çöp üretir: Üre, kreatinin, ürik asit, amonyak...

Eğer böbrekleriniz bu çöpleri idrar yoluyla dışarı atamazsa; tıp dünyasının en korkunç tablolarından biri olan Üremi ve Toksik Asidoz başlar.

Kandaki zehir seviyesi yükselir. Önce iştahsızlık ve bulantı başlar, ardından beyin dokusu ödem yapar, hasta halüsinasyonlar görmeye başlar, komaya girer ve kalbi durur. İnsan bedeni, dışarıdan gelen bir virüs yüzünden değil; kendi ürettiği metabolik atıkların içinde boğulduğu için ölür.

Diyaliz makinesi, bir insanın kanını o zehirden temizleyen yapay bir kurtuluş kapısıdır.

Peki yazılım dünyasında, özellikle veritabanı mimarilerinde durum bundan farklı mıdır?

Şişen Tablolar ve Veritabanı Üremisi

Bir startup veya kurumsal yazılım ilk kurulduğunda her şey ne kadar hızlı ve pürüzsüzdür, değil mi? Sorgular milisaniyeler içinde döner, dashboard saniyede yüklenir, veritabanı CPU kullanımı %5'i geçmez. Çünkü sistem henüz gençtir; damarlarında tek bir atık partikülü bile birikmemiştir.

Ama aylar ve yıllar geçer. Uygulamanız büyür:

  • Kullanıcıların her tıklamasını kaydettiğiniz o activity_logs tablosu 100 milyon satırı aşar.
  • Süresi çoktan dolmuş ama asla temizlenmeyen user_sessions tablosu gigabaytlarca yer kaplar.
  • Soft-delete mantığıyla (is_deleted = true) sözde "sildiğiniz" ama diskin en derin köşelerinde çürümeye bıraktığınız milyonlarca ölü satır (dead tuples) birikir.
  • Ve PostgreSQL gibi modern veritabanlarında VACUUM süreçleri düzgün yapılandırılmadığı için, silinen verilerin açtığı boşluklar şişer (Database Bloat).

Sonra ne olur?

Sistem yavaşlamaya başlar. Eskiden 10 milisaniyede dönen basit bir SELECT sorgusu artık 8 saniyede dönmemeye başlar. Disk I/O tavan yapar. Bellek tükenir.

Ve ekibin acemi mühendisleri aynı yanlış teşhisi koyar:
"Veritabanı sunucumuz yetersiz kalıyor, AWS RDS instansını iki katına çıkaralım, 32 GB RAM ekleyelim."

İşte bu, böbrekleri iflas etmiş ve vücudu üre zehirlenmesine girmiş bir hastaya; "Bunun kanı azaldı herhalde, biraz daha serum bağlayalım" demekle aynı ölümcül hatadır.

Siz sorunu çözmüyorsunuz; zehirli bataklığın içine sadece biraz daha temiz su döküyorsunuz. Bir ay sonra o 32 GB RAM de yetmeyecek; çünkü atık üretimi devam ediyor ve boşaltım mekanizmanız çalışmıyor!

Garbage Collection Sadece Bir Dil Özelliği Değildir

Yazılımcılar "Garbage Collection" (Çöp Toplayıcı) dendiğinde sadece Java, Go veya JavaScript runtime'ının bellekteki kullanılmayan değişkenleri temizlemesini (ve bazen sistemi donduran Stop-the-World duraklamalarını) hatırlar.

Oysa gerçek bir sistem mimarisinde Garbage Collection, tüm organizmayı kapsayan bir Boşaltım Politikasıdır:

  1. Ömür Sınırı (TTL - Time to Live) Koymak: Sisteme giren her verinin bir kullanım ömrü olmalıdır. Üç yıl önceki bir kullanıcının parola sıfırlama token'ı neden hâlâ birincil ilişkisel veritabanınızda duruyor? Süresi dolan geçici veriler, Redis veya tablolardan otomatik olarak ihraç edilmelidir.
  2. Tablo Bölümleme (Partitioning): Büyük log tablolarını aylık veya haftalık dilimlere (partitions) bölün. Zamanı geçen bir ayı sistemden temizlemek için DELETE sorgusuyla veritabanını kilitlemek yerine, tek bir DROP TABLE komutuyla o parçayı cerrahi olarak dışarı atın.
  3. Soğuk Depolama ve Arşivleme (Diyaliz Hattı): Canlı veritabanınız bir müze veya çöp kutusu değildir. Yasal olarak saklamak zorunda olduğunuz 5 yıllık geçmiş sipariş verilerini canlı OLTP veritabanından kesin; S3, BigQuery veya soğuk bir veri ambarına (Data Warehouse) tahliye edin. Canlı veritabanınız sadece nefes alan, aktif veriyi taşımalıdır.

Temizlenmeyen Sistem Çürümeye Mahkûmdur

Bir insan ne kadar kaliteli yemek yerse yesin, ne kadar spor yaparsa yapsın; böbrekleri çalışmadığı sürece en fazla birkaç gün hayatta kalabilir.

Bir yazılım da ne kadar kusursuz bir mimariye sahip olursa olsun, ne kadar güçlü sunucularda çalışırsa çalışsın; kendi ürettiği metabolik atıkları düzenli olarak dışarı atacak bir boşaltım disiplinine sahip değilse, eninde sonunda kendi çöplüğünde boğulmaya mahkûmdur.

Veritabanınıza sadece veri yazmayı değil; o veriyi zarafetle ve zamanında dışarı atmayı da öğrenin.

Çünkü hayatta kalmak, sadece tüketmekle değil; atıklardan arınabilme kabiliyetiyle mümkündür.