← Blog

1.500 KULLANICILI BİR KURULUMDA 32-BİT TAŞMASI: VENDOR'IN ÇÖZEMEDİĞİ ARIZAYI NASIL BULDUK

Kurumsal bir müşterinin izleme platformunda haftalarca süren veri bozulmasının kök nedenini kendimiz izole ettik — vendor'ın resmi güncellemesi çözmedi, biz PostgreSQL'de 32-bit bir sayaç taşmasını bulup kalıcı olarak düzelttik.

1.500 kullanıcılı, kurumsal bir müşteride çalışan izleme (UAM/DLP) platformunun verimlilik raporları bir sabah aniden anlamsızlaşmaya başladı. Normalde günlük ortalama 7-7,7 saat olan aktif çalışma süresi, bir günde ~1,3 saate düştü — sanki tüm şirket birdenbire çalışmayı bırakmış gibi görünüyordu. Veri hatası değildi; altyapıda gerçek bir arıza vardı.

Bu yazı, vendor'ın resmi çözümünün işe yaramadığı, kök nedeni kendimiz bulup kalıcı olarak çözdüğümüz gerçek bir vakanın kaydı.

Belirti: raporlar aniden çöküyor

Dönem Ort. günlük aktif süre "4 saat altı" kullanıcı oranı
Normal dönem ~7,7 saat %6–9
Arıza günü 1,35 saat %99,3
Arıza sonrası (haftalarca) ~1,3 saat %99+

Kırılma bir günde tam etkisini gösterdi ve haftalarca sürdü — müşteri "sistem bozuk" diye şikayet etti, biz de veriyi teknik olarak inceledik: rakamlar doğruydu, ama normal çalışma performansını yansıtmıyordu.

Kök neden: her 15 saniyede bir çöken bir servis

Platformun ana izleme servisi, arka planda ~15 saniyede bir çöküp yeniden başlıyordu. Sebep: PostgreSQL'deki bir ek-dosya tablosunun birincil anahtar sayacı (sequence), 32-bit integer'ın maksimum değerine (2.147.483.647) ulaşmıştı. Servis her çöktüğünde, işletim sistemi o anda açık olan tüm ajan bağlantılarını sıfırlıyordu.

Sonuç zincirleme bir bozulmaydı:

  • İzleme oturumları sürekli 15 saniyelik parçalara bölünüyordu.
  • Aktivite kayıtları kesik ve eksik oluşuyordu.
  • "Aktif çalışma süresi" hesaplaması, gerçek sürenin çok küçük bir kesrini yansıtıyordu.

Vendor'ın resmi güncellemesi neden yetmedi

Vendor'ın önerdiği resmi güncelleme paketini uyguladık — sorun devam etti. Güncelleme, sayaç kolonunun veri tipini değiştirmiyordu; sadece değeri geçici olarak sıfırlıyordu. Bir süre sonra sayaç yeniden maksimum değere ulaştı ve çökme döngüsü tekrar başladı.

Kendi tarafımızda kök nedeni izole ettik: sorun güncellemenin kapsamadığı bir veri tipi sınırıydı, semptomların tekrarı bunun kanıtıydı.

Kalıcı çözüm

Resmi güncelleme yolunun dışına çıkarak, üretim ortamında ilgili kolonun veri tipini 32-bit integer'dan 64-bit bigint'e yükselttik:

ALTER TABLE <tablo> ALTER COLUMN <sayaç_kolonu> TYPE bigint;

Yeni maksimum değer (~9,2 katrilyon) pratikte hiçbir zaman dolmaz. Değişiklik sonrası servis kesintisiz çalışmaya, veri akışı normale döndü — arıza bir daha tekrarlamadı.

Bunu proaktif yakalamasaydık, müşteri ilk iş gününde tüm raporlarının aylarca yanlış olduğunu keşfedip ciddi bir eskalasyon başlatacaktı. Bulguyu ayrıca vendor'a da resmi olarak bildirdik: bu tip veri tipi migrasyonlarının resmi güncelleme paketine dahil edilmesini ve benzer kurulumların proaktif denetlenmesini önerdik.

Çıkarımlar

  • "Resmi güncelleme uyguladık" bir garanti değildir. Bir güncellemenin sorunu kapsadığını varsaymak yerine, düzeltmenin gerçekten neyi değiştirdiğini kontrol edin.
  • Semptom tekrarı, kök nedenin bulunmadığının en net işaretidir. Geçici bir iyileşme sonrası sorun geri geliyorsa, çözüm veriyi değil sadece belirtiyi sıfırlamış demektir.
  • Sayısal sınırlar (32-bit, vs.) sessiz zaman bombalarıdır. Yoğun trafikli, uzun süre çalışan sistemlerde bu tip sayaç kolonlarının kapasitesi düzenli olarak denetlenmeli.
  • Kendi altyapınızı izlemek, vendor'ı beklemekten daha hızlıdır. Kök nedeni kendimiz bulduğumuz için müşteri bir sonraki iş gününe sağlıklı raporlarla başladı.

Bu konuda daha fazla bilgi almak ister misiniz?

Yazıda anlatılan çözümü kendi altyapınızda da hayata geçirmek ya da benzer bir ihtiyacı konuşmak isterseniz, ekibimizle iletişime geçin.

Bize ulaşın →