Distinct mi - Group By mı?

30. Ağustos 2008

Bu weblogta, "SQL Server da sorgu atarken Distinct mi yoksa Group by mı tercih etmeliyim?" sorusunu soran 2 arkadaşa yanıt olması için kısa bir açıklama yapmaya çalışacağım. Bu açıklamanın başkaları içinde yararlı olduğunu düşündüğümden buraya koymayı uygun gördüm. Aslında bununla ilgili internette yazılı birçok kaynakta bulunmakta.

Öncelikle bu sorunun cevabı hayatımızda karşılaştığımız çoğu soruya verilecek yanıtla birebir aynı "Duruma göre değişir(it depends!)". Yapacağınız tercih, sorgu cümlesinde yapmak istediklerinize göre değişiklik gösterecektir. Tercih etmeliyim derken "Distinct mi yoksa Group by mı, hangisi daha hızlı çalışıyor" diye soruyorsanız: 

Dokumanlar isimli tablomda, DokumanGrup isimli dokumanların gruplandırıldığı bir sütunum olduğunu varsayarsak..:

-select distinct DokumanGrup from Dokumanlar

-select DokumanGrup from Dokumanlar group by DokumanGrup

Eğer yukarıdaki sorgular gibi "Distinct" ve "Group by" yapılarını basit, sadece o sütun ya da sütunlardaki verileri tekrarlanmadan göstermek için kullanıyorsanız her ikisi de aynı sonuçları veriyor, aynı hızda ve aynı işlem planını kullanarak çalışıyor(Execution plan - Sql Serverda yazdığınız sorgunun performansını ölçmek için kullanmanızı şiddetle tavsiye ederim Wink Şiddetli tavsiye nasıl oluyorsa artık)

Hız değil de kullanım açısından bakacak olursak Group by (Aggregate) toplam fonksiyonlarıyla kullanılmaktadır. Zaten sık sık veritabanı işlemlerinde bu fonksiyonları kullanıyorsanız, "Distinct"'in "Group by"'a göre ne kadar basitleştirilmiş olduğunu fark etmemek imkansız.

Sık Kullanılan Toplam(Aggregate) Fonksiyonları:

MIN(ifade), MAX(ifade), AVG(ifade), SUM(ifade), COUNT(ifade) - COUNT(*)

-select DokumanGrup, COUNT(*) from Dokumanlar group by DokumanGrup   -> Döküman Gruplarını ve yanında kaç tane dokümanın bu grupta bulunduğunu gösterir.

 

Bu arada Group by'la benzer olmasa da Distinct'i de toplam fonksiyonlarıyla kullanmamızın bir yolu var; TOPLAMFONKSİYONU(Distinct SütunAdı). Min ve Max'ta zaten tek sonuç gösterdiğinden kullanmak hiç bir işinize yaramayacaktır. Kullanımına bir iki örnek verecek olursak;

-select Count(Distinct DokumanGrup) from Dokumanlar   -> NULL olan harici kaç tane Döküman Grubu çeşidi olduğunu gösterir.

-select AVG(Distinct SinavNotu) from Ogrenciler   -> Öğrenciler tablomuzda SinavNotu aynı olan öğrencileri bir kişi sayarak çıkardığımız dağılımdaki ortalamayı hesaplar. 

Sonuç olarak ben kullanım yerine göre "group by" da "distinct" de kullanıyorum ve genel itibariyle bir tercih yapmayı gerekli görmüyorum. Kullanım alanlarını bildikten sonra sorduğunuz soruya kendi başınıza cevap bulacağınızı düşünüyorum.

Bu konuda ekstra bilgi veya görüşlerini paylaşmak isteyenlerin yorumlarını bekliyorum..

Makaleler, Sql Dersler , ,

SQL Server Views

21. Ağustos 2008
SQL Server Views (Makalenin altında dosya olarak ta mevcut-offline okumak için)

Veritabanı(Database) ile ucundan da olsa uğraşan herkesin View'ler hakkında az çok bilgisi vardır. Bu makalemizde View'leri daha etkin ve verimli kullanabilmemiz için gereken temel bilgileri ve ileri sayılacak ipuçlarını vermeyi amaçlıyorum. Ve bunu yaparken özellikle MS SQL SERVER üzerinden örnekler vereceğim.

"View nedir? Ne değildir?" sorularına geçmeden önce View'ler hakkında kulaktan kalma bilgilerimizin ne kadarı doğru, ne kadarı yanlış bunları bir gözden geçirelim. View'ler hakkında en çok söylenen söz "Veritabanında ihtiyacın olmasa da istediğin kadar kullan hiç zararı yok, sonra üzerinden işlem yapmak daha kolay oluyor" sözüdür. Bu söz bir açıdan doğru olmasına rağmen yanlış bilgi içerdiği de su götürmez. View'ler, ihtiyaç duyulduğunda yaratılması ve doğru şekilde kullanılması halinde bizi birçok yükten kurtaracak olan veritabanı elemanlarıdır. Eğer yerinde kullanılırlarsa veritabanı üzerinde daha verimli çalışmamıza olanak sağlarlar.

Peki, nedir bu View'ler? View'ler bir veya birden fazla tablodan istenilen verilerin bir arada sunulmasını sağlayan tanımlanmış sorgulardır. Sanal bir tablo olarak da düşünebiliriz. Aynı tablolar gibi satırlar ve sütunları içerir. Bir ya da birkaç tablodan seçtiğimiz verileri okuyabiliriz hatta bazı durumlarda veri girişi bile yapabiliriz. Peki neden “sanal” kelimesini kullanıyoruz? Çünkü View'ler veri saklamazlar(Indexed View'ler haricinde) sadece istenen veriye ulaşılacak yolu kullanarak verileri kullanıcıya sunarlar. Indexed View konusuna daha sonra başka bir makalede değineceğiz o yüzden şu anda bu kadarını bilmemiz yeterli.

View'leri nasıl yaratacağımız konusuna girmeden, bize ne avantajlar sağlıyorlar biraz bahsedelim çünkü sağladığı avantajları bilirsek ne amaçlar için kullanacağımıza da daha rahat karar veririz.  Daha önce gereksiz yere View yaratıp kullanmanın hem bizim için hem de veritabanı için verimsiz olacağından zaten bahsetmiştik.

-Birden çok tablo ile çalışırken gereksiz karmaşadan(özellikle her seferinde uzun bir SQL sorgu cümlesi yazmakla uğraşmaktan) kurtulmak.

-Veri ulaşım performansını arttırmak.

-Veri erişimini sınırlamak ve kontrol altında tutmak.

Buraya kadar kod yazmamamızın en önemli nedeni View hakkında öğreneceğiniz bilgilerin “SQL’de nasıl View yaratılır?” sorusunun cevabından daha yararlı ve karmaşık olmasıdır. Bir diğer neden ise eğer yeterince SQL bilgisine sahipsek zaten bir View’in nasıl yazılması gerektiğini az çok biliyor olmamızdır.

Bir view oluşturmak için sysadmin(system administrator), db_owner(database owner) veya db_ddladmin(data definition language administrator) rollerinden birine sahip olmamız ya da bize Create View izninin verilmiş olması gerekmektedir. Bu uzun girişten sonra gelin Northwind örnek veritabanında bir View yaratarak devam edelim. Bu veritabanını indirmek için link:

http://www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46A0-8DA2-EEBC53A68034&displaylang=en

 

 

 

 

 

Örnek-1: View oluşturma, Order_Customer ismiyle bir view oluşturuyoruz

View Oluşturma, order_customer ismiyle

 

SQL bilgisine sahip olmasak bile işlem yapacağımız veritabanı içindeki Views klasörüne sağ tuşla tıklayıp “New View…” seçeneğini seçtikten sonra karşımıza gelen ekrandan tablolar ekleyerek kolaylıkla yaratmak istediğimiz View’i hazırlayabiliriz. Tek yapmamız gereken tablolardan istediğimiz sütunları belirleyip Select cümlemizin otomatik olarak yazılmasını sağlamaktır.

 

Ekran-1: Yeni View ekleme

Yeni View ekleme

 

 

 

Ekran-2: Tablo ekleme

 Tablo ekleme

 

 

 

Ekran-3: View kaydetme, Order_Customer ismiyle kaydedelim

View kaydetme, Order_Customer ismiyle

 

 

 

View oluştururken dikkat etmemiz gereken hususlar:

Oluşturulan View de;

-Compute ya da Compute By cümleciği,

-Into anahtar sözcüğü,

-Option cümleciği

kullanılamaz.

-View’ler temporary tablo dediğimiz geçici olarak oluşturulan tablolara referans verilemez. Bu tablolardan veri istenemez.

-Order By cümleciği sadece TOP operatörü ile birlikte kullanıldığında kullanılabilir.

-Bir View farklı tablolardan gelen aynı isimlere sahip farklı sütunları içerebilir.

-View’lerdeki sütunlar aritmetik ifadelere sahip olabilir.

 

Yukarıdaki Örnek-1’de bir View nasıl yaratılır bunu örnekledik. İlk örneğimizi henüz incelemişken gelin bir View’in SYNTAX’i (sentaksı) nasıl olur ona bakalım ve daha sonra ayrıntılı olarak inceleyeceğimiz View’in teknik kısımlarını, yüzeysel olarak görelim. Aşağıdaki sentaksta [ ] arasında yazdıklarımız isteğe ve ihtiyaca göre yazılabilen kısımlardır.

 

Sentaks(Syntax):

 

CREATE VIEW [sahip_ismi].view_ismi [(görünen sütun ismi,…)]

[WITH {ENCRYPTION | SCHEMABINDING}]

AS

select_cümlesi

[WITH CHECK OPTION]

 

Görüldüğü gibi sadece –

 Create View view_ismi

 As

select_cümlesi 

- ile bir view yaratabiliriz. Bizi asıl zorlayacak kısım yazacağımız Select cümlesi olsa gerek, başka bir içerikte kalmadı gibi.

Create View [sahip_ismi].view_ismi kısmındaki [sahip_ismi] alanını doldurmak zorunda değiliz yani isteğe bağlı olarak doldurulabiliriz. Yalnız daha sonra karışıklık olmaması için o View’in kim tarafından yönetileceğini belirtmek yararımıza olacaktır. Hiçbir isim girilmemesi durumunda o sıradaki kullanıcıyı View’in sahibi olarak atayacaktır.

Create View view_ismi başlangıcından sonra gelen [(görünen sütun ismi,…)] yazan bölümde Select sorgusu ile sonuçta gösterilecek sütunların isimlendirmesini yapabiliriz. Birden fazla sütun ismi yazmak için sütunların arasına yukarıdaki gibi virgül koyulur.

Bunu test etmek için gelin ilk yaptığımız örneğin sütunlarının Türkçeleştirilmiş halini, yeni bir View olarak oluşturalım. İki örneği kıyaslayıp sonuçlarını görüntülediğimizde farkı görebiliriz.

Örnek-2: View oluşturma, Siparis_Musteri ismiyle yeni bir view oluşturalım

View oluşturma, Siparis_Musteri ismiyle

 

Ekran-4: Siparis_Musteri View’inin sonucu(üstteki sütun isimlerine dikkat!)

Siparis_Musteri View’inin sonucu

 

 

Geldik View kullanmayı kulaktan dolma öğrenmiş ve View oluşturmayı bildiğini iddia eden bazı insanların kullanmaya aşina olmadığı bölümlere.

[WITH {ENCRYPTION | SCHEMABINDING}]

Encryption:

Öncelikle With Encryption cümlesinin ne işe yaradığından bahsedelim biraz. Aşağıda yaptığımız örneği direk alıp kopyalarsak oluşturduğumuz View’den sonuçta ne olduğunu büyük olasılıkla anlayamayacağız.

Encryption yapısını kullanmamızın nedeni o veritabanında oluşturduğumuz View’in kod içeriğinin yani View’i oluşturmamızı sağlayan kaynak kodun görüntülenemez şekilde şifrelenmesidir. Görüntülenemez çünkü Encryption yaptığımız bir View’i Decryption gibi bir işlemle geri alamıyoruz. Şifresiz haline döndüremiyoruz. Bunu yapabilmek için View’in kaynak koduna ihtiyaç duyuyoruz. Kaynak kodunu bildiğimiz bir View’in şifrelenmiş kaynak kodunu niye açmaya çalışalım ki sonuçta. Bu yüzden Encryption(şifreleme) yapmayı düşündüğümüz View cümlesinin yedeğini kaydetmeyi unutmazsak bizim için daha iyi olur. Tekrar bu cümleyi oluşturmak zorunda kalacağımız durumlarda oradan alıp kullanabiliriz.

Örnek-3: With Encryption yapısı

With Encryption yapısı

 

Ekran-5: Encryption özelliği aktif bir View’in ekrandaki görüntüsü

Encryption özelliği aktif bir View’in ekrandaki görüntüsü

 

Daha önce bahsettiğimiz gibi Encryption yaptığımız View’in kaynak kodunu görmemiz mümkün değil. Örnekte oluşturduğumuz View’e sağ tuşla tıkladığımızda karşımıza çıkan Modify veya Design seçeneği artık inaktif durumda. View’lerin içeriğini görüntülemenin bir başka yolu da bir stored procedure(saklı yordam) kullanmak, sp_hepltext.

sp_helptext ‘ÖrnekViewinİsmi’

Bu stored procedure’e Encryption yaptığımız örneğimiz üzerinde işlem yapmasını söylersek daha önce Encryption yapıldığı için sonuçta bir hata mesajı almamız kaçınılmaz. Fakat biz bunu öncelikle Encryption yapılmamış bir View üzeride deneyelim. Ben ilk yaptığımız View örneğini kullanarak sp_helptext stored procedure’ünü çalıştıracağım.

 

 

Örnek-4: sp_helptext Order_Customer

sp_helptext Order_Customer

 

 

 

Örnek-5: sp_helptext ProductsDetails(Encryption özelliği açık bir view’in kaynak içeriği görüntülenemez)

sp_helptext ProductsDetails 

 

SchemaBinding:

Encryption kelimesi kadar olmasa da Schemabinding kelimesinin tercümesi, zaten bize ne amaçlar için kullanabileceğimizi anlatmaya yeter gibi gözüküyor. Eğer oluşturacağımız View’de With Schemabinding kullanırsak ya da daha önce oluşturduğumuz bir View’e ALTER View ile With Schemabinding özelliği verirsek bu View’de görmek istediğimiz verilerin tutulduğu tablolardaki veri çektiğimiz sütunları kilitlemiş oluruz.

Bir View’e Schemabinding özelliği eklemek istiyorsak hatırlamamız gereken iki durum var.

-Schemabinding’li View’imizde * kullanamayız. Yani select * from ... diye bir cümle kullanmaktansa bütün sütunların isimlerini tek tek girmeliyiz. Eğer aşağıdaki gibi kullanırsak Schemabinding’in neden olduğu bir hata mesajı ile karşılaşırız.

Örnek-6: Schemabinding ve *

Schemabinding ve *

 

-Schemabinding kullanıyorsak View’imizin Select cümlesinde referans ettiği tabloların isimleri tablosahibininismi.tabloismi halinde olmalıdır. İlk olarak hatalı örnek, sorun halinde karşımıza çıkan hata ekranı ve sorunsuz çalışan halinin örneğini aşağıda da görebilirsiniz.

Örnek-7: Schemabinding ve tablosahibininismi.tabloismi yanlış kullanım

Schemabinding ve tablosahibininismi.tabloismi yanlış kullanım

 

 

 

 

 

Örnek-8: Schemabinding ve tablosahibininismi.tabloismi doğru kullanım

 

Schemabinding ve tablosahibininismi.tabloismi doğru kullanım 

Yukarıdaki örnekte View’de görüntüleyeceğimiz verilerin bulunduğu tablo ya da tablolardaki sütunların yapısında yapılacak herhangi bir değişikliği bu View’i silmedikçe ya da Schemabinding özelliğini View’imizden kaldırmadıkça yapamayacağız. Oldu da böyle bir işlemi Schemabinding özelliği varken yapmaya kalkıştık, SQL bize bu işlemin yapılamayacağını belirten bir hata mesajı verecektir. Kategoriler isimli View için kullandığımız dbo.Categories tablosundan CategoryName sütununu kaldırmaya çalışalım.

Örnek-9: Schemabinding ve tablo yapısında değişiklik yapma uyarısı

Schemabinding ve tablo yapısında değişiklik yapma uyarı

 

Bu sütunların yapısında değişiklik yapmayı kod tarafından değil de dizayn taraflı yönetim ekranından yapacak olursak ve başka hiçbir engel söz konusu değilse bize var olan değişikliği yapmak için Schemabinding’i kaldırmak isteyip istemediğimizi soracaktır. Eğer Schemabinding’i kaldırma isteğini onaylarsak Schemabinding’i kaldırıp istediğimiz yapısal değişiklikleri de yapacaktır.

 

Ekran-6: Schemabinding varken tablo yapısında değişiklik yapma

Schemabinding varken tablo yapısında değişiklik yapma

 

 

 

Ekran-7: Schemabinding kaldırma onay ekranı

Schemabinding kaldırma onay ekranı

 

 

Schemabinding özelliği View’de görüntülediğimiz verilerin sütun yapısına kilit koruması koyduğundan özellikle çok büyük veritabanları tasarlayan insanlar oluşturdukları her tablo için her sütunu içeren ve Schemabinding özelliği etkin bir view oluşturmaktan çekinmezler. Bunun nedeni daha çok yanlışlıkla geri dönüşü uzun süre tutacak bir yapısal değişiklik yapmaktan korunmaktır. Bu açıdan düşünecek olursak veritabanını veri girişi vb. yapısal olmayan değişikliler için inceleyen birinin tabloların yapısal durumunda değişiklik yapmasını engelleyebiliriz.

With Check Option:

Makaleye başlarken bahsettiğimiz gibi birçok insan View’leri sanal tablo olarak isimlendirmektedir. Bu sadece sözde kalan bir benzetme de değildir. View’leri kullanarak tablolar üzerinde DML(Data Manipulation Language) SQL komutları çalıştırabiliriz; Delete, Insert, Select, Update.

View’imiz üzerinden verilerde değişiklik yapmaya çalışırken göz önünde bulundurmamız gereken şartlar;

-Distinct yapısı kullanılmış View’lerin üzerinden Insert, Update ya da Delete gibi işlemler yapamayız. Aynı durum Group By kullandığımız View’ler içinde geçerlidir.

-View kullanarak birden fazla tabloda veri değişikliği yapamayız.

 

Gelin bu komutların View ile nasıl kullanıldığına dair bir örnek yapalım.

Örnek-10: Önce MusteriListele isminde yeni bir View oluşturalım

Önce MusteriListele isminde yeni bir View oluşturalım

 

Örnek-11: Şimdi ise bu View’i kullanıp yeni bir müşteri ekleyelim

Şimdi ise bu View’i kullanıp yeni bir müşteri ekleyelim

 

 

 

Ekran-8: Girilen verinin görüntüsü

Girilen verinin görüntüsü 

 

 

 

Eğer View’imizi bizim yaptığımız gibi belirli bir WHERE cümlesi kullanarak yaratıp az sonra örneğini inceleyeceğimiz gibi With Check Option özelliğini de bu View’imize eklediysek artık View üzerinden DML kullanarak yaptığımız işlemlerde View cümlesinin şartlarına uymayan veri değişikliğini, veri girişini engellemiş oluruz. Yani az önceki işlem bu koşullar altında hata verecektir.

Örnek-12: MusteriListele View’ine - With Check Option özelliği verelim

MusteriListele View’ine - With Check Option özelliği verelim 

 

 

 

Örnek-13: Şehri İstanbul olan bir kaydı tekrar girmeyi deneyelim

Şehri İstanbul olan bir kaydı tekrar girmeyi deneyelim

 

CREATE VIEW cümlesinin sentaksını bitirdikten sonra artık derlediğimiz View’i değiştirmek için ALTER VIEW ve oluşturduğumuz View’i silmek için DROP VIEW cümlelerine kısaca geçebiliriz. Makalenin başlangıcından sonuna kadar veritabanı konusunda az çok ilgisi olan bizlerin DDL(Data Definition Language) ile ilgili başlangıç bilgilerini bildiğini varsaydığım için DDL anlatmadım. Yalnız ALTER VIEW ve DROP VIEW’den örnekler vermeden de bu makale View hakkında tam bir makale olamayacaktır.

Örnek-14: Kategoriler View’inden Schemabinding özelliğini kaldıralım

Kategoriler View’inden Schemabinding özelliğini kaldıralım

 

 

 

Örnek-15: Son olarak Kategoriler View’ini silelim

Son olarak Kategoriler View’ini silelim

 

Umarım View’i yeni öğrenmeye başlamış arkadaşlar için yararlı bir makale olmuştur. Zaman bulursam SQL View hakkında başka bir makalede ileri seviye konulardan bahsedeceğim.

Yazan: Mustafa Bodur

 

SQLServerViews1.zip (372,16 kb)

Makaleler, Sql Dersler ,

Microsoft SQL Server 2008 Veri Platformu Geliyor

21. Ağustos 2008

Microsoft SQL Server 2008 Veri Platformu

SQL Server 2008

Teknolojiyi yakından izleyen ve inceleyen siz okurların bildiği gibi, son yıllarda donanım ve yazılım alanında sağlanan ilerlemelerin sonucu olarak artık şirketler ve şahıslar için, veri saklama ve veri yönetimi gibi işlemler eskiye oranla daha çok önem kazanmaktadır.  Hatta bu sorunu ortadan kaldıran yazılımlar ve çözümler kullanan şirketleri diğer şirketlerle kıyasladığımızda her zaman birkaç adım önden gitmekte olduklarını görmekteyiz. Böyle bir çözümün bir şirket veya şahıs için sağlayacağı en önemli kazanç elbette ki zamandır ve çoğu şirket için az zamanda daha fazla iş, daha fazla kazanç anlamına gelmektedir.

Verilerinizi istediğiniz zaman, istediğiniz mekândan yönetebilmeniz artık daha da kolay.

Microsoft SQL Server 2005 piyasaya çıkmasından bir süre sonra sağladığı yenilikler ve kolaylıklar sayesinde en yaygın kullanılmaya başlanan veritabanı platformu olmayı başardı. Şimdi ise yeni özellikler ve gelişmeler ile Microsoft SQL Server 2008’in bu yolda daha büyük adımlar atacağı tabi ki şüphe bile uyandırmıyor. Bu yazımızda bu çözümlerden en etkilisi olan Microsoft SQL Server 2008 Veri Platformu’nun bize sağladığı yeniliklerden ve bu yeniliklerin bize sağladığı kolaylıklardan kısaca bahsedeceğiz. Kısaca dememin nedeni, SQL Server 2008 ile birlikte karşılaşacağımız yeniliklerin sadece ana başlıklarını yazabilmek için bile iki sayfaya ihtiyaç duyulması. Elimden geldiğince bu yeniliklerden en çok karşılaşacaklarımızı seçmeye ve açıklamaya özen gösterdim.


Güvenlik
Microsoft SQL Server 2005’ten kullanımına aşina olduğumuz veri şifreleme artık eskisine oranla daha geliştirilmiş bir şekliyle önümüze sunulmakta. Özellikle son 10 yılın en önem verilen konusu haline gelen güvenlik, veri güvenliği ve şifreleme alt başlığı altında veritabanı platformlarının ayrılmaz bir parçası haline geldi. Güvenlik alanında yapılan yeniliklerin en göze çarpanlarından bahsedecek olursak;

Şeffaf Veri Şifreleme(Transparent Data Encryption)
SQL Server 2008 ile artık bütün bir veritabanını, verileri ya da veritabanında yaptığımız işlerin kayıt bilgilerini şifreleyebildiğimiz bir yapı ile karşı karşıyayız. Var olan uygulamaları yeniden yazmadan ve değişiklik yapmadan bu özelliği kullanmamız da mümkün.

Yedek Şifreleme(Backup Encryption)
Sadece veritabanını ya da verileri değil, veritabanından aldığımız yedeklerimizi de şifrelememize olanak sağlıyor. Bu şekilde aldığımız yedeklerin izinsiz kullanımından oluşabilecek bir güvenlik açığı için de önceden önlem almış oluyoruz.

Harici Şifreleme(External Key Management)
Az önce değindiğimiz, son zamanların gözde konusu olan güvenlik hakkında küçüklü büyüklü birçok şirket araştırmalar yapmakta ve yeni şifrelemeler geliştirmektedir. SQL Server 2005’te desteklenmeyen ve SQL Server 2008 ile desteklenecek olan bir diğer özellik ise artık üçüncü parti, harici şifrelemeleri destekleyen bir mekanizmanın var olması.

Veri Denetimi(Data Auditing)
En son giriş yapan kullanıcıları vb. gösteren denetimlerin yanı sıra veriler üzerindeki birçok işleminde daha ileri şekilde izlenmesini de sağlar. Böylece istenmeyen bir durum oluştuğu takdirde bilgilerimize kim tarafından, nasıl ulaşıldığını görebilmekteyiz.


Performans
Microsoft SQL Server 2008 bize sadece güvenlik alanında çığır açan yenilikler ile gelmiyor. Aynı anda performans alanında da birçok yenilik bizleri beklemekte. İyi tasarlanmadığı takdirde büyük veritabanlarında sık sık karşılaşabileceğimiz sorunlardan biri olan performans sorunu, artık sorun olmaktan çıkıp artı bir özellik olarak görülebilecek.

Yeni olarak bir sistemdeki gelişmeler hakkında veri toplayan ve bu veriler aracılığıyla sistemi takip etmemizi sağlayan araçlar daha etkin ve verimli bir şekilde ayarlanıp kullanılabiliyor. Böylece istediğimiz performans bilgilerine yoğunlaşıp var olan sistemimizi daha hızlı bir şekilde daha uyumlu hale getirebiliyoruz. Bunun dışında yine sistem performansı hakkında analiz yapan ve raporlama sunan sistemlerde aynı yeniliklerden nasibini almış durumda. Bu araçlar “Performance Studio” başlığı altındaki bileşenler olarak da karşımıza çıkıyor.

Kaynak Yönetimi(Resource Governor)
Hangi yazılım olursa olsun kullanımda en çok fark edildiği söylenen bileşenlerden biri de var olan yazılımın veya çözümün kaynak yönetim birimidir. Özellikle konu veri platformları olunca şunu söyleyebiliriz ki yeterli görülmeyen, eski veri platformlarında en çok yakınılan alt sistemlerden biridir. Microsoft SQL Server 2008 ile artık kullanıcılara ya da uygulamalara göre kaynak yönetimini ayarlamamız mümkün olmaktadır. Böylece farklı iş tipleri arasındaki kaynakları uygun bir şekilde ayırarak var olan performansı arttırabiliriz. Veritabanı üzerinde işlemler yapan bir adminle veritabanından basit bir sorgu çeken kullanıcı için ayıracağımız bellek ve işlemci miktarları üzerinde uygun değişikler yapmamız elbette bizim yararımıza olur.

Veri Sıkıştırma(Data Compression)
Veri sıkıştırma, kayıt edilen bilgilerin bellekte daha az yer kaplamasını böylece yapılan girdi-çıktı işlemlerinin azalmasını sağlamaktadır. Yapılan sıkıştırma işlemi sırasında makul miktar işlemcilere yük binse de, girdi-çıktı işlemleri sonucunda elde ettiğimiz getirilerin toplam performans üzerindeki artısı daha ağır basmaktadır.


Sürerlilik
SQL Server 2000’den, SQL Server 2005’e geçen çoğu insan zorluklarla ve problemlerle karşılaştığını söyler. Microsoft SQL Server takımı, çoğu şirketin çalkantılı bir dönem olarak gördükleri yeni teknolojiye geçiş dönemini olabildiğince rahat ve sorunsuz kılmak için SQL Server 2005’ten SQL Server 2008’e geçecek sistemler için birçok kolaylık sağlamış durumda.

İşlemci Ekleme(Hot-Add CPU)
SQL Server 2008 veri platformunun desteklediği donanımsal özelliklerden biri ise veritabanımız etkin bir şekilde çalışırken, çalışan sistem desteklediği takdirde sisteme yeni işlemci takıp çıkarabilme özelliği. İşlemci takıldıktan sonra sistem yeniden başlatılmadan Microsoft SQL Server 2008 tarafından uyumlu şekilde kullanılmaya başlanacaktır. Bu sayede sistemin kapalı olduğu zaman dilimi içerisindeki zarardan da kurtulmuş oluyoruz.


Uygulama Geliştirenler
Microsoft SQL Server 2008, uygulama geliştiren birçok yazılımcı ve yazılım şirketleri içinde benzer yenilikler içermektedir.

SQL Server 2008 ve .Net’in etkin birlikteliğiyle artık daha hızlı ve daha kolay şekilde uygulamalar geliştirmemiz de mümkün. Bu konudaki yeniliklerden en üstte olanı elbette LINQ. Peki, nedir LINQ? LINQ(Language Integrated Query), .Net Framework 3.5 ile ortaya çıkan bir Microsoft .Net Framework bileşenidir.  LINQ sayesinde insanlar, çoğu yazılımcı için bile karmaşık gelebilecek veri katmanı ile SQL’e benzeyen .Net dillerindeki sözdizimi(syntax) aracılığıyla bağlantı kurup işlerini daha kolay halledebilmektedirler.

SQL Server 2008 ile artık farklı formatlarda verilerimizi saklayıp bu veri tipleri içinde aramalar yapmamız, sorgular çekmemiz veya analizler yapmamızda mümkündür. Artan grafik birimlerine uygun şekilde SQL Server 2008’in coğrafi verilerin tutulmasını sağlayan tipleri olması da yadırganamayacak bir özelliği.


Yukarıda bahsettiğimiz özellikler Microsoft SQL Server 2008’in bize sağlayacağı düzinelerce yenilik ve kolaylıktan belki de en çok duyacaklarımız arasında bulunmaktadır. Son olarak, veri platformları ile tanışıklığı olan ama daha önce Microsoft SQL Server kullanma imkânı bulamadığını söyleyen kişilerin SQL Server 2008 sürümü ile artık daha fazla ilerlemelere kayıtsız kalamayacağını söylemek için ürünün tam sürümünün çıkmasını beklememiz bile gerekmiyor.

Güvenli ve Performanslı işlemler…

Yazan: Mustafa Bodur

Makaleler, Sql Dersler ,