12 Ekim 2015 Pazartesi

SQL Server'da Tablo Üzerindeki Aktivitelerin Takibi


Tablo Üzerindeki Aktivitelerin Takibi

Performance tuning’de önemli olan unsurlardan biride hangi tablo üzerinde ne kadar işlem yapıldığını anlamak olacaktır. Aşağıdaki kodda her bir  tablo için bize bilgiler döndürülecek ve bunlar bize tablolar üzerinde gerçekleşen read ve write işlem hacmini gösterecektir.
Yalnız dikkat edilmesi gereken bir husus varki dynamic managament views'dan bu istatistikler Sql Server her restart edildiğinde temizlenirler. Bu istatistikleri(wait ve latch) aynı zamanda manuel olarak da silebilirsiniz. (Dynamic Managament Views  ve function'lar bize server'ın durumu hakkında bilgi verir. Buradan Sql Server'ın durumunu izleyebilir, yaşanan herhangi bir problemi teşhis edebilir yada  performans iyileştirmeleri yapabilirsiniz.) Server'ın daha uzun süre açık olması dynamic management views'ın size daha güvenilir istatiskler sunmasını sağlayacaktır.


SELECT  @@ServerName AS ServerName ,
DB_NAME() AS DBName ,
OBJECT_NAME(ddius.object_id) AS TableName ,
SUM(ddius.user_seeks + ddius.user_scans + ddius.user_lookups)
AS Reads ,
SUM(ddius.user_updates) AS Writes ,
SUM(ddius.user_seeks + ddius.user_scans + ddius.user_lookups
+ ddius.user_updates) AS [Reads&Writes] ,
(SELECT    DATEDIFF(s, create_date, GETDATE()) / 86400.0
FROM      master.sys.databases
WHERE     name = 'tempdb'
) AS SampleDays ,
( SELECT    DATEDIFF(s, create_date, GETDATE()) 
AS SecoundsRunnig
FROM      master.sys.databases
WHERE     name = 'tempdb'
) AS SampleSeconds
FROM    sys.dm_db_index_usage_stats ddius
INNER JOIN sys.indexes i ON ddius.object_id = i.object_id
AND i.index_id = ddius.index_id
WHERE   OBJECTPROPERTY(ddius.object_id, 'IsUserTable') = 1
AND ddius.database_id = DB_ID()
GROUP BY OBJECT_NAME(ddius.object_id)
ORDER BY [Reads&Writes] DESC;
GO







0 yorum :

Yorum Gönderme