ADO Query sorgu hızı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: ADO Query sorgu hızı
Bu iki sorgu arasındaki tek fark UrunID ve UrunAD arasında. Eğer fark buysa süre bu kadar farklı olmamalı. Ancak join varsa ve UrunAD bu joinli dosyadan alınıyorsa bu süre farkı olabilir. Bunun için işletimi ya da işlemleri değiştirerek farklı çözümler gerçekleştirmeniz gerekir. Örneğin sayfalama yapabilirsiniz. Eğer rapor içinse, yani sayfalama yapılamıyorsa UrunAD'ı almayıp en son yazdırırken dosyadan okutabilirsiniz vs...
Re: ADO Query sorgu hızı
Merhaba,opordace yazdı: 05 Şub 2018 05:07 Merhaba Arkadaşlar,
1.2 milyon kayıtlı bir database den
Select AdisyonID,UrunID from vw_ext_SipSatis_Gecmis' sorgusu ile 8 sn ye DBGrid e yüklüyorum.
Select AdisyonID,UrunAD from vw_ext_SipSatis_Gecmis' sorgusu ile yaklaşık 3 dk sürüyor. urunID integer, UrunAD string, sorgu süresi bu kadar farkeder mi arkadaşlar. UrunAD sorguda yazmadığımda sorgu sonucunu yazdırırken mecbur ürün ismini kullanacağımdan orada hata veriyor, bulunamadı filan diye. Bu sorguyu hızlandırmanın başka bir yolu varmı?
Öncelikle;
- Kullandığınız database bilgisini paylaşmamışsınız.
- Her iki komut için database sisteminin oluşturduğu çalışma planını paylaşmamışsınız.
Integer ve string bilgileri okuma süresi muhakkak farkeder. Integer için yüksek olasılıkla 4 byte (maksimum 8 byte) veri okumak yeterli iken string için değişken uzunluklarda veriler okunacaktır. Alanlarınızda kayıtlı ortalama 10 karakter veri var ise disk üzerinden 20 byte (utf-8 veri kaydedildi ise bri karakter için 2 byte kullanılabilir) okumak gerekli olabilir.
Ancak sizin yaşadığınız sorunun bu olduğunu düşünmüyorum. Olası sebepler olarak:
1) Eğer "SQL Server Express" sürümünü (ücretsiz sürümünü) kullanıyor iseniz bu durumda RAM kullanım limiti sorunu yaşıyor olabilirsiniz. İlk select çalıştırıldığı zaman SQL Server sorgulama bilgilerini bir sonraki işlemi hızlandırmak için "cache" içine alır. Eğer farkl sorgular sonucu cache için kullanılan veri 1GB limitlerine ulaşır ise akabinde çalıştırılacak komutlar cache yerine disk üzerinden okuma yapılarak yine cache içinde yer açılıp hafızaya kaydediliyor olacaktır.
2) Eğer tablonuzda AdisyonID ve UrunID için indeks oluşturulmuş ancak AdisyonID ve UrunAD için indeks oluşturulmamış ise ilk srogu indeks üzerinde arama yaparak hızlı olarak sonucu çevirebilir iken ikinci sorgu 1.2 milyon kayıdı sıralı olarak tarama yapıyor olabilir.
Bunlar dışında farklı bir sebep olabilir. Tespiti ancak her iki sorgu için oluşturulan "plan" bilgilerini gördükten sonra mümkün olacabilir.
Re: ADO Query sorgu hızı
Cevabınız için teşekkür ederim. SQL Server 2008 Express (ücretsiz sürümünü kullanıyorum evet) Çalışma planı;
ADOQuery1.Connection:=Adoconnection1;
ADOQuery1.Close;
ADOQuery1.sql.clear;
ADOQuery1.SQL.Add('Select AdisyonID,UrunID,BirimFiyat,Adet,UrunToplam,SipSubeID from vw_ext_Sipsatis_Gecmis');
ADOQuery1.open;
Datasource1.DataSet:=ADOQuery1;
DBgrid1.DataSource:=datasource1;
Bu şekilde DBgrid'e aktarıyorum, UrunID yerine UrunAD yazınca süre uzuyor.
ADOQuery1.Connection:=Adoconnection1;
ADOQuery1.Close;
ADOQuery1.sql.clear;
ADOQuery1.SQL.Add('Select AdisyonID,UrunID,BirimFiyat,Adet,UrunToplam,SipSubeID from vw_ext_Sipsatis_Gecmis');
ADOQuery1.open;
Datasource1.DataSet:=ADOQuery1;
DBgrid1.DataSource:=datasource1;
Bu şekilde DBgrid'e aktarıyorum, UrunID yerine UrunAD yazınca süre uzuyor.
Re: ADO Query sorgu hızı
Evet aslında sayfalama yapmıyorum, UrunAD alanını kullanmadığımda oluşan sorgu sonucunda table den kayıt okurken UrunAD alanını okuyamıyorum, bunu nasıl yapacağım.kerpeten yazdı: 06 Şub 2018 02:48 Bu iki sorgu arasındaki tek fark UrunID ve UrunAD arasında. Eğer fark buysa süre bu kadar farklı olmamalı. Ancak join varsa ve UrunAD bu joinli dosyadan alınıyorsa bu süre farkı olabilir. Bunun için işletimi ya da işlemleri değiştirerek farklı çözümler gerçekleştirmeniz gerekir. Örneğin sayfalama yapabilirsiniz. Eğer rapor içinse, yani sayfalama yapılamıyorsa UrunAD'ı almayıp en son yazdırırken dosyadan okutabilirsiniz vs...
Re: ADO Query sorgu hızı
Bu gönderdiğiniz bilgi Delphi içinde bilgiyi nasıl okuduğunuz ile ilgili. Benim bahsettiğim PLAN ise SQL Server Management Studio üzerinde aynı SQL komutunu parametreleri elle yazarak "bana planı göster" şeklinde elde edilecek olan bilgi. İkisi tamamen farklı şeylerdir.opordace yazdı: 06 Şub 2018 10:34 Cevabınız için teşekkür ederim. SQL Server 2008 Express (ücretsiz sürümünü kullanıyorum evet) Çalışma planı;
ADOQuery1.Connection:=Adoconnection1;
ADOQuery1.Close;
ADOQuery1.sql.clear;
ADOQuery1.SQL.Add('Select AdisyonID,UrunID,BirimFiyat,Adet,UrunToplam,SipSubeID from vw_ext_Sipsatis_Gecmis');
ADOQuery1.open;
Datasource1.DataSet:=ADOQuery1;
DBgrid1.DataSource:=datasource1;
Bu şekilde DBgrid'e aktarıyorum, UrunID yerine UrunAD yazınca süre uzuyor.
Re: ADO Query sorgu hızı
SQL Server Management Studio üzerinde aynı SQL komutunu parametreleri elle yazdım, çalıştırabiliyorum, ama planı göster nedir bilmiyorum, nasıl yapacağımı da bilmiyorum maalesef
Re: ADO Query sorgu hızı
SQL Server Management Studio da sql komutunu yazdım, tablo yu açmaya başladı, 15 dk oldu hala bitiremedi, görüntüsü ektedir. Bu bir fikir verirmi size bilmem.
- Dosya ekleri
-
- sql.jpg (2.55 KiB) 3002 kere görüntülendi
Re: ADO Query sorgu hızı
vw_ext_Sipsatis_Gecmis view için create komutunu paylaşabilir misiniz?
Re: ADO Query sorgu hızı
Anlamadım maalesefertank yazdı: 06 Şub 2018 10:20 vw_ext_Sipsatis_Gecmis view için create komutunu paylaşabilir misiniz?
Re: ADO Query sorgu hızı
SQL Server Management Studio içinde "vw_ext_Sipsatis_Gecmis" view nesnesini sol taraftaki kısımda bulup üzerinde sağ tuş ile tıklayın.
Menüden "Script View as" -> "CREATE To" -> "New Query Editor Window" seçeneğini seçin.
Kaşınıza gelen sayfa içindeki bilgileri burada paylaşın.
Menüden "Script View as" -> "CREATE To" -> "New Query Editor Window" seçeneğini seçin.
Kaşınıza gelen sayfa içindeki bilgileri burada paylaşın.
Re: ADO Query sorgu hızı
ertank yazdı: 09 Şub 2018 11:40 SQL Server Management Studio içinde "vw_ext_Sipsatis_Gecmis" view nesnesini sol taraftaki kısımda bulup üzerinde sağ tuş ile tıklayın.
Menüden "Script View as" -> "CREATE To" -> "New Query Editor Window" seçeneğini seçin.
Kaşınıza gelen sayfa içindeki bilgileri burada paylaşın.

- Dosya ekleri
-
- sqlhata.jpg (1.93 KiB) 2969 kere görüntülendi
Re: ADO Query sorgu hızı
Dosya eki çok küçük olduğu için gözükmüyor.
Anlayabildiğim kadarıyla bir hata mesajı almışsınız. Bahsettiğim işlem sonucunda karşınıza yeni bir SQL editor gelip içinde
yazan ifadeler olması gerekli.
Anlayabildiğim kadarıyla bir hata mesajı almışsınız. Bahsettiğim işlem sonucunda karşınıza yeni bir SQL editor gelip içinde
Kod: Tümünü seç
CREATE VIEW vw_ext_Sipsatis_Gecmis
Re: ADO Query sorgu hızı
Aşağıdaki hatayı veriyor.
scrip Failed for View dbo.vw_ext_Sipsatis_Gecmis (Microsoft.sqlserver.smo)
Addinational İnformation:
Property TextHeader is not avaible for [View dbo.vw_ext_Sipsatis_Gecmis] this propety may not exist for this object, or may not be
retrievable due to insufficient access rights. The text is encrypted.(Microsoft.sqlserver.smo)
scrip Failed for View dbo.vw_ext_Sipsatis_Gecmis (Microsoft.sqlserver.smo)
Addinational İnformation:
Property TextHeader is not avaible for [View dbo.vw_ext_Sipsatis_Gecmis] this propety may not exist for this object, or may not be
retrievable due to insufficient access rights. The text is encrypted.(Microsoft.sqlserver.smo)
Re: ADO Query sorgu hızı
Database bağlantısı için elinizde tek bir bağlantı bilgisi var ise bu kullanıcının view detay bilgilerine erişim yetkisi yok diye anlıyorum. Eğer kullanıcı adı kullanmadan bağlanıyor iseniz active directory veya windows kullanıcısının yetkisi yok yüksek ihtimalle.
Mümkün ise tam yetkili bir kullanıcı ile aynı işlemi deneyin.
Eğer database yöneticisi var ise her iki komutunuz için (hızlı ve yavaş çalışan) execution plan bilgilerini metin olarak size iletmesini rica edin.
Mümkün ise tam yetkili bir kullanıcı ile aynı işlemi deneyin.
Eğer database yöneticisi var ise her iki komutunuz için (hızlı ve yavaş çalışan) execution plan bilgilerini metin olarak size iletmesini rica edin.
Re: ADO Query sorgu hızı
Tamam, çok teşekkür ederim. Size başka bir soru sorabilirmiyim. Aşağıda iki ayrı view den iki ayrı sorgu yaptım ve bu sorgularla istediğim sonucu alabiliyorum. 1. Sorgu sonucuna ikinci sorgudaki kullanilanToplam alanını eklemek istiyorum, şart 1. Sorgudaki MainId nin karşısına 2. Sorgudaki MalzemeId aynı olan kayıttaki KullanilanToplam alanını eklesin. İnner join ile yaptım rakamlar bazıları 3 kat bazıları 6 kat fazla gözüküyor, bir yerde yanlışlık yaptım.ertank yazdı: 11 Şub 2018 08:25 Database bağlantısı için elinizde tek bir bağlantı bilgisi var ise bu kullanıcının view detay bilgilerine erişim yetkisi yok diye anlıyorum. Eğer kullanıcı adı kullanmadan bağlanıyor iseniz active directory veya windows kullanıcısının yetkisi yok yüksek ihtimalle.
Mümkün ise tam yetkili bir kullanıcı ile aynı işlemi deneyin.
Eğer database yöneticisi var ise her iki komutunuz için (hızlı ve yavaş çalışan) execution plan bilgilerini metin olarak size iletmesini rica edin.
ADOQuery2.SQL.Add('Select Sube,MainId,StokEtki,MlzAd,SUM(Case When HareketTip=1 Then MlzAdet*MainCarpan else 0 end) as Çıkan,AVG(Case When HareketTip=0 Then SumStokBirim end) as Ortalama,SUM(Case When HareketTip=0 or HareketTip=5 Then MlzAdet*MainCarpan else 0 end) as Gelen');
ADOQuery2.SQL.Add('from vw_ext_StokHareket');
ADOQuery2.SQL.Add('Where StokEtki=1 and Sube=1 GROUP BY Sube,MlzAd,StokEtki Order BY MlzAd ASC');
ADOQuery4.close;
ADOQuery4.sql.clear;
ADOQuery4.SQL.Add('Select MalzemeId,SUM(KullanilanToplam) as Kullanım from vw_ext_Mlz_Kullanim Where Sube=1 Group By MalzemeId Order By MalzemeId');
ADOQuery4.open;