Çok yavaş çalışan bi SP

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
meron06
Üye
Mesajlar: 393
Kayıt: 15 Eki 2005 04:23

Çok yavaş çalışan bi SP

Mesaj gönderen meron06 »

begin
if (GISLEMTUR='ULTRASON') then BEGIN
FOR
SELECT MURACAATNO,CINSI,BAKANLIKKODU,GELISNO,SERVISNO,SERVISADI,DRNO,DRADI FROM HIZMETLER
WHERE GELISNO=:GGELISNO AND (ISLEMTURU=:gislemtur or ISLEMTURU='DOPPLER') AND DURUM='H'
INTO :cmuracaatno,:ccinsi,:cbakanlikkodu,:cgelisno,:cservisno,:cservisadi,:cdrkodu,:cdradi
DO
suspend;
END
if (GISLEMTUR<>'ULTRASON') then BEGIN
FOR
SELECT MURACAATNO,CINSI,BAKANLIKKODU,GELISNO,SERVISNO,SERVISADI,DRNO,DRADI FROM HIZMETLER
WHERE GELISNO=:GGELISNO AND ISLEMTURU=:gislemtur AND DURUM='H'
INTO :cmuracaatno,:ccinsi,:cbakanlikkodu,:cgelisno,:cservisno,:cservisadi,:cdrkodu,:cdradi
DO
suspend;
END
end

Arkadaşlar bu sp çok yavaş çalışıyor.işlemturu ve gelisno indexli tablodaki kayıt sayısı 70000 bin bu tablodaki başka sorgularım çok iyi çalışıyor ama bu sp ye gelince anormal yavaş oluyor.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

bende benzer bir sorunla mysql veritabanında karşılaştım. Nedenini şu şekilde buldum ama tabi problemi çözemedim. normal queryler veri tabanı serveri tarafından cache yapılıyor.. Bu nedenle çok hızlı tekrarlanıyor. ama sp ve trigger içine yazılan sql'ler bu cacheleri kullanmıyor. nedenini bilmiyorum.
aynı sql'i direk çalıştırınca örneğin 0,6 milisaniye çıkarken, sp'yi çağırınca 1,3 çıkıyor.
Veri tabanının mimarisinden kaynaklanan bir durum sanırım.

Kolay gelsin.
meron06
Üye
Mesajlar: 393
Kayıt: 15 Eki 2005 04:23

Mesaj gönderen meron06 »

yani bu şumu demek berda sp yerine query lemi çekmeliyim kayıtlarımı.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Eğer SP sadece bundan ibaretse işleminizi Select query'si ile halletmeniz çok daha mantıklı olacaktır.

İyi çalışmalar.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

sizde benim yaptığım gibi deneme yapabilirsiniz. belki indexlerininzden kaynaklanıyorda olabilir. Emin olduktan sonra SP'ye kadar ihtiyacınız olduğunu yeniden gözden geçirebilirsiniz. SP yavaş olsa bile daha güvenli gibi gözüküyor ve sadece ana makinaya yükleniyor. Ana makinada yapacağınız bir iyileştirme daha hızlı çalışmasını sağlaycaktır.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

mkysoft yazdı:sizde benim yaptığım gibi deneme yapabilirsiniz. belki indexlerininzden kaynaklanıyorda olabilir. Emin olduktan sonra SP'ye kadar ihtiyacınız olduğunu yeniden gözden geçirebilirsiniz. SP yavaş olsa bile daha güvenli gibi gözüküyor ve sadece ana makinaya yükleniyor. Ana makinada yapacağınız bir iyileştirme daha hızlı çalışmasını sağlaycaktır.
"SP yavaş olsa bile daha güvenli gibi gözüküyor ve sadece ana makinaya yükleniyor." derken kastınız Select query'si mi? Yoksa ne? Eğer kastınız Select Query'si ise Select Query'si SP'den ve diğer ne varsa hepsinden daha güvenli, daha hızlı ve ana makinada ve yormadan işlem görecektir.

İyi çalışmalar.
poshet303
Üye
Mesajlar: 235
Kayıt: 26 Eki 2005 01:15

Mesaj gönderen poshet303 »

aynı SQL script e sahip bir SP, client tarafından gönderilen bir sql script ten daha hızlı çalışacaktır.

Nedeni. SP ler derlendiği için text script ten daha hızlıdır.SQL scriptinin karekter sayısı kadar byte server a gitmeyeceği için(sadece parametreler gönderilir.) trafik kullanımı azalacak (tabi bu çok fark yaratmaz).

SP sizi SQL injection gibi güvenlik ihlallerinden koruyabilir.

Tabi performans deyince konu uzun. Performansı arttırmak için yığınla püf naktası var.
Örneğin indexler performansı arttırır diyoruz. Kötü tasarlanmış bir index performansı azaltır. FB nin temporary dizinini doğru yapılandırılmamış ise performansınız düşer (bu çok ilginç mesela). Sonra aynı işi yapan birden fazla sql ifadesi yazabilmek mümkün ve bunların hepsinin performansı aynı olmayacaktır. Örneğin ben join li update ifadeleri görüyor bunları çok saçma buluyordum. Meğer bunu performansı arttırdığı için kullanıyorlarmış, yeni öğrendim. Ve daha bir çok şey...
Kullanıcı avatarı
comfort
Üye
Mesajlar: 214
Kayıt: 28 Ara 2004 06:37
Konum: İzmir
İletişim:

Mesaj gönderen comfort »

for select kullanmama imkanınız varsa kullanmayın. Çünkü select sorgularına göre çok daha yavaş çalışır. Mümkünse tek bir sorguda işinizi bitirmeye çalışın ve indexlere dikkat edin. Select query kullanmanıza rağmen hala çok bekliyorsanız view yaratın arada gözle görülür hız farkı olduğunu hemen farkedeceksiniz. 8)
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

poshet303 yazdı:aynı SQL script e sahip bir SP, client tarafından gönderilen bir sql script ten daha hızlı çalışacaktır.

Nedeni. SP ler derlendiği için text script ten daha hızlıdır.SQL scriptinin karekter sayısı kadar byte server a gitmeyeceği için(sadece parametreler gönderilir.) trafik kullanımı azalacak (tabi bu çok fark yaratmaz).
Biz genel SQL Scriptlerden bahsetmiyoruz. Select query'si gibi çalışan yani SUSPEND ile sonuç tablosu döndüren SP'lerden bahsediyoruz. Bunlar normal query'lerden yaklaşık 10 kat daha yavaş çalışıyor. Yani 3 saniyelik basit bir Select query'si SP olarak çağırıldığında 30-35 saniye sürüyor.

İyi çalışmalar.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Stored Procedure (SP) adı üzerinde bir procedure. Select ten gelen kayıt/kayıtlar üzerinde ek işlemler yapılması gerekli normal SQL kodlamanın yetmediği zamanlarda kullanılacak bir yöntem. Yoksa sadece her bir şeyi VT içine almaktan kasıt sade haldeki select sorgularını da almak değil. Öyle bir ihtiyaç varsa zaten VIEW oluşturulup kullanılabilir. :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla