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 ONSELECT * 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 GOSELECT * FROM AdventureWorks.Person.Contact WHERE LastName in('Adams','Arun','Bailey')ORDER BY EmailAddress DESC,ContactID ASCGOSET 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 ONGOSELECT * FROM AdventureWorks.Person.Contact ORDER BY PhoneGOSET showplan_text OFF
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 ONGOSELECT Person.Contact.ContactID, Person.Contact.FirstName, Person.Contact.LastName, Person.Contact.EmailAddress, HumanResources.Employee.Gender, HumanResources.Employee.BirthDateFROM HumanResources.Employee INNER JOIN Person.Contact ON HumanResources.Employee.ContactID = Person.Contact.ContactIDGOSET showplan_all OFF
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 ONgoSELECT Person.Contact.ContactID, Person.Contact.FirstName, Person.Contact.LastName, Person.Contact.EmailAddress, HumanResources.Employee.Gender, HumanResources.Employee.BirthDateFROM HumanResources.Employee INNER JOIN Person.Contact ON HumanResources.Employee.ContactID = Person.Contact.ContactIDgoSET STATISTICS profile OFF
SHOWPLAN_XML ifadesi SHOWPLAN_TEXT ifadesinde üretilen değerin çıktısını XML şeklinde verir.
SET SHOWPLAN_XML {ON|OFF}