Makale Özeti

SQL Server da o anda ki session yada session da çalıştırılan komular hakkında bilgiler vermeye yarayan SET komutları arasında yer alan istatistik komutları (Statistics Statements) çalıştırılan sorgu ve sorgunun çalışma performansı hakkında istatistiksel bilgi sağlarlar. Bu ifadelerden elde edilen bilgiler performansı iyileştirmede hangi alana ağırlık verileceğine karar vermek için kullanılabilir.

Makale

SQL Server da o anda ki session yada session da çalıştırılan komular hakkında bilgiler vermeye yarayan SET komutları arasında yer alan istatistik komutları (Statistics Statements) çalıştırılan sorgu ve sorgunun çalışma performansı hakkında istatistiksel bilgi sağlarlar. Bu ifadelerden elde edilen bilgiler performansı iyileştirmede hangi alana ağırlık verileceğine karar vermek için kullanılabilir.

 

STATISTICS IO ifadesi bizlere hangi tablo üzerinde kaç adet index araması yapıldığı , mantıksal ve fiziksel okuma sayıları hakkında bilgiler verir.

SET STATISTICS io ON
SELECT * FROM AdventureWorks.Person.Contact WHERE LastName in('Adams','Arun','Bailey')
SET STATISTICS io OFF

Sonuç:

Table 'Contact'. Scan count 1, logical reads 569, physical reads 0,
read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Not: logical read (mantıksal okuma) Sql Server ın cache den yaptığı page (8KB lık veri bölgeleri) okuma sayısıdır, buna karşılık physical read(fiziksel okuma) Sql Server ın disk den yaptığı okuma sayısıdır. Fiziksel Okuma sonucunda okunan Page ler cache lenirler.

STATISTICS TIME ifadesi sorgunun çalıştırılma süresi hakkında bilgi sağlar.

SET STATISTICS TIME ON
GO
SELECT * FROM AdventureWorks.Person.Contact WHERE LastName in('Adams','Arun','Bailey')
ORDER BY EmailAddress DESC,ContactID ASC
GO
SET STATISTICS TIME OFF

Sonuç :

SQL Server Execution Times:
   CPU time = 16 ms,  elapsed time = 307 ms.
SQL Server parse and compile time:
   CPU time = 0 ms, elapsed time = 2 ms.

Not : Elde edilen iki adet zaman birimi vardır, CPU Time vede Execution Time. Bu değerlerden CPU Time o anda harcanan CPU kaynağını belirlediği için Performance Tuning esnasında asıl dikkate alınması gereken değerdir ve o değerin düşürülemesi için çabalamak daha doğrudur.

SHOWPLAN_TEXT bir sorgunun çalışma durumu hakkında bilgi sağlar. Genel olarak daha basit çıktı vermek üzere tasarlanmıştır. SHOWPLAN_ALL ifadesi bu ifadeye oranla daha detaylı bilgi sağlamaktadır. Ancak bu iki ifade de bir stored procedure içerisinde yazılamazlar.

SET showplan_text ON
GO
SELECT * FROM AdventureWorks.Person.Contact ORDER BY Phone
GO
SET showplan_text OFF

Sonuç :

 

SHOWPLAN_ALL ifadesi bir T-SQL sorgusunun çalıştırılması sırasında geçilen adımları bizlere gösterir. İfadenin ürettiği çıktı bir tablo şeklindedir ve sql client yazılımları tarafından okunabilir bir formatta ortaya çıkar. Bu tabloda ortaya çıkan sütunlar arasında ÇalışanKodBloğu(StmtText),NodeId,ParentId, Yaklaşık CPU ve IO yükü(EstimateIO,EstimateCPU) gibi bilgiler bulunmaktadır.

SET showplan_all ON
GO
SELECT Person.Contact.ContactID, Person.Contact.FirstName, Person.Contact.LastName,
Person.Contact.EmailAddress, HumanResources.Employee.Gender, HumanResources.Employee.BirthDate
FROM HumanResources.Employee INNER JOIN Person.Contact
ON HumanResources.Employee.ContactID = Person.Contact.ContactID
GO
SET showplan_all OFF

Sonuç :

 

STATISTICS PROFILE ifadesi SHOWPLAN_ALL da elde ettiğimiz sonuca iki sütun daha ekler, her bir işlemde üretilen satır sayısı (rows) ve de her işlemin kaç kere çalıştırıldığı (executes).

SET STATISTICS profile ON
go
SELECT Person.Contact.ContactID, Person.Contact.FirstName, Person.Contact.LastName,
Person.Contact.EmailAddress, HumanResources.Employee.Gender, HumanResources.Employee.BirthDate
FROM HumanResources.Employee INNER JOIN Person.Contact
ON HumanResources.Employee.ContactID = Person.Contact.ContactID
go
SET STATISTICS profile OFF

Sonuç :

 

SHOWPLAN_XML ifadesi SHOWPLAN_TEXT ifadesinde üretilen değerin çıktısını XML şeklinde verir.

SET SHOWPLAN_XML {ON|OFF}