Pazartesi , 20 Kasım 2017

SQL Server 2016 Live Query Statistics

SQL Server 2016 ile beraber gelen Live Query Statistics(LQS) özelliği sorgularımızın performansı hakkında bize detaylı bilgi sunup, özellikle yavaş çalışan sorgularımızda sorunun belirlenmesi için çok kullanışlı bir özelliktir. Bu özellik sayesinde çalışan sorgularımızın hangi kısmının ne kadarının tamamlandığını Execution plan ekranında görebiliyoruz. Daha açık bir ifadeyle bildiğiniz gibi SQL Server üzerinde bir sorguyu çalıştırdığımızda SQL Server sorgumuza çalıştırmadan önce sorgumuzun optimum performansta çalışması için bir çalışma yolu yani Execution plan oluşturur. Execution plan üzerinde hangi tablo veya indeksten hangi veriyi okuduğunu ve bunun sorgumuza maliyetini görebiliriz.
Benzer olarak Live Query Statistics ise bize anlık olarak sorgumuzun hangi veriyi okuduğu, sorgumuzdaki işlemlerin veya operatörlerin ne kadarının tamamlandığını anlık olarak görebiliriz. Bu da bize hem sorgumuzun ne zaman biteceği hem de Execution planımızda bulunan ve o anda hangi operatörün çalıştığını detaylı olarak bize sunmaktadır.
Live Query Statistics, SQL Server 2016 ile beraber tanıtılmış olsa bile aslında temeli SQL Server 2014 ile beraber gelen sys.dm_exec_query_profiles adlı DMV(Dynamic Management View) dayanmaktadır. Bildiğiniz gibi bu DMV vasıtasıyla da sorgularımızın çalışma anında yani çalışması devam ederken hangi işlemin ne kadarının kaldığını takip edebiliyorduk fakat Live Query Statistics özelliği ile bu DMV çok daha kolay anlaşılır bir görsellik kazandı.
Şimdi Live Query Statistics özelliğimizi bir örnek üzerinde görelim. Bunun için örnek veritabanımız Adventureworks üzerinde uzun süren bir sorgu yazıp sorgunun çalışma sırasında oluşan Execution Planı inceleyelim. İlk olarak Live Query Statistics özelliğimizi aşağıdaki resimde gösterildiği gibi SQL Server Management Stdio üzerinden aktif edelim.

LQS1

 

Yukarıdaki gibi Live Query Statistics özelliğini aktif ettik sonra şimdi sorgumuzu çalıştırıp, çalışma esnasında Execution planımızı kontrol edelim. Uzun sürmesi açısından aşağıdaki gibi bir sorgu kullanabiliriz.


SELECT *

FROM Sales.SalesOrderDetail

CROSS JOIN Production.Product AS p

WHERE p.ProductID < 100

LQS2

Yukarıdaki resimde gördüğümüz gibi sorgumuzun çalışması esnasında aldığımız ekran görüntüsünü incelediğimizde sol alt tarafta sorgumuzun henüz sadece %25’lik kısmının tamamlandığınız görüyoruz. Ayrıca sağ alt tarafta ise Sales.SalesOrderDetail tablosundan yapılan veri okuma işleminin ise 1.865 saniyelik aman diliminde %73’lük kısmının tamamlandığını görebiliyoruz. Benzer olarak aynı zaman diliminde de Production.Product tablomuzun %25’lik kısmının işlenmesi tamamlanmıştır.

Live Query Statistics özelliği ile sorgumuzun çalışması esnasında görüntülenmiş olduğumuz Execution planımızda dikkat etmemiz gereken noktalardan bir diğeri ise kesikli çizgilerden oluşan operatörlerde işlem devam ederken, işlemi biten operatörün çizgileri ise sürekli hale dönüşmektedir.

Bir diğer önemli özellik ise sorgumuzun Execution planında bulunan herhangi bir operatörün özelliklerinde işlemin yüzdelik kısmına karşılık gelen kayıt sayısına da erişebiliriz.  Örneğin aşağıdaki resimde bulunan değerleri incelediğimizde Sales.SalesOrderDetail tablosundaki kayıtların %89’luk kısmı yani Actual Number of Rows değerinde bulunan 108834 adedi 2169 milisaniyede okunmuştur.

LQS3

Live Query Statistics özelliği SQL Server 2016 ile beraber gelen çok kullanışlı bir özellik olması rağmen bazı dezavantajları da var. Bunlardan ilki bu özelliğimizi kullandığımızda sorgumuzun maliyeti artacaktır. Bu sebeple bu özelliği her sorgumuz için aktif hale getirmek yerine gerçekte detaylı inceleme gereksinimi duyduğumuz sorgularda kullanmamız faydalı olacaktır. Ayrıca bir diğer dezavantaj ise Live Query Statistics özelliğini aşağıdaki SQL Server objeleri için henüz kullanamıyoruz. Fakat ilerleyen sürümlerde bu objeler de desteklenecektir.

  • Column Store index
  • Memory-Optimized table
  • Natively Compiled Stored Procedure

Son olarak sorgumuzun çalışması sırasında  Live Query Statistics ile oluşan Execution planımızın gif hali de aşağıdaki gibidir.

Hakkında ismailadar

Bir yorum

  1. Son olarak gif ile göstermiş olmanız olayı çok net özetlemiş. Emeğinize sağlık hocam..

Cevapla

E-posta adresiniz yayınlanmayacak. Required fields are marked *

*


*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>