Estimated I/O Cost Hesaplama

SQL Server için performance tuning ve optimizasyon süreçlerinin baş aktörü olan Execution Plan, çalıştırılan query nin relational engine ve storage engine tarafından nasıl karşılandığını, optimize edildiğini, tahmini ve gerçek çalışma prensipleri üzerine detaylı bilgiler vermektedir.

Bu makalede, execution planda operatörlerin gerçekleştirdiği, fiziksel ve mantıksal süreçler sonrasında göz ardı edilen ve ortaya çıkan detaylı birkaç bilgiden biri olan I/O cost un nasıl hesaplandığını inceleyeceğiz.

Cost ifadesi, SQL Server tarafından CPU ve I/O cost olarak iki ana birimde incelenmektedir. Cost değeri birimsizdir, yani saniye, milisaniye ya da kb cinsinden bir birimi yoktur. Storage Engine tarafından gerçekleşen işlemlere atanmak üzere kullanılan ölçektir diyebiliriz.

Execution planda yer alan operatörlere ait ölçeklerden CPU cost, birçok durumda row bazında gerçekleşen operasyonlar için değer üretmektedir. I/O cost ise, page bazında gerçekleşen işlemlerin ölçümü için gösterim sağlamaktadır.

Öncelikle demo için kullanılacak tableda clustered index tanımlı olduğunu belirtmekte fayda var.

İlk adımda yalnızca bir satır veri gelecek şekilde sorgumuzu çalıştıralım.

Sorgu sonucu oluşan execution planı incelediğimizde I/O cost değeri 0,003125 olarak görülmektedir.

Bu sorgu için verinin getirildiği page ve row slotu görüntüleyelim. Aşağıda da görüldüğü üzere, yalnızca 1 page sürece dahil olmaktadır.

Yukarıdaki çıktıya baktığımızda verinin 2047154 id li pageden geldiği görülebiliyor. Clustered index scan a neden olacak sorgumuzu değiştirelim ve I/O cost değerini inceleyelim.

Sorgu sonucu oluşan execution plan aşağıdadır.

Yukarıda tahmini I/O cost (Estimated I/O Cost : 1,11868) görülmektedir. Makaleye konu olan bu hesaplamanın nasıl yapıldığı ise aşağıdaki formüle dayanmaktadır.

Formül:

Minimum 1 page için üretilen Random I/O cost: 0.003125

Minimum 1 page için üretilen Sequential I/O cost: 0.000740741

Estimated I/O Cost : [Random I/O Cost] +  [Sequential I/O Cost] * [Data Page Count – 1]

Yukarıda clustered index scan a giren table ın sahip olduğu data page sayısına bakalım. Unutmamalıyız ki, bu senaryoda scan işlemi tüm tablo (ya da index) için tarama yaptığından sıralı yani Sequential I/O cost göz önünde bulundurulmalıdır.

Sonuç:

Formüle bağlı kalarak 1,11868 Estimated I/O Cost u elde edebilecek miyiz bakalım.

Sonuç ile execution plandaki cost değerlerini kontrol ettiğimizde (aşağıdaki gibi), aynı değerleri elde ettiğimizi görüyoruz.

Peki bu bize hangi konuda faydalı olacak? Eğer istatistikler güncel değilse ya da bir şekilde istatistikte yer alan row ve page count ölçekleri yanlış üretilmeye maruz kalmışsa, gereksiz I/O cost ve gecikmelere sebep olabilmektedir.

Yanlış istatistik, yanlış execution plan üretimi, cost tahminlerinin yanlış belirlenmesi veya kaynak gereksinimlerinin yanlış hesaplanması gibi olumsuz birkaç durumu beraberinde getirecektir. Derin optimizasyon ve analiz gerektiren durumlarda bu formülden faydalanmanız dileğiyle.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir