Analysis Services Tabular Mode – DirectQuery mi yoksa InMemory mi ?

Merhabalar,

SSAS Tabular mode / BI Semantic Model bildiğiniz gibi SQL Server 2012 ile beraber sunulan bir özellik. Excel PowerPivot’un teknolojisi üzerine geliştirilen Tabular mode, İş Zekası projelerinde artık ülkemizde de sıkça karşımıza çıkmaya başladı. Genel olarak klasik Multi Dimensional küplere göre daha kısıtlı imkanlar sunsada, bana göre çoğu projelerde yeterli olabilecek özellikleri içerisinde barındırıyor. Geçtigimiz gunlerde bir proje üzerine çalışırken Tabular mode’un özelliklerinden olan ve projelendirme aşamasında önemli karar verme noktalarından birini oluşturan BI Semantic Model üzerinde kafa yorma sansim oldu. Soru, yapacağımız tabular model direkt olarak veri kaynağına bağlanıp canlı veri mi getirecek yoksa aynı klasik küplerde olduğu gibi veriyi kendi içersine alıp bize hesapladığı değerleri mi gösterecek.

Bu iki özellikden biri DirectQuery diğeri ise InMemory.

DirectQuery kısacası siz Tabular Model’e bir sorgu gönderdiğiniz zaman tabular model sadece mantıksal (semantic) bir katman olarak davranıp sizin sorgunuzu direkt olarak veri kaynağına gönderir ve aldığı cevabı size geri döner. Bu senaryoda önemli olan kısım son kullanıcı veri kaynağı hakkında hiçbir şey bilmek zorunda değildir. Tabular modelin oluşturduğu mantıksal katman son kullanıcıya rahatlıkla anlayacağı tablo ve kolon isimleri sunar. Gereksiz veya kompleks yapıları gizler. Bu özellik sayesinde Tabular birçok projede farklı veri kaynaklarının tek bir katman altında toplanıp son kullanıcıya tek bir sorgulama noktası kurulması için kullanılıyor. DirectQuery’de tek aklınızda olması gereken konu, DirectQuery mode Tabular Model’in birçok özelliğini kullanamamanıza yol açar. Bunun nedeni ise, sorgunuzu kendi işlemiyor olmasıdır, siz bir sorgu yaptığınız zaman sorgunuz bağlı olan sisteme gider. DirectQuery mode’da çalışmayan özelliklerin bir listesini ayrı bir yazımda paylaşacağım.

İki özelliğin diğer ise InMemory özelliği. Tabular Model’in temel varolma amacını oluşturan bu özellik sayesinde, birçok veri kaynağına bağlanıp istenilen veri yapısı oluşturulduktan sonra bu veri yapısı Tabular Model tarafından kendi içerisine alınır ve yüksek sıkıştırma teknolojisi ile sıkıştırılır ve makinanın hafızasına (RAM) atılır.

In-Memory modeller aynı Multi Dimensional küplerde olduğu gibi verilerin hesaplanmasına ihtiyaç duyar. Bu da In-Memory modelde sorguladığınız verilerin canlı veri olmasını engeller. Canlı veriye yakınlaşabilmek için verinin işlenme frekansını artırabiliriz ve partitioning yapabiliriz fakat yine de tam olarak canlı veriye ulaşamayız. Bu aslında günlük hayatımızda birçok kere karşılaştığımız bir durumdur bu. Çoğu banka sistemleri anlık çalışmaz, örnek olarak yaptığınız bir alışveriş saniyesinde sizin kredi kartı işlemlerinize yansımayabilir. Bu sebeple In-Memory model ilk başta düşündüğünüz kadar kötü değildir. Tam tersine bu gecikmeleri iyi yönetebilirseniz, In-Memory modelin performansından çok memnun kalırsınız. Bu performans başta bahsettiğim gibi işlenmiş verilerin hafıza (RAM) üzerinde saklanmasından gelmektedir. Normal Multi-Dimensional sistemlerde küpler Hard Disk’de dururlar ve bir istek yapıldığında sorgu hard disk üzerinden çalıştırılır. Fakat In-Memory sistemde bütün sorgular RAM üzerinde çalışır ve RAM’in veriye ulaşma hızından yararlanırlar. Unutmayın bilgisayarlarımızda ki en yavaş parça klasik hard disk’lerdir. Hardisk’ler dışındaki bütün parçalar tamamen elektronik çalışır. Fakat bir hardisk içerisindeki dönen diskler kadar hızlıdır.

Bu konular üzerine internette birçok döküman bulabilirsiniz, özellikle Microsoft DirectQuery ve In-Memory modellerin ayarlarmaları hakkında başarılı dökümanlar hazırlamıştır. Aşağıda link’ini verdiğim döküman detaylı olarak bu tarz modellerin performans iyileştirmelerinin nasıl yapılması gerektiğini anlatmaktadır.

Performance Tuning of Tabular Models in SQL Server 2012 Analysis Services: http://msdn.microsoft.com/en-us/library/dn393915.aspx

Sonuç olarak toparlamak gerekirse, eğer birçok bağımsız veritabanlarını bir katman altına toplamak istiyorsanır SQL Server 2012 BI Semantic Model bütün sorunlarınızın yanıtı olabilir. Bu katmanı nasıl kullanmak istediğinize göre de DirectQuery mi yoksa InMemory mi kullanacağınız seçmelisiniz. Eğer performans açısından çok büyük bir beklentiniz yoksa sizin için önemli olan yönetim maliyeti minimum olan bir katman oluşturmak ise BI Semantic Model ve DirectQuery ‘yi öneririm. Yok diyorsanız benim için Performans önemli ve BI Semantic Modelin bütün özelliklerini sonuna kadar kullanmak istiyorum, o zaman InMemory gitmeniz gereken bir çözüm gibi gözüküyor.

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s