Kullanılmayan Tabloları Tespit Etmek
İyi bir veritabanı yöneticisi bir veritabanı sistemine bakmaya başladığında ilk yapması gereken işlemlerden biri veritabanlarındaki kullanılmayan indexleri ve tabloları tespit edip kaldırmaktır.
Tabloları kaldırmadan önce uygulamacıyla konuşmanız ve aşağıdaki script sonucunda dönen listeyi uygulamacılara göndermeniz ve uygulamacı onayını aldıktan sonra tabloları kaldırmanız daha sağlıklı olacaktır. Çünkü tablo yılda bir kez bir gün kullanılıyor olabilir!
Kullanılmayan index’leri bulmak için de “Kullanılmayan Indexleri Tespit Etmek” isimli makaleye göz atmak isteyebilirsiniz.
Aşağıdaki script yardımıyla sql server servisinin en son restartından bu yana kullanılmamış tabloları bulabilirsiniz.
NOT: En az 1 Aydır Kullanılmamış Tabloları Getirir.
WITH CTE (ObjectID, SonIslemZamani) AS ( SELECT object_id AS TableName, MAX(Last_User_Seek) as SonIslemZamani FROM sys.dm_db_index_usage_stats u WHERE database_id = db_id(db_name()) GROUP BY object_id UNION SELECT object_id AS TableName,MAX(last_user_scan) as SonIslemZamani FROM sys.dm_db_index_usage_stats u WHERE database_id = db_id(db_name()) GROUP BY object_id UNION SELECT object_id AS TableName,MAX(last_user_lookup) as SonIslemZamani FROM sys.dm_db_index_usage_stats u WHERE database_id = db_id(db_name()) GROUP BY object_id UNION SELECT object_id AS TableName,MAX(last_user_update) as SonIslemZamani FROM sys.dm_db_index_usage_stats u WHERE database_id = db_id(db_name()) GROUP BY object_id ) SELECT OBJECT_NAME(ObjectID)AS TableName, MAX(SonIslemZamani) as SonIslemTarihi FROM sys.objects O LEFT JOIN CTE C ON c.ObjectID=O.object_id WHERE O.is_ms_shipped=0 AND O.type<>'S' GROUP BY OBJECTID HAVING MAX(SonIslemZamani) <DATEADD(month, -1, GETDATE()) ORDER BY MAX(SonIslemZamani) ASC --ORDER BY OBJECT_NAME(c.ObjectID) -- İsterseniz bu kısmı açarak tablo ismine göre sıralayabilirsiniz.