100,000 kayıt inserti, networkde 35 dakika sürüyor, select 1

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

100,000 kayıt inserti, networkde 35 dakika sürüyor, select 1

Mesaj gönderen aLonE CoDeR »

Selamlar.
Sistem özellikleri;
FB 2.0, Win Xp Professional, 512 ram, Celeron 2,6 Cpu, 100 Mpbs network ortamı...

Senaryo detayı;
Delphi7 Enterprise, IBX updateli bileşenlerle erişim.Tablolara erişmek için kullanılan bileşen IBDataset..

Tablo yapısı;
Toplam 17 alan, 1 PK, 1 Date, 2 Char, 2 Integer ve 12 Varchar(20,50 ve 100 size..)

Server makinada ek olarak PhotoShop ile işlem devam ederken, delphi tarafında Append ve Post metodlarıyla kayıt ekleniyor..Süre tam tam tamına 35 dakika...İşlem bitiminde aynı şartlar altında kendi yazmış olduğumuz SQL Mönitöründe söz konusu tablo Select * ... ile çekiliyor, süre 1,3 saniye...

Not : PageSize default değer, herhangi bir değişiklik yapılmadı..

Konu ile ilgili yorumlarınıza başvurmak istedim...

Teşekkürler..
_________________
aLonE CoDeR
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Re: 100,000 kayıt inserti, networkde 35 dakika sürüyor, sele

Mesaj gönderen Terminator »

bLue aLonE yazdı:Selamlar.
Sistem özellikleri;
FB 2.0, Win Xp Professional, 512 ram, Celeron 2,6 Cpu, 100 Mpbs network ortamı...

Senaryo detayı;
Delphi7 Enterprise, IBX updateli bileşenlerle erişim.Tablolara erişmek için kullanılan bileşen IBDataset..

Tablo yapısı;
Toplam 17 alan, 1 PK, 1 Date, 2 Char, 2 Integer ve 12 Varchar(20,50 ve 100 size..)

Server makinada ek olarak PhotoShop ile işlem devam ederken, delphi tarafında Append ve Post metodlarıyla kayıt ekleniyor..Süre tam tam tamına 35 dakika...İşlem bitiminde aynı şartlar altında kendi yazmış olduğumuz SQL Mönitöründe söz konusu tablo Select * ... ile çekiliyor, süre 1,3 saniye...

Not : PageSize default değer, herhangi bir değişiklik yapılmadı..

Konu ile ilgili yorumlarınıza başvurmak istedim...

Teşekkürler..
_________________
aLonE CoDeR
FB2 ile yarattıysan Pagesize 4096 dır. çok eskiden, IB6 ve öncesi 1K idi.

İşlem çok yavaş, yüzlerce sebebi olabilir ama FB2 olmadığını söyleyebilirim.
6 Yıl önce yaptığım bir test vardı, birine cevap yazmak için yapmıştım.
FB 1, AMDK2-350 makina 196MB RAM, 3.5 GB quantum fireball HD.
"saniyede" 3000 kayıt yapıyordu primary keyli seninkine benzer bir tabloya.
Firebird forumunda saniyede onbinlerce kayıt yapanlar vardı makinası iyi olan.
Dataset üzerinden insert etmek yerine, "bufferlamadan" doğrudan insert etmeyi dene. 100,000 kayıtlık bir post ve bunu datasete almak ağır bi iş.
Firebird Foundation Member #208
http://www.firebirdsql.org
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

Sınamada insert ü baz almak doğru değil. Önemli olan çoğu zaman select hızıdır. Ancak Sorgun için bence 1,3 saniye uzun bir süre. 100 bin kayıt abartılacak bir rakam değil. Ancak sorgunun ne olduğuna da bağlı tabi.

@Terminatör' ün söylediği gibi dataset yerine insert sorguları çalıştırarak verileri girersen daha hızlı olacağını tahmin ediyorum. Çünkü dataset çalışma mantığı gereğince eklediği satırları sürekli ramde tutacağı için insert edecek makinede bir yavaşlama sözkonusu olacaktır.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

@Terminator;

Öncelikle cevap için teşekkürler..

Ben de FB'de sorun olmadığını düşünüyorum zira aynı şartlar altında select 1,3 saniye sürüyor..Sorun tahmin ettiğim kadarıyla Dataset nesnesinden kaynaklanıyor..İşleri biraz hafifletince direk insert şeklinde deneyip sonucu buraya yazayım ben.

Tekrar teşekkürler...

Kolay gele..
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

@Ali Erdoğan;

1,3 Saniye 100,000 kayıt için neden uzun bi süre? Sorgu aynı tablo üzerinde "Select * from tablo " şeklinde çekiliyor, bir buçuk saniye bile sürmüyor, bu gerçekten uzun bi süre mi?
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

bLue aLonE yazdı:@Ali Erdoğan;

1,3 Saniye 100,000 kayıt için neden uzun bi süre? Sorgu aynı tablo üzerinde "Select * from tablo " şeklinde çekiliyor, bir buçuk saniye bile sürmüyor, bu gerçekten uzun bi süre mi?
:) ben "select * from tablo where primary_key=" gibi bir sql cümlesi düşünmüştüm. Zirâ 100 bin kayıt bulunan bir tablodaki bütün kayıtları çekmek çok istisnai durumlar haricinde kullanıcının bir işine yaramaz. Zaten 100 bin kayıt çektiğinde burada iş veri tabanından çok ağ performansına kalıyor. 1,3 saniye seçim değil verilerin gelip rami işgal etme süresi.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Benim amacım da bu işlemin bu kadar uzun sürmesine istinaden select çekmenin maliyetini bulmaktı yani test için yaptım.Elbetteki 100,000 kaydı aynı anda oluşturmak söz konusu olmaz güncel hayatta (gene de kesin konuşmamak gerek, istisnalar çıkabilir..).Ama aynı şartlar altında bir insert'in (dataset nesnesiyle de olsa..) bu kadar sürmesi beni şaşırttı.Olayı bir de insert into ile ilk fırsatta deneyeceğim.

Kolay gele..
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Eğer insert işlemi yaptığın kod bloğunu gönderirsen belki problem daha rahat tespit edilecektir.

Ben problemin kaynağının şunlardan birisi olabileceğini düşünüyorum:

1. DataSet nesnesinin afterpost, beforepost, onnewrecord, beforeinsert vs. gibi eventlerinde ekstra işlem yaptırıyor olabilirsin (örneğin Refresh gibi).

2. Toplu kayıt girerken DataSet nesnelerini DisableControls ve EnableControls yapmamış olabilirsin ve her kayıttta bağlı komponentleri update ediyordur.

3. En iyisi sen bize insert kodlarını ve DataSet'in event kodlarını (afterpost vs.) gönder. Galiba en iyisi bu olacak.

Zira 100.000 kayıt için 35 dakika ancak BLOB alanlar falan varsa mümkün. Zaten sen de yok demişsin.

İyi çalışmalar.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

@Hakan Can;

Kodları buraya yazmam firma prensipleri gereği mümkün değil.Biz DataSet nesnelerinin On... eventlerine kod yazmıyoruz hiçbir zaman..Enable ve Disable kontrolü yapılıyor..Olay DataSet nesnesinin verileri buffera almasından kaynaklanıyor (yanılmıyorsam..).Değişik alternatifler üzerinde testler yapıyorum, net bir sonuca ulaşınca topice yazacağım.İlgin için teşekkürler..

Kolay gele..
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Tekrar selamlar.
Olayı Insert Into ile denedim, süre 8,36 dakika.Ortalama saniyede 194 kayıt insert ediyor.Network ortamından sıyrılıp lokalde denedim değişen birşey olmadı.PK için tanımladığım Insert Trigger'ini disable yaptım, (PK'yı manuel veriyorum..) gene değişen birşey olmadı..İlginç..
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Mesaj gönderen Terminator »

bLue aLonE yazdı:Tekrar selamlar.
Olayı Insert Into ile denedim, süre 8,36 dakika.Ortalama saniyede 194 kayıt insert ediyor.Network ortamından sıyrılıp lokalde denedim değişen birşey olmadı.PK için tanımladığım Insert Trigger'ini disable yaptım, (PK'yı manuel veriyorum..) gene değişen birşey olmadı..İlginç..
peki, 100,000 kaydın boyuna eşdeğer bir dosyayı (mesela 50MB)
aynı diske paste eder misin.. yani diskinin yazma performansına bir bakalım.

Bir de unutmadan, dosyanın soyadı ne? GDB mi? öyleyse, FDB yapıp dener misin... bir windows sistem dosya soyadıyla aynı oldugu için system restore GDB dosyalarını felç ediyor. system restoreyi kapatarak da deneyebilirsin.
Firebird Foundation Member #208
http://www.firebirdsql.org
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 »

Selamlar,

Aslında süreler çok da kötü değil ! Saniyede 194 Kayıt fena bir hız değil ama daha da hızlı yapılabilir kanaatindeyim. Ben bloblu kayıtlarda aşağı yukarı o sayıları elde ediyorum.

Ama Photoshop ile aktif olarak çalışılıyor mu o anda? Yada FB'nin çalıştığı makinada o anda çalışan başka bir şey var mı? Windows Güvenlik Duvarı açık mı? Virüs tarayıcı var mı ? Vs. vs.

Performans çok ilginç bir konudur, bir sürü etmen olabilir. Diskler nasıl? IDE, SATA, SCASI ?


gibi gibi
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
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 »

Haa bir de,

IB Bileşenlerinde IBSQL adı altında (Üzerinde Yıldırım işareti bulunan) bir component var. Onunla deneyin. O normal SQL componentinden çok daha hızlı yapar. Unidirectional çalıştığı için prepare edersiniz çağırmadan önce, sonra parametreleri basr gönderirsiniz. Ondan sonraki döngülerde hiç Prepare ettirmeden PAramByName .... Zank diye EXECSQL çekersiniz.

Daha da hızlanır programınız.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

@Terminator;

45.5 Mb bir klasör 12 saniyede paste edildi, anormal değil gibi..Dosya uzantısı FDB, GDB kullanmayı pek tercih etmiyoruz..GDB dosyası hakkında yeni birşey öğrenmiş olduk bu arada OS'la çakışması söz konusu olabilirmiş, bunu gözönünde bulundururuz artık..

@Kuri_YJ;

Aslında zaman pek anormal değil ama yine de gerek tecrübe edinmek açısından ve gerekse stabiliteyi maksimum tutmak adına fırsat buldukça olayı irdelemek gerektiğini düşünüyorum.Test yapan arkadaşlar da sürenin abartılacak düzeyde olmadığını beyan ettiler gerçi ama...Ek olarak, güvenlik duvarı kapalı, herhangi bir antivirüs yazılım çalışmıyor ve maalesef disk hakkında hiçbir bilgim yok, zira hiç fırsat olmadı bakmaya makinalar geldi geleli.Beni şaşırtan konu ise select çektiğim nokta..Bu kadar kısa süreceğini tahmin etmiyordum insert süresini görünce..Bir de ilk fırsatta, söylediğin gibi IBSQL bileşeniyle test edicem.İlerleyen günlerde olayı diğer erişim componentleriyle de yapmayı düşünüyorum.Sonuçları buraya yazarım yine..

İlginiz için teşekkürler..

Kolay gelsin..
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Mesaj gönderen Terminator »

45MB için 12 saniye az değil, senin disklerin sanırım yazma performansı düşük. 5 yıl önceki diskim bile 30MB/sn işlem yapıyordu.
45MB klasörü, aynı diskten okuyup yazsan bile, en kötü ihtimalle 2 saniyeyi okumaya ayıralım, 3 saniyeyi de yazmaya ayıralım yine de 5 saniye eder.
FB de bir sorun olmadığına eminim çünkü insert ve selectler FB nin en güçlü yanları sayılabilir, her ikisi de sharing-lock dışı işlemler.
Normal bir makina bile kullansan, saniyede en az 2000 kayıt yapabilmen lazım o söylediğin yapıdaki bir tabloya.
En iyisi sen aynı uygulamayı temiz ve farklı bir makinada dene.
Sistemle ilgili sorunun var sanırım ve bu sohbet edilerek anlaşılamayabilecek kadar complex bir durum.
daha önceki topiclerde de söylediğim gibi, makinanda saçma sapan çalışan bir antivirus antibilmemne gibi dosya takibi ve kontrolü yapan programlar olabilir, her okuma ve/veya yazma işleminde devreye girip sistemi kıvrandırabilir bazıları, ya da saçma sapan I/O yapan bir proses. Task manager kullanıp bunları sürekli takip etmen gerekir. vs vs..
Hele hele günlerdir burda konuştuğum cluster sizeın 4096 dan küçükse, hiiç gözüme gözükme!!! :)
Firebird Foundation Member #208
http://www.firebirdsql.org
Cevapla