Forum
şimdi ilginç ama şöyle bir durum var.
SELECT DISTINCT fieldlar.. from View WHERE (IslemTarihi between
CONVERT(DATETIME,@IlkTarih,104) AND
DATEADD(day,1,CONVERT(DATETIME,@SonTarih,104)) ) AND ( Derece >= @Derece)
Bu sql cümlesini SP içinden çalıştırdığımda 1.30 dakika sürüyor...(group by ilede denedim)
sql cümlesini SP içerisine parametreler girilmiş olarak koyduğumda
yani:
SELECT DISTINCT fieldlar.. from View WHERE (IslemTarihi between
CONVERT(DATETIME,'03.07.2009',104) AND
DATEADD(day,1,CONVERT(DATETIME,'03.07.2009',104)) ) AND ( Derece >= 1)
bu şekilde ise sıfır saniyede sonuç dönüyor. veya bunu SQL management studioda ben kendim çalıştırdığımda da sıfır saniyede dönüyor.
diğer ilginç olay ise bu parametrik SQL cümlesini dinamik olarak oluşturup EXEC (@sql) gibi çalıştırdığımda yine sıfır saniyede sonuç dönüyor.
ben nedenini anlayamadım.
Not: tablolar kabarık biraz.. birinde 110milyon kayıt var.
SP execution planla baktığımda bir sürü dallanmalar oluyor. onuda pek anlayamadım. aynı sqli managemen studio ile çalıştırdığımda çok daha az dallanama söz konusu oluyor.
Merhaba;
Sp içinde select ten önce aşağıdakini komutu eklermisiniz.
set
transaction isolation level read uncommittediyi çalışmalar.
merhaba,
malasef dediğiniz ifade ile 20-30 saniye kadar hızlandı..yine 1 dakikadan fazla sürüyor..
DB yi test için şişirdik.. şu an anlık veri girişi falanda yok. başka sorgu, işlem yok.
parametrik sabit SQLi SP nin daha kolay yorumlaması daha performanslı çalıştırmasını beklerken tam tersine çalıştıracağı sql bilmeyen, hangi indexleri kullanacağını bilmeyen EXEC aynı SQL li nasıl çok daha daha hızlı çalıştırıyor..
şimdi projedeki bütün parametrik SQL leri dinamik hale getirmeyi düşünür olduk..
neden prametrik sabit SQL uzun sürüyorda dinamik exec ile çalıştırdığımız kısa sürüyor.?
tekrar merhaba,
burdan farklı bir cevap gelmedi ama ben denediklerimi yazayım..
kullandığım viewa index tanılamayı denedim..
schemabinding isterim dedi.. onu ekledik.. viewda left rigth joinler olmayacak dedi onları kaldırdık..
clustered index isterim dedi onu ekledik.. sonunda da bizim için önemli olan tarih kısmına index tanımladık..
database 12 GB kadardı sanırsam önceki hali.. viewa bu indexleri eklediktan sonra 18GB kadar oldu.. bu işlemi gerçekleştirmesi 30 dakika kadar sürdü..
sonuç olarak ise gram bir performans artışı alamadım.. sorgu içinde WITH(INDEX=falanindex) dedim.. görmezden geliyorum onu kullanmam dedi..
velhasıl en performaslı çalışan hala EXEC ile dinamik SQL im.. bu kadarı uğraşmamın sebebi bu exec ilede bazı sorgular ortalama aynı sayıda record döndürmesine rağmen nasıl oluyorsa bazen 2 saniye bazen 1 dakika kadar sürebiliyor.. ne zaman ne yapacağı belli olmuyor yani.. onun için daha sağlam bir yol bulmalı..
son olarak okuduğum ve araştırmaya devam ettiğim bir konu ise tabloların tarih vb kriterlere göre parçalanabileceği.. ve çok yüksek oranda performans kazandırdığı.. bu konuda bişeyler ifade edebilecek, yol gösterebilecek deneyimli abiler ablalar aranıyor?