Bu yazıda operasyonel (günlük) veri tabanından çekilen rapor ile Veri Ambarı’ndan çekilen rapor arasındaki performans farkını örnek senaryolar kullanarak ortaya çıkarmaya çalışacağız. Bu işlem için benzer sonuçlar üreten 2 rapor örneği kullanacağız. İki rapordan ilkinde veri kaynağı olarak günlük veri tabanı kullanılırken, ikinci rapor örneğinde veri kaynağı olarak Veri Ambarı kullanıyoruz.
1.Rapor: Bu uygulama örneğinde Microsoft’un ücretsiz kullanıma sunduğu AdventureWorks veri tabanı kullanılmıştır. Rapor senaryosunda AdventureWorks şirketinin satışlarına ay, yıl ve çalışan filtresi verilmiştir. Örnek senaryo için AdventureWorks2012 veri tabanını veri kaynağı olarak ekliyoruz. Bu aşamada daha önce oluşturulup paylaşılmış veri tabanları da kullanılabilir. Aşağıdaki şekillerden yeni paylaşımlı veri kaynağının nasıl eklenebileceği görülebilir, sunucuya bağlanarak kullanılacak veri tabanı bilgileri seçilir.
Devamında eklenen veri kaynağından oluşturulmuş veri kümelerine ihtiyaç duyulur. Veri kümeleri oluşturulurken çalışan, ay, yıl, satılan ürünlerin miktarı, kategorisi ile ilişkili olan tablolar düşünülmelidir. Bu senaryo örneğinde 2 adet veri kümesi kullanılmıştır.
Rapor kullanıcısından filtre amaçlı, çalışan seçilmesi isteneceğinden çalışan adı ve ID değerini içeren bir koleksiyona ihtiyaç duyulmaktadır. Satış yapan çalışan bilgilerini içeren veri kümesini oluşturmak üzere aşağıdaki Sql sorgusu kullanılmıştır;
Rapor filtrelerini oluşturmak amacı ile parametre eklememiz gerekmektedir. Bu senaryoda yıl, ay ve çalışan filtreleri olduğundan her biri için parametre eklenmesi gerekmektedir.
İkinci veri kümesi için ürünün kategorisi ve yapılan satışlar ile ilgili tablolardan bilgiler alınmalıdır. EmpSalesMonth ismindeki veri kümesini oluşturan Sql sorgusu aşağıdaki gibidir;
Sql sorgusundaki where clause’da yer alan @ReportYear, @ReportMonth, @EmployeeID parametreleri kullanıcı arayüzünden aşağıdaki gibi seçilen değerler ile dolar.
Veri kümesinin eklendiği ekran görüntsü aşağıdaki gibidir. Bu ekranda kullanılacak veri kaynağı seçilir ve Sql sorgusu query bölümüne eklenir. Veri kümesinin Sql sorgusu query designer, text form veya stored procedure olarak eklenebilir.
Parametreler seçildiğinde David Campbell ismindeki çalışanın Kasım 2005, 2006, 2007 yıllarında farklı kategorilerde yapmış olduğu satış miktarlarını ve oranlarını gösteren sonuçlar tablo ve grafik olarak aşağıdaki şekilde verilmiştir. Çıkan sonuçlarda çalışanın farklı yıllarda yaptığı Aksesuar (Accessories), Bisiklet (Bikes), Giyim (Clothing), Parça (Components) kategorileri için toplam satış miktarları grafiksel olarak ve aynı zamanda rakamsal olarak verilmiştir.
2.Rapor: İkinci rapor örneği için benzer sonuçlar üreten raporu oluşturmak üzere Veri Ambarı veri kaynağı olarak eklenir. Bu örnek için AdventureWorksDW2012 ismindeki veri kaynağı eklenir.
Çalışan bilgilerini veren veri kümesi aşağıdaki Sql kodu ile oluşturulmuştur;
İlk rapor örneği ile karşılaştırdığımızda çalışan bilgilerini almak için tek tablo kullanmıştır.
EmpSalesMonthDW ismindeki ikinci veri kümesi için aşağıdaki Sql sorgusu kullanılmıştır;
Veri Ambarı’ndan oluşturulan veri kümesinde operasyonel veri tabanından oluşturulan veri kümesinekıyasla daha az tablo kullanılmıştır. Satış ile ilgli işlemler için FactResellerSalestablosu kullanılmıştır. Hareket (fact) tablosu ürün, kategori, tarih ve çalışan gibi bilgilere ulaşmak üzere sabit (dim) tablolarına bağlanmıştır.
İki Raporun Karşılaştırılması
iki senaryo örneği karşılaştırılırken kullanılan ana veri kümeleri EmpSalesMonth ve EmpSalesMonthDW’u oluşturulan scriptler Sql Server Management Studio’da çalıştırılmıştır, bu sorguların performansını ölçmek için Microsoft Sql Server eklentisi olan Sql Statistics (Sql istatistik) ismindeki araç kullanılmıştır. Sql Statistics özelliği aktive edildikten sonra çalıştırılan sorgularda sorgu sonucu ile birlikte istatistiki veriler de elde edilir.
Sql Statistics ismindeki araç kullanılarak sorgular 5’er kere çalıştırılmıştır, kullanılan araç sayesinde harcanan süreler kayıt altına alınmıştır.Aşağıdaki Tablo 1 ve Tablo 2′de iki rapor için çıkan sonuçlar görülebilir. Sorgular her çalıştırıldığında farklı zaman harcanmıştır, ancak ortalama zamanlar düşünülerek karşılaştırma yapılacak olursak; Veri Ambarı’ndan çekilen sorgu operasyonel veri tabanından çekilen sorgunun ortalama toplam işletim (average total execution time) süresi 3 kattan fazla daha hızlı yanıt vermiştir. Sunucudan gelen cevap süresi de Veri Ambarı’ndan 4 katdan fazla daha hızlıdır. İki yöntem arasında açık bir performans farkı bulunmaktadır.
Tablo 1: EmpSalesMonth oluşturan sorgunun milisaniye cinsinden çıkan sonuçları.
Channels | 5.Deneme | 4.Deneme | 3.Deneme | 2.Deneme | 1.Deneme | Ortalama |
Client processing time | 355 | 219 | 594 | 752 | 156 | 415.2 |
Wait time on serverreplis | 1752 | 1602 | 1720 | 6371 | 1437 | 2576.4 |
Total execution time | 2107 | 1821 | 2314 | 7123 | 1593 | 2991.6 |
Tablo 2: EmpSalesMonthDW oluşturan sorgunun milisaniye cinsinden çıkan sonuçları.
Channels | 5.Deneme | 4.Deneme | 3.Deneme | 2.Deneme | 1.Deneme | Ortalama |
Client processing time | 15 | 125 | 47 | 47 | 94 | 65.6 |
Wait time on server replies | 703 | 671 | 734 | 601 | 640 | 669.8 |
Total execution time | 718 | 796 | 781 | 648 | 734 | 735.4 |
Kaynaklar:
[1] .AdventureWorks Sample Reports 2008 R2, http://msftdbprodsamples.codeplex. com / releases/view/89245, [Ziyaret tarihi:10 Mayıs 2015].
[2] AdventureWorks website sample, https://msfteeprodsamples.codeplex.com/ wikipage?title=SS2008!Readme_Storefront, [Ziyaret tarihi:25 Nisan 2015].