Ay sonu geldiğinde panelden ciro raporunu indirmek istersin, dışa aktar tuşuna basarsın ve sayfa bir süre döndükten sonra boş bir hata ya da yarım inmiş bir dosyayla karşılaşırsın. Çoğu satıcı bu noktada raporlama modülünü suçlar, hatta "bu e-pin yazılımı kötü yazılmış" diye düşünür. Gerçek çok daha sıkıcı ve çok daha düzeltilebilir: raporun kendisi doğrudur, onu üretmeye çalışan süreç sunucunun izin verdiği sınırların dışına taşmaktadır.
Bu yazıda dışa aktarım hatalarının neden tam olarak işin büyüdüğü ay ortaya çıktığını, hangi dört sınırın sırayla devreye girdiğini ve neden "limiti artır" çözümünün belirli bir noktadan sonra işe yaramadığını anlatacağım. Ardından ciddi bir dijital ürün satış scriptinin bu işi nasıl tamamen farklı bir mimariyle çözdüğünü göreceksin.
Rapor küçükken çalışıyordu, çünkü sınırlar henüz görünmüyordu
İlk aylarda üç yüz siparişin vardı ve dışa aktarım bir saniyede bitiyordu. Bugün otuz bin satırın var ve aynı kod, tüm satırları önce belleğe topluyor, sonra bir dosya nesnesine dönüştürüyor, sonra diske yazıyor. Yani aynı veri bellekte en az iki, çoğu zaman üç kopya halinde duruyor. Otuz bin satırlık bir veri kümesi ham haliyle mütevazı görünse de, nesneye dönüştürülmüş hali onlarca kat yer kaplar.
Bu yüzden dışa aktarım hatası kademeli değil, ani gelir. Yirmi dört bin satırda sorunsuz çalışan işlem, yirmi altı binde hiç çalışmaz. Arada bir uyarı, bir yavaşlama evresi yoktur; çünkü aşılan şey bir performans eşiği değil, kesin bir bellek tavanıdır. Sunucu süreci öldürür ve tarayıcıya çoğu zaman anlamlı bir hata bile ulaşmaz.
Dört ayrı sınır var ve hepsi farklı belirti verir
Dışa aktarımın yolunda üst üste dizilmiş dört kapı bulunur. Birincisi uygulamanın bellek sınırı; aşıldığında işlem sessizce ölür, ekranda boş sayfa görürsün. İkincisi çalışma süresi sınırı; aşıldığında genellikle zaman aşımı mesajı alırsın. Üçüncüsü web sunucusunun ters proxy zaman aşımıdır; burada tarayıcıya ağ geçidi hatası düşer, oysa arkada işlem hâlâ çalışıyor olabilir. Dördüncüsü ise geçici dosya dizininin yazma izni ve disk alanıdır.
Teşhisin ilk adımı hangi kapıya çarptığını belirlemektir, çünkü çözümleri birbirinden tamamen farklıdır. Boş beyaz sayfa bellek; "süre aşıldı" mesajı çalışma süresi; 502 veya 504 benzeri hata ise proxy katmanı demektir. Yarım inen ve açılmayan dosya çoğunlukla çıktının arasına bir uyarı metninin sızdığını gösterir.
| Belirti | Çarpılan sınır | Kısa vadeli müdahale | Kalıcı çözüm |
|---|---|---|---|
| Bembeyaz boş sayfa | Bellek sınırı | Tarih aralığını daralt | Satır satır akışlı üretim |
| Süre aşıldı uyarısı | Çalışma süresi | Süre limitini geçici artır | Arka plan görevine taşı |
| Ağ geçidi hatası (502/504) | Ters proxy zaman aşımı | Proxy zaman aşımını yükselt | Hazır olunca indirme bağlantısı |
| Dosya iniyor ama açılmıyor | Çıktıya sızan uyarı metni | Hata gösterimini kapat | Temiz çıktı tamponu yönetimi |
| Türkçe karakterler bozuk | Kodlama işareti eksikliği | Dosyayı içe aktarırken UTF-8 seç | Çıktı başına kodlama imzası |
| Rakamlar tarihe dönüşüyor | Tablo programının otomatik yorumu | Sütunu metin olarak içe aktar | Alan biçimini çıktıda sabitle |
Neden "bellek limitini artır" kalıcı bir çözüm değil?
Limiti iki katına çıkardığında rapor yeniden çalışır ve sorun çözülmüş gibi görünür. Ancak yaptığın şey duvarı yıkmak değil, birkaç ay ileri taşımaktır. Üstelik bu yaklaşımın gizli bir bedeli vardır: yüksek bellek limiti yalnız rapor için değil, sitenin tüm istekleri için geçerlidir. Yoğun bir saatte birkaç ağır istek aynı anda gelirse sunucu tamamen tıkanır ve dışa aktarım sorunu bir anda site erişilebilirlik sorununa dönüşür.
Doğru yaklaşım, raporun bellekte biriktirilmeden üretilmesidir. Veritabanından satırlar parça parça okunur, her parça anında dosyaya yazılır ve bellekten atılır. Bu yöntemde beş yüz satırla beş yüz bin satır arasında bellek açısından fark yoktur; yalnızca süre uzar. Süreyi de arka plan görevine taşıyarak çözersin.
Dışa aktarım hatalarının teknik kaynak dağılımı
- Bellek sınırı aşımı 45%
- Çalışma süresi ve proxy zaman aşımı 25%
- Ağır sorgu ve eksik indeks 20%
- Kodlama, izin ve biçim sorunları 10%
Sorun raporda değil, sorguda olabilir
Bazı kurulumlarda dışa aktarım kodu kusursuzdur ama arkasındaki sorgu birkaç tabloyu indekssiz birleştirir. Bu durumda veritabanı yanıtı dakikalarca gecikir ve uygulama daha ilk satırı alamadan süre dolar. Belirtisi ayırt edicidir: rapor küçük tarih aralığında bile yavaştır, sayfa sayısı azaltıldığında düzelmez.
Burada yapılacak iş rapor modülüne dokunmak değil, filtrelenen alanlara uygun indeksleri eklemektir. Tarih aralığı, sipariş durumu ve bayi kimliği üçlüsü raporlarda neredeyse her zaman birlikte kullanılır; bu üçlüye uygun bir bileşik indeks çoğu zaman saniyeler süren bir sorguyu milisaniyelere indirir. Sağlıklı bir e-pin satış yazılımı bu indeksleri kurulum sırasında hazır getirir, sonradan aramanı beklemez.
Aynı raporu önce bir günlük, sonra bir haftalık aralıkla çalıştır. Bir günlük de yavaşsa sorun sorguda; sadece uzun aralıkta çöküyorsa sorun bellek ve süre sınırındadır.
Türkçe karakter ve biçim bozulmaları neden hata sanılır?
Dosya iniyor ama içindeki ürün adları anlamsız karakterlerle dolu; ya da stok kodların tablo programında tarihe dönüşmüş. Bunlar teknik olarak "hata" değildir, sistem tam olarak kendisinden isteneni yapmıştır. Fakat işletme açısından rapor kullanılamaz durumda olduğu için hata olarak algılanır.
Çözüm iki tarafı da düşünmekten geçer. Çıktının başına doğru kodlama imzası eklenir, böylece tablo programı Türkçe karakterleri doğru okur. Uzun sayısal kodlar ise metin olarak işaretlenir, böylece otomatik biçimlendirme devreye girmez. Bu iki küçük dokunuş, destek ekibine düşen taleplerin şaşırtıcı bir kısmını doğrudan yok eder. Özellikler bölümünde raporlama tarafının hangi biçimlerde çıktı verdiğini inceleyebilirsin.
Doğru mimari: rapor bir sayfa isteği değil, bir iştir
Kritik zihinsel sıçrama şudur: büyük bir rapor, tarayıcının beklediği bir sayfa yanıtı olarak düşünülmemelidir. O bir iştir. Kullanıcı dışa aktar dediğinde sistem bir iş kaydı oluşturur, kullanıcıya "raporun hazırlanıyor" der ve sayfayı serbest bırakır. Arka planda çalışan işçi satırları parça parça yazar, iş bitince dosyayı saklar ve kullanıcıya bildirim düşer.
Bu kurguda dört sınırın hiçbiri seni bağlamaz. Tarayıcı beklemediği için proxy zaman aşımı anlamsızlaşır, bellek sabit kaldığı için satır sayısı önemsizleşir, arka plan görevinde süre limiti yoktur. Üstüne bir de ilerleme yüzdesi ve hata durumunda anlamlı bir mesaj ekleyebilirsin. Pinova raporlamayı bu yaklaşımla ele alır; büyük dökümler istek hattında değil iş hattında üretilir. Fiyat bölümünde hangi pakette hangi rapor derinliğinin geldiğini görebilirsin.
| Kontrol maddesi | Nasıl doğrulanır | Beklenen sonuç | Öncelik |
|---|---|---|---|
| Rapor akışlı mı üretiliyor | Büyük aralıkta bellek kullanımını izle | Satır arttıkça bellek sabit | Kritik |
| Büyük dökümler arka planda mı | Dışa aktar sonrası sayfa serbest mi | Beklemeden devam edebilmeli | Kritik |
| Filtre alanlarında indeks var mı | Sorgu planını incele | Tam tablo taraması olmamalı | Yüksek |
| Çıktıda kodlama imzası var mı | Dosyayı tablo programında aç | Türkçe karakterler doğru | Yüksek |
| Uzun kodlar metin olarak işaretli mi | Stok kodu sütununa bak | Tarihe dönüşmemeli | Orta |
| Geçici dizin yazılabilir mi | Dizin izinlerini kontrol et | Yazma izni açık | Orta |
| Hata mesajı anlamlı mı | Bilerek çok büyük rapor iste | Boş sayfa değil açıklayıcı uyarı | Orta |
Raporların ay sonunda seni yarı yolda bırakmasın
Akışlı üretim ve arka plan iş hattıyla çalışan bir raporlama altyapısına geç.
Bellek limitini yükseltmek yeterli mi?
Geçici olarak çalışır ama veri büyüdükçe aynı duvara tekrar çarparsın. Üstelik yüksek limit tüm site için geçerli olduğu için yoğun saatlerde risk yaratır.
Küçük aralıkta da yavaşsa sebep nedir?
Bu neredeyse kesin olarak sorgu tarafıdır. Filtrelenen alanlarda indeks eksikliği veya ağır tablo birleştirmesi vardır.
Dosya iniyor ama açılmıyor, neden?
Çıktının içine bir uyarı veya hata metni sızmıştır. Üretim ortamında hata gösterimi ekrana değil log dosyasına yönlendirilmelidir.
Türkçe karakterler neden bozuk geliyor?
Dosyada kodlama imzası yoktur ve tablo programı varsayılan kodlamayı kullanır. Çıktı başına doğru imza eklendiğinde sorun tamamen kalkar.
Raporlama, bir sistemin gerçek ölçeğini en açık gösteren yerdir; çünkü satış sayfası her zaman hızlıdır, asıl sınav ay sonu dökümündedir. Kurulumun bu sınavı geçiyor mu, en hızlı şekilde kendi verine yakın bir hacimle test ederek anlarsın. canlı demo üzerinden geniş tarih aralıklı bir rapor alıp akışın nasıl davrandığını gör, ardından sana uygun paketi seç.

