firebird kayıt performans düşüklüğü

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
penguen
Üye
Mesajlar: 93
Kayıt: 31 Mar 2006 11:58

firebird kayıt performans düşüklüğü

Mesaj gönderen penguen »

Boş bir veri tabanına 10.000 kaydı çabuk kaydederken kayıdın gere kalan kısmında zorlanıyor. 150.000 kaydı gerçekleştirirken nasıl kayıt yapmalıyız? Forumda arkadaşlar 1 milyon kayıttan bahsetdiyorlar acaba onlar nasıl kayıt yapıyorlar? perfomans kaybı nasıl oluyor?

Ben 100.000 kaydı gerçekleştirdiğimde kayıt o kadar yavaş gerçekleşiyorki bitmek bilmiyor.

Yardımlarınızı ve tecrubelerinizi bekliyorum.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
insert yaparken dataset kullanmayın.
query ile kayıtları tek tek insert edin.
biraz karışık oldu sanırım. şöyle açıklayım.
birtane insert sql oluşturun. sonra bunun parametrelerine değer atayarak o insertsql i exec yapın.
birde insert yaptığınız kodları gönderseydiniz bir baksaydık iyi olurdu.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
penguen
Üye
Mesajlar: 93
Kayıt: 31 Mar 2006 11:58

Mesaj gönderen penguen »

Full convert enterpirce saniyede 1.000 kayıt atıyor. Bunu nasıl yapabiliriz? Bana tek tek atmak çözüm gibi gelmiyor...
penguen
Üye
Mesajlar: 93
Kayıt: 31 Mar 2006 11:58

Mesaj gönderen penguen »

Aslında bu kodu insert yapabilmek için daha önce forumda sordum ama beni tatmin etmedi. Hele full convert programı, benim kullandığım koda göre inanılmaz hızlı atıyor. Ben bir buçuk saate kayıt yaparken full convert 10 dakikada kayıt yapıyor. Bu nedenden dolayı bilgilerinize ihtiyacım var. Daha önce bu kadar yüksek (500.000 kayıt) yapmamıştım.

Full convert programının nasıl kayıt gerçekleştirdiğini merak ediyorum.Benim kullandığım kayıdı forum kopyalıyorum. Yardımcı olursanız çok sevineceğim. component mi kullanmalıyım yoksa önerebileceğiniz yöntemler nelerdir?

Kullandığım kod:

Kod: Tümünü seç

sheetcount:=form2.suiListBox3.Items.Count;
form4.suiProgressBar1.Max:=sheetcount;
excel := createOleObject('Excel.application');
book  := Excel.WorkBooks.Open(form2.JvFilenameEdit1.Text);   //book acılıyor...
sheet := book.worksheets[1];
form4.Label6.Caption:=form2.JvFilenameEdit1.Text;
       for i:=1 to sheetcount do
       begin
       sheetname:=excel.Workbooks[1].sheets[i].Name;
       form4.Label3.Caption:=sheetname;
       form4.suiProgressBar1.Position:=i;
       satir:=excel.Workbooks[1].Sheets[i].UsedRange.Rows.Count;
       form4.suiProgressBar2.Max:=satir;
               for islem:=1 to satir do
               begin
               if islem=20000 then
               begin
               DataModule5.IBQuery1.Active:=false;
               DataModule5.IBQuery1.SQL.Text:='select * from TABLO2';
               DataModule5.IBQuery1.Active:=true;
               satiradi:= islem;
               form4.Label4.Caption:=satiradi;
               DataModule5.IBQuery1.Append;
                         for sutun:=1 to 6 do
                         DataModule5.IBQuery1.Fields[sutun-1].AsString :=sheet.cells[satir, sutun];
               DataModule5.IBQuery1.Post;
               form4.suiProgressBar2.Position:=islem;
               Application.ProcessMessages;
                     if durdur=true then break;
               end
               else
               satiradi:= islem;
               form4.Label4.Caption:=satiradi;
               DataModule5.IBQuery1.Append;
                         for sutun:=1 to 6 do
                         DataModule5.IBQuery1.Fields[sutun-1].AsString :=sheet.cells[satir, sutun];
               DataModule5.IBQuery1.Post;
               form4.suiProgressBar2.Position:=islem;
               Application.ProcessMessages;
                     if durdur=true then break;
               end;

                    Application.ProcessMessages;
                     if durdur=true then break;
               end;

       Excel.quit;
       excel:=Unassigned;
end;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

hocam böyle yaparsanız tabiki yavaş olur.
önce bir insertsql hazırlayın.

Kod: Tümünü seç

DataModule5.IBQuery1.Active:=false;
DataModule5.IBQuery1.SQL.Text:='insert into tablo2(alan1,alan2...alann) values (:param1,:param2,...:paramn)';
sonra kendi kodlarınızı yazın

Kod: Tümünü seç

sheetcount:=form2.suiListBox3.Items.Count;
form4.suiProgressBar1.Max:=sheetcount;
excel := createOleObject('Excel.application');
book  := Excel.WorkBooks.Open(form2.JvFilenameEdit1.Text);   //book acılıyor...
sheet := book.worksheets[1];
form4.Label6.Caption:=form2.JvFilenameEdit1.Text;
       for i:=1 to sheetcount do
       begin
       sheetname:=excel.Workbooks[1].sheets[i].Name;
       form4.Label3.Caption:=sheetname;
       form4.suiProgressBar1.Position:=i;
       satir:=excel.Workbooks[1].Sheets[i].UsedRange.Rows.Count;
       form4.suiProgressBar2.Max:=satir;
               for islem:=1 to satir do
               begin 
burdan sonra querynin parametrelerine değerleri atın.

Kod: Tümünü seç

for sutun:=1 to 6 do
   DataModule5.IBQuery1.params[sutun-1].AsString :=sheet.cells[satir, sutun];
sonrada queryi exec yapın.

Kod: Tümünü seç

DataModule5.IBQuery1.execquery;//execsql de olabilir delphiden yazmıyorum.
sonrada bitiş kodları

Kod: Tümünü seç

             Application.ProcessMessages;
                     if durdur=true then break;
               end;

                    Application.ProcessMessages;
                     if durdur=true then break;
               end;

       Excel.quit;
       excel:=Unassigned;
end; 
böyle birşey yap hız farkını göreceksin.
kodlar üzerinde düzenleme yapman gerekebilir. ona göre.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla