firebird 500 kayıt ekleme süresi

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
vampir261
Üye
Mesajlar: 298
Kayıt: 23 Kas 2004 03:22
Konum: Denizli

firebird 500 kayıt ekleme süresi

Mesaj gönderen vampir261 »

Kod: Tümünü seç

    with DataModule1.osssonuc do
    begin
        Append;
        FieldByName('turd').AsInteger:=dersler[0].dogru;
        FieldByName('tard').AsInteger:=dersler[1].dogru;
        FieldByName('cogd').AsInteger:=dersler[2].dogru;
        FieldByName('feld').AsInteger:=dersler[3].dogru;
        FieldByName('matd').AsInteger:=dersler[4].dogru;
        FieldByName('geod').AsInteger:=dersler[5].dogru;
        FieldByName('fizd').AsInteger:=dersler[6].dogru;
        FieldByName('kimd').AsInteger:=dersler[7].dogru;
        FieldByName('biod').AsInteger:=dersler[8].dogru;

        FieldByName('tury').AsInteger:=dersler[0].yanlis;
        FieldByName('tary').AsInteger:=dersler[1].yanlis;
        FieldByName('cogy').AsInteger:=dersler[2].yanlis;
        FieldByName('fely').AsInteger:=dersler[3].yanlis;
        FieldByName('maty').AsInteger:=dersler[4].yanlis;
        FieldByName('geoy').AsInteger:=dersler[5].yanlis;
        FieldByName('fizy').AsInteger:=dersler[6].yanlis;
        FieldByName('kimy').AsInteger:=dersler[7].yanlis;
        FieldByName('bioy').AsInteger:=dersler[8].yanlis;

        FieldByName('turn').AsFloat:=dersler[0].net;
        FieldByName('tarn').AsFloat:=dersler[1].net;
        FieldByName('cogn').AsFloat:=dersler[2].net;
        FieldByName('feln').AsFloat:=dersler[3].net;
        FieldByName('matn').AsFloat:=dersler[4].net;
        FieldByName('geon').AsFloat:=dersler[5].net;
        FieldByName('fizn').AsFloat:=dersler[6].net;
        FieldByName('kimn').AsFloat:=dersler[7].net;
        FieldByName('bion').AsFloat:=dersler[8].net;


        turnet:=dersler[0].net;
        sosnet:=dersler[1].net+dersler[2].net+dersler[3].net;
        matnet:=dersler[4].net+dersler[5].net;
        fennet:=dersler[6].net+dersler[7].net+dersler[8].net;


        szt:=DataModule1.puanlar.FieldByName('szt').AsFloat;
        szs:=DataModule1.puanlar.FieldByName('szs').AsFloat;
        szm:=DataModule1.puanlar.FieldByName('szm').AsFloat;
        szf:=DataModule1.puanlar.FieldByName('szf').AsFloat;

        syt:=DataModule1.puanlar.FieldByName('syt').AsFloat;
        sys:=DataModule1.puanlar.FieldByName('sys').AsFloat;
        sym:=DataModule1.puanlar.FieldByName('sym').AsFloat;
        syf:=DataModule1.puanlar.FieldByName('syf').AsFloat;

        eat:=DataModule1.puanlar.FieldByName('eat').AsFloat;
        eas:=DataModule1.puanlar.FieldByName('eas').AsFloat;
        eam:=DataModule1.puanlar.FieldByName('eam').AsFloat;
        esf:=DataModule1.puanlar.FieldByName('esf').AsFloat;

        FieldByName('sozp').AsFloat:=sztab+turnet*szt+sosnet*szs+matnet*szm+fennet*szf;
        FieldByName('sayp').AsFloat:=sytab+turnet*syt+sosnet*sys+matnet*sym+fennet*syf;
        FieldByName('eap').AsFloat:=eatab+turnet*eat+sosnet*eas+matnet*eam+fennet*esf;

        FieldByName('ogrno').AsString:=ogrno;
        FieldByName('adsoyad').AsString:=ogradsoyadglobal;
        FieldByName('sinavno').AsString:=sinavno;
    end;

    DataModule1.osssonuc.Post;
bu kod ile toplam 500 kayıt yaklaşık 11 saniyede ekleniyor. tabloda sinavno ve ogrno index alanlar olmak üzere, bu süre çok gibi geldi bana. firebird1.5 üzerindeki tablomda 45 alanım var. acaba alan sayısı çok fazla olduğu için olabilir mi. eğer öyle ise bunları iki parçaya ayıracağım. yada sorun iki index kullandığım için olabilir mi? bu konuda bir iki cevap okudum sitede genelde index ile alakalı sorun olduğu yazıyordu. buda belki o türden bir sorundur. ayrıca tabloda veri arttıkça bu süre gitgide atrıyor yani 1000 kayıt olunca 16 saniye gibi muazzam bir seviyeye ulaştı.1500 kayıt varken 500 kayıt ekleme 25saniye. bu normal değil gibi? ama ben firebirde baya yeni geçtim 2 aydır filan kullanıyorum. yardımlarınızı bekliyorum. yada ben bu verileri doğrudan sql ile mi ekleyeyim. :cry:
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Tabi ki indekslerin fazla olması kayıtı yazarken bir de index file lara yazmasını gerektirir. :idea:
Peki şunu sorayım, uygulama anında genellikle böyle anlık olarak yüzlerce kayıt girişi mi olacak? Olmayacaksa bu hız merakınız nedir? :wink:

Not: Malum son günlerde otomobil de hız rekoru kırılarak 388 km/s ye çıktı. Çıktı da bize pratik olarak ne faydası oldu diye sormak lazım :wink: Çünkü otobanda maks hız 130 km/s :?
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
MakPRO
Üye
Mesajlar: 251
Kayıt: 31 Eki 2003 05:21
Konum: Antalya
İletişim:

:)

Mesaj gönderen MakPRO »

en iyisine sahip olma isteği ;en azından kendi açımdan :) .
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

insert trigger i yazmıs iseniz bu da etkileyebilir
eger string alanlar icin index olusturmus iseniz insert hızını etkiler
dediginiz gibi kayıt sayısı arttıkca bu sure dakikalara kadar cıkar
ÜŞENME,ERTELEME,VAZGEÇME
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Indexler geçici olarak deaktif edilebiliyor. Ancak bu olay PK ve FK'lerde yapılamıyor. Gerçi sistem table'ları üzerinde oynayarak yapılabilir.

Bunların dışında indexlere sahipseniz (komuttan emin değilim) "ALTER INDEX IndexAdi INACTIVE" yapıp, kayıt işlemi bittikten sonra yeniden açabilirsiniz. "ALTER INDEX IndexAdi ACTIVE"

Bu komutlar insert esnasında index oluşmasını engeller. Yani index ler güncellenmez. Dolayısıyla bariz bir performans farkı oluşabilir. Index i yeniden açtığınızda index ler yeniden oluşturulur.
Kullanıcı avatarı
vampir261
Üye
Mesajlar: 298
Kayıt: 23 Kas 2004 03:22
Konum: Denizli

Mesaj gönderen vampir261 »

@rsimsek haklısınız hız merakı oldukça fazla bendede var herhalde. bu haftada 1-2 kez yapılacak bir sınavın değerlendirme modülü. burada öğrencilerin doğru yanlış tepitleri gerekli düzeltmeler,frekans analizi gibi işlemler gayet hızlı yaşlaşık 0,06 saniye ancak sonuçları veritabanına yazmak gitgide artıyor. ve hiç hoş değil. algoritma analizinde ki tüm bildiğim yöntemler ile hesaplama kısımlarını baya hızlı yapıyorum. ayrıca record yapılarını da kullanarak ta gayet sade,kolay ve anlaşılabilir bir kod elde ettim. ancak kayıtları veritabanına yazayım deyince böyle bir tablo karşıma çıktı. şimdi öncelikle sınav no ile ogrenci numarasını birleştirerek yeni bir ve tek bir index alan oluşturmayı deneyeceğim. yada @coderlord kardeşimin önerisini yapabilirsem, gecici olarak bunları pasif yapıp sonra aktif hale getireceğim. başka önerisi olan kardeşim varsa önerilerini bekliyorum. teşekkürler. ii çalışmalar
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Table'da toplam kaç kayıt var da 11 Saniye Yavaş diyorsunuz?
Kaç index var, ve indexler hangi alanlardan oluşuyor?
Table'a bağlı FK var mı?
Table'a bağlı Trigger var mı?
Bunları SP'ye taşıyamaz mısınız?

Peki donanım olarak makina nedir? İşletim sistemi? FB Versiyon? Diskler? FB ile çalışan program aynı makinada mı? FB ile program ayrı makinalarda ise, network bağlantı hızı nasıl? Networkde iseniz trafik nasıl?

Gibi pek çok etmen sizin hızınızı etkiler.

Örneğin bugün ben bir deneme yapmıştım, Aynı FB Server üzerinde DBWorkbench DataPump'ı ile bilgileri (16,000,000 kayıt) diğer bir DB'ye attım. Ortalama Okuma ve yazma hızı yaklaşık 6,500 Kayıt / Saniye...

Ama indeks koyup aynı denemeyi yapmaya başladım bu hız 10'da bir düştü diyebilirin. 1 PK 4 İndex hem string hem integer vs. karışık 4 tane indexi var.

Bunları düşünün, etmenleri göz önüne alın şu anki hızınızın yavaş mı yoksa hızlımı olduğuna kendiniz karar vereceksiniz.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
vampir261
Üye
Mesajlar: 298
Kayıt: 23 Kas 2004 03:22
Konum: Denizli

Mesaj gönderen vampir261 »

Hepinize teşekkür ederim. sorunumu çözdüm. indexleri kaldırdım. uygun bir PK ile sorunu çözdüm şu anda toplam hesaplama ve kayıt etme 2-2,5 saniye sürüyor 500 kayıt için.ve bundan önce sql server ile firebirde kayıt ekleyerek denemeler yaptım. sonuçlar beni memnun bıraktı. firebird 5000 append olayını 5,3 saniyede, sql server 5000 kaydı 6,6 saniyede yaptı. 25000 kaydı 27 saniyede ekledi. 25000 kayıt varken üzerine bir 25000 kaydı 21,6 saniyede ekledi.50000 kayıt varken 25000 kayıt daha ekledim. O da 22 saniye sürdü. Maşallah Mercedes gibi gaza bastıkça pardon kayıt ekledikçe açılıyor. Allah firebird ü yazanlardan razı olsun. firebird ü bize şiddetle tavsiye eden kullanmasını öğreten Abilerimizden de Allah razı olsun. herkese ii çalışmalar. kolay gelsin

Not:Bu sonuçları AMD Athlon 1,2 GHZ işlemcili,maxtor ata 7200rpm ultra133 diske sahip, 384MB DDR bellekli bilgisayar üzerinde. Kendi üzerinde kurulu Firebird 1.5 ve Sql Server 2000 ile aynı tablo ve PK ler ile yaptım.
Cevapla