28 Ağustos 2015 Cuma

Kitap incelemesi: SQL Server 2014 Query Tuning & Optimization, yazar Benjamin Nevarez

Selam millet,

Aslında amazon.com'dan geçen sene sonunda satın aldığım bu kitabı, nihayet bugün bitirebildim.

Kitapta Benjamin, temel olarak şu konulardan bahsetmiş:
- Sorgu iyileştirmeye giriş,
- Sorgularla ilgili sorunların çözümü,
- Sorgu iyileştirici (Query Optimizer),
- Sorgu operatörleri,
- Index'ler,
- İstatistikler,
- In-Memory OLTP,
- Plan Cache,
- Veri ambarları,
- Sorgu işlemcisinin (Query Processor) sınırlamaları ve Hint'ler.

Kusura bakmayın biraz İngilizce/Türkçe kırması, tarzanca gibi oldu; ama bazı terimleri de çevirmeye çalışmak zor ve anlaşılmaz olabiliyor. Bununla birlikte bu terimlere zaten aşina değilseniz, bu konularla da ilgilenmiyorsunuzdur diye tahmin ediyorum, o yüzden bu noktaya çok da takılmayacağım.

Kitabın ilk bölümünde nasıl daha iyi "Execution Plan" üretilebilecek kodlar yazılabileceğinden, "Query Processor"un iç dinamiklerinden, performanslı çalışmayan sorgular için hangi SQL Server Tool'larının kullanılabileceğinden, "Execution Plan"ların nasıl okunabileceğinden bahsediliyor.

İkinci bölümde, sorgularımızın IO ve CPU gibi sistem kaynaklarını nasıl kullandığını öğrenmemize yardımcı olacak bazı teknikler gösteriliyor. Temel olarak "Extended Event"lerden ve "Data Collector"den, masraflı sorguları takip etmemize yardımcı olacak bazı "DMV" ve "DMF"lerden ve "SQL Trace"ten bahsediliyor.

Üçüncü bölümde Query Optimizer'ın nasıl çalıştığından, SQL Server'da çalıştırılmak üzere girdiğimiz bir SQL cümleciğinden nasıl bir "Execution Plan" oluştuğuna kadar, "parsing", "binding", "simplification", "trivial plan" ve "full optimization" safhalarından nasıl geçtiği ve "Query Optimizer" mimarisinin önemli parçaları anlatılıyor.

Dördüncü bölümde "Execution Plan"lardaki sık kullanılan operatörlerden bahsediliyor. Algoritmalar, karşılaştırmalı masraflar ve sık kullanılan operatörlerin hangi durumlarda ve neden kullanıldığından bahsediliyor. "Execution Engine" tarafından sıralama (Sorting) ve Hashing kavramlarının nasıl kullanıldığına, verileri birleştirme (Join) ve kümeleme (Aggregation) algoritmalarına da değinilmiş.

Beşinci bölüm Index'lere ayrılmış. Temel olarak B-Tree Index'lerinden bahsedilmiş, bu Index'lerin ne zaman ve nasıl kullanıldıkları ve Index'lerin parçalanması (fragmentation) konusu anlatışmış. Bunların yanında "Database Tuning Advisor" ve Index'lerle ilgili DMV'lerden de bahsedilmiş.

Altıncı bölümde İstatistikler'in SQL Server tarafından nasıl faydalanıldığı, istatistiklerin elementleri tanıtılıyor ve açıklanıyor. Ayrıca burada da Beşinci bölümdeki gibi İstatistiklerin bakımından bahsedilmiş.

Yedinci bölüm SQL Server 2014 ile birlikte gelen In-Memory OLTP (Hekaton) özelliğinin tanıtımına ayrılmış. Hatırlarsanız Benjamin Nevarez, geçen seneki Microsoft Türkiye ofisinde sevgili arkadaşım Yiğit Aktan'ın düzenlediği organizasyonla SQLSaturday'e de katılmıştı ve SQLSaturday öncesindeki Cuma günü de bir Precon oturumu yapmıştı. Bu Precon'da da, ertesi günkü SQLSaturday etkinliğinde de yine Hekaton'dan bahsetmişti.

Sekizinci bölüm "Plan Cache"e ayrılmış. Evet, her konu çok önemli, fakat ben Plan Cache'in özellikle kariyerinde belli bir noktaya gelmiş kişiler tarafından çok iyi bilinmesi gerektiğini düşünüyorum. SQL Server 2005 ile gelen DMV'ler sayesinde Plan Cache'teki birçok bilgiye çok daha ayrıntılı ulaşabiliyoruz. Özellikle performans sorunlarının çözümünde, Plan Cache'teki verilerden bu DMV'lerle faydalanabilmek çok önemli. Benjamin de bu bölümde sorgularımızın planlarının nasıl Plan Cache'te tutunup birden fazla kez kullanılabileceğinden ve diğer ilgili ayrıntılardan bahsetmiş.

Dokuzuncu çok kısa bir şekilde veriambarlarına değinmiş. Aslında burada temel olarak anlattığı şey OLTP ile OLAP sistemler arasındaki farkı vurgulamak ve SQL Server 2012 ile birlikte gelen Columnstore Index'lere değinmek olmuş. Ufaktan Fact tablolara, Star Join'lere, Batch işlem modundan da bahsetmiş.

Onuncu ve son bölümde ise SQL Server'daki bazı sınırlamalara dikkat çekmiş. Örneğin SQL Server'ın ender de olsa iyi Execution Plan'lar oluşturamadığından ve bu durumlarda neler yapılabileceğinden bahsedilmiş.

Genel olarak kitabı beğendim ben, alıp okumanızı tavsiye ederim.

Ekrem Önsoy

Hiç yorum yok: