Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Raporlamada hangisi daha performanslıdır View? Store Procedure?
#1
Selamlar


Delphi içerisinden bazı dinamik yapıda raporlar hazırlıyorum.
Amaç sadece koşul ifadelerini programdan parametrik gönderim şeklinde yapmayı düşünüyorum

Performans açısından Rapor kalıplarını 
SQL üzerinde "View" kullanarak mı? yoksa "Store Procedure" kullanarak mı? hazırlamak daha doğru olur.

Yada kullanıcının programdan oluşturduğu koşul ifadesini ve alan seçimlerini bir "String" olarak "Store Procedure" gönderip
"Store Procedure" içinde Sorguyu dinamik oluşturmak mı?

Konu hakkındaki görüşleriniz nedir?

Teşekkürler
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#2
(22-12-2017, Saat: 16:19)adelphiforumz Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSelamlar


Delphi içerisinden bazı dinamik yapıda raporlar hazırlıyorum.
Amaç sadece koşul ifadelerini programdan parametrik gönderim şeklinde yapmayı düşünüyorum

Performans açısından Rapor kalıplarını 
SQL üzerinde "View" kullanarak mı? yoksa "Store Procedure" kullanarak mı? hazırlamak daha doğru olur.

Yada kullanıcının programdan oluşturduğu koşul ifadesini ve alan seçimlerini bir "String" olarak "Store Procedure" gönderip
"Store Procedure" içinde Sorguyu dinamik oluşturmak mı?

Konu hakkındaki görüşleriniz nedir?

Teşekkürler

Performans arıyorsanız kesinlikle View Den uzak durmanız gerekmektedir.
Dışarıdan Parametre olarak alacağınız raporların hepsini Procedure yapmanızı şiddetle öneririm.
Ne kadar büyük bir datada çalışacaksınız bilmiyorum ama eğer data büyükse zaten direk procedure yapınız.
Cevapla
#3
Merhaba,

Aslında stored procedure içinde sorguyu dinamik olarak oluşturup çalıştırmak yerine "Table Valued Function" kullanmanızı öneririm. Parametre gönderip (isteğe bağlı), recordset alabileceğiniz bir yapı.
select fn_test('a',123) 
 şeklinde çalıştırabilirsiniz.
Cevapla
#4
(22-12-2017, Saat: 18:43)FiRewaLL Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlPerformans arıyorsanız kesinlikle View Den uzak durmanız gerekmektedir.


Sebep ?
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#5
(22-12-2017, Saat: 19:58)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(22-12-2017, Saat: 18:43)FiRewaLL Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlPerformans arıyorsanız kesinlikle View Den uzak durmanız gerekmektedir.


Sebep ?

Sebep Şöyle diyeyim.
ne kadar büyük datalar ile çalıştınız bilmiyorum ama
ben şu anda yıllık hareket kaydı 45M olan hareket kaydı olan bir Tablodan
Satış Alış hareket kayıtları karlılıkraporları vs tarzında analiz ettiğimiz raporlar var
Bunlarda Yaptığımız testler sonucunda
Procedure bu duruma daha Hızlı cevap verdiğini tespit ettik.

Buradaki En Büyük Etken de şu
View Her seferinde Derlenirken
PRocedure 1 kez derlenir Yeniden istediği zaman Memory'deki derlenmiş veriden geri dönüş yapar ve çok büyük hız alırız.

(22-12-2017, Saat: 19:46)mad85 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,

Aslında stored procedure içinde sorguyu dinamik olarak oluşturup çalıştırmak yerine "Table Valued Function" kullanmanızı öneririm. Parametre gönderip (isteğe bağlı), recordset alabileceğiniz bir yapı.
select fn_test('a',123) 
 şeklinde çalıştırabilirsiniz.

table Functionlar işimizi Görür ama 
Indexleri Görmez ve Bir kere derlenmez 
Ondan dolayı yüklü verilerde ve tekrar eden sorgularda 
Hem Sunucuyu hemde SQL Serveri yoracaktır.
Cevapla
#6
Merhaba,

View'lerle ilgili sorun biraz farklı. Her ne kadar SQL Server ve Oracle (Oracle'dan çok emin değilim) bu durumu toparlamak "parameterized view" diye bir şey çıkardılarsa da bildiğim kadarıyla özel durumlar var. Sorun şurada: Veri tabanları View sonucu ortaya çıkan sonuca sizin şartlarınızı uyguluyor. Örneğin bütün satış hareketlerini sorgulayacağınız bir view tasarladınız diyelim. Ve toplamda da 5 milyon kayıt var. Siz sadece bir müşterinin hareketlerini istiyorsunuz ve bu da aslında 100 kayıt. İşin içine view girmediği zaman veri tabanı satış kayıtlarından şartlara uyanlara bakıyor (ve bunu index vs sayesinde çok hızlı yapıyor) ve size 100 kayıt gönderiyor. Ama işin içine view girdiği zaman önce 5 milyonluk view dataset oluşuyor sonra bu 5 milyonluk dataset'in içinde sizin şartlarınıza uyan 100 kayıt seçiliyor ve size gönderiliyor. Kayıt sayılarını özellikle yüksek yazdım, çünkü kayıt sayısı (ve sorgu içindeki join sayısı) az olduğu zaman bunu ölçmeden gözlemlemek çok kolay değil (özellikle günümüzdeki hızlı bilgisayarlarda).

Bu arada konu dışı ama raporlar için SP kullanmak ne kadar iyi bir fikir tartışılır.

Son olarak SP kullanmamızın tek sebebi performans değil. Aşağıdaki linkte SP'lerin avantajları ve dezavantajları anlatılmış. 

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol

İyi çalışmalar
Cevapla
#7
(23-12-2017, Saat: 01:15)FiRewaLL Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(22-12-2017, Saat: 19:58)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSebep ?

Sebep Şöyle diyeyim.
ne kadar büyük datalar ile çalıştınız bilmiyorum ama
ben şu anda yıllık hareket kaydı 45M olan hareket kaydı olan bir Tablodan
Satış Alış hareket kayıtları karlılıkraporları vs tarzında analiz ettiğimiz raporlar var
Bunlarda Yaptığımız testler sonucunda
Procedure bu duruma daha Hızlı cevap verdiğini tespit ettik.

Buradaki En Büyük Etken de şu
View Her seferinde Derlenirken
PRocedure 1 kez derlenir Yeniden istediği zaman Memory'deki derlenmiş veriden geri dönüş yapar ve çok büyük hız alırız.

(22-12-2017, Saat: 19:46)mad85 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,

Aslında stored procedure içinde sorguyu dinamik olarak oluşturup çalıştırmak yerine "Table Valued Function" kullanmanızı öneririm. Parametre gönderip (isteğe bağlı), recordset alabileceğiniz bir yapı.
select fn_test('a',123) 
 şeklinde çalıştırabilirsiniz.

table Functionlar işimizi Görür ama 
Indexleri Görmez ve Bir kere derlenmez 
Ondan dolayı yüklü verilerde ve tekrar eden sorgularda 
Hem Sunucuyu hemde SQL Serveri yoracaktır.

Merakım dan soruyorum hangi veritabanını kullanıyorsunuz aynı öneri diğer veritabanları içinde geçerli midir?

“Do. Or do not. There is no try.”
Cevapla
#8
Ben 43 Market Şubesi olan
5 Tane üretim tesisi
10 tane de Sosyal tesisi olan bir şirkette çalışıyorum.

MSSQL Server 2014 sürümü kullanıyoruz.
Hareket kaydımız 43 ile 45 milyon satır olan bir tablomuz var
Netsis kullanıyoruz.

Dediğim gibi datanız burada önemli olan bu kadar fazla kayıt ile bir işlem yapmayacaksanız burada hız farkını fazlada fark etmeyeceksinizdir.
Ben şunu belirteyim tamam procedure dedim tabiki hızlı sonuçlar için
ama burada yeri gelir CTE ile de çok hızlı sonuçlar alabilirsiniz
Yeri gelir Table Function ile de
Yeri gelir View ile de.
Cevapla
#9
Bir sorguda performansı etkileyen temel faktör sistem kaynaklarının ne kadar az kullanıldığı ile ilgilidir. Yani ne kadar az bellek kullanıyorsanız, ne kadar az disk ile haşır neşir oluyorsanız performans o kadar fazla olur. Yani sözün özü olay sizin sorguyu nasıl tasarladığınız ile ilgili...
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#10
Bildiğime göre viewler tabloları izler ve, oluşturulan viewlerin bağlı olduğu tablolarda değişiklik olmadığı sürece yeniden derlenmez bu şekilde temporary de hazır bekler.

Her sorguda yeniden derlenecekse view tablonun ne özelliği kaldıki
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Maximum stored procedure, nesting level exceeded (limit 32) hatası Bay_Y 6 200 08-08-2018, Saat: 14:15
Son Yorum: Tuğrul HELVACI
  Store Procedure içinden hata alma Bay_Y 4 268 23-05-2018, Saat: 12:34
Son Yorum: Bay_Y
  MS-SQL Server Procedure Tavsiyeleriniz Fesih ARSLAN 21 2.237 28-07-2017, Saat: 08:21
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi