Forumda pek çoğumuz çeşitli DB'leri kullanıp çeşitli uygulamalar geliştiriyoruz. Ancak sıklıkla karşılaştığımız bir soru Firebird büyük verileri kaldırabilir mi? Performansı ne olur gibi.
Size kendi yazdığım bir uygulamadaki son veri analizlerimi ve gözlemlerimi aktaracağım. Yalnız bunları yazmadan önce İngiliz'lerin bir ata sözünü hatırlatacağım "Eğer bir yerden haber yoksa, haberler iyi demektir." Daha sonra bu atasözünü neden yazdığımı da açıklayacağım.
Yazmış olduğumuz mutlak surette online çalışması gereken bir çağrı merkezi programımız var. Her türlü Telefon eventlerini Database üzerine kaydediyoruz. Örneğin. Arama başlatıldı, Karşı Taraf Açtı, Kuyruğa Alındı, Müşteri Temsilcisine aktarıldı, Müşteri temsilcisi açtı, görüştü, kapattı, sonuçlandırdı. Bu sırada yapılan diğer işlemler de cabası. Yani İstatistiksel anlık hesaplamalar, arama tahminlemeleri, yanıtsız çağrıların kaydedilmesi, yeniden yapılandırılması, tekrar arama zamanlarının set edilmesi, 15 dakikalık intervaller halinde Cube datası oluşturulması gibi. Bunlara da ek olarak, anlık izleme ekranlarında, o anda kaç kişi konuşuyor, kaç kişi satış yaptı, kaç kişi molada vs. vs. gibi sorgular (2-3) saniyede bir en az 5 ekranda sürekli yenileniyor. Daha da fazlası, raporlama uzmanları da sistemden günlük saatlik aylık haftalık gibi çeşitli raporlar çekip üzerinde çalışıyorlar.
İşin genel şekli bu ve bahsettiğim işin göbek taşında Firebird oturuyor. Toplamda 3 Ayrı Database aynı sunucu üzerinde bulunuyor.
Sunucu Sanal bir sunucu, 32 Bit Windows 2003 Server R2
Toplam bellek 3,75 GB, 4 Çekirdek tanımlı 2,93 Ghz. Çekirdek hızı var.
Databaselerden birinde yaklaşık 13,000,000 Kayıt mevcut (Sadece 1 tabloda) Diğer tablolardaki kayıt sayısı bunun yanında hiç kaldığından söylemiyorum. Ancak bu daha çok raporlama için kullanılıyor. OLAP CUBE için databasede ise tablolarda bulunan kayıt sayıları sıra ile 2,5 milyon, 1 milyon, 750 bin, 450 bin, 450 bin .... diyerek giden toplam 10 kadar tablosu mevcut.
Aynı anda sisteme bağlı connection sayısı yaklaşık 80-100 arası. (Sistem servisleri de dahil gerçi onların toplam sayısı 10'u bulmaz)
Şimdi gelelim yukarıda bahsi geçen şartlardaki çalışma ortamında Firebird'ün performansına. İnceleme yaptığımda beni de hayrete düşüren bir rakam ile karşılaştım.
Bir gün içerisinde 110,000 Kadar kişi kaydı üzerinde işlem yapılmış. Bu 110,000 Kaydın işlenebilmesi için yaklaşık 15 civarında hareket kaydı oluşturulması (Insert/Update/Delete) gerekiyor. Toplam çalışma saati 9.
Bu da 9*60*60= 32,400 Saniye yapar. 110,000 Kayıt * 15 = 1,650,000 Hareket (Insert/Update/Delete) demek oluyor. Bunu 32,400'e bölersek, o da yaklaşık olarak saniyede 50 Hareket demektir (Insert/Update/Delete)
Bakın dikkatinizi çekerim, yukarıdaki I/U/D Hareketleri dedim, hiç SELECT'ten veya JOIN'lerden bahsetmedim. Bu hareketlerin en az 5 Katı SELECT vardır (Fazlası vardır eksiği yoktur.) O da yaklaşık 8,250,000 SELECT cümlesi yapar.
8,250,000 SELECT / 32,400 Saniye = Yaklaşık 255 SELECT cümlesi eder. Dikkatinizi bir noktaya daha çekmek isterim ki, SELECT cümlesi bazen 1 Kayıt döndürdüğü gibi bazen de 1,000 Kayıt döndürebilir. Ben SELECT'lerdeki kayıt sayısını değil, sistem tarafından kaç defa SELECT komutu kullanıldığını hesapladım.
Yukarıdaki Sanal makine Saniyede 50 I/U/D ve 250 SELECT cümlesi işleyebilmiştir.
Gelelim bu verinin ne zaman elde edildiğine, işte bu işlemler Geçene Sene Şubat ayında bir firmanın verilerinden elde ettim (hatta az önce göz gezdiriyordum bir bakayım dedim bu sonuçları elde ettim).
Şimdi baştaki İngiliz Atasözünü hatırlatıyorum. Bu firmaya programı kurduğumuzdan beri bir şikayette bulunmadı. Demek ki performanstan gayet memnunlar. Bu rakamları da bir buçuk yıl öncesinde elde etmişler. Eğer bir sıkıntı olsaydı haberimiz olurdu.
Bu noktada FB geliştirmenlerini ayakta alkışlıyorum, onlara selam olsun









Umarım bu yazdıklarım da Firebird'ü tercih etmekte tereddüt eden arkadaşlara, Firebird'e güvenemeyen, endişe ile bakan arkadaşlara bir kanıt teşkil eder.
Biz kullanıyoruz ve gayet memnunuz. Darısı kullanmayanların başına

Herkese İyi Akşamlar.
Kolay Gelsin
Adnan