Sql-Server

SQL Server 如何檢測未使用的視圖和/或獲取使用情況統計資訊

  • February 14, 2018

有沒有辦法確定視圖是否不再被使用(不刪除它們)?

理想情況下,我想知道SQL Server 2000 和 2012的視圖使用情況。

我正在升級一些數據庫,並懷疑許多視圖不再被使用。此外,一些視圖將難以在新伺服器上編譯,因為它們訪問多個數據庫,其中一些沒有被移動到新伺服器。

即使這個答案已被接受,請參閱下面的Jonathan Kehayias 的答案,以獲得更好的方法來做到這一點。


對於 SQL Server 2012,您可以檢查計劃記憶體中的視圖名稱。

DECLARE     @FindSql nvarchar(max) = 'name_of_view';
SELECT 
   /* cp.*, ct.* */
   cp.objtype AS [Type],
   cp.refcounts AS ReferenceCount,
   cp.usecounts AS UseCount,
   cp.size_in_bytes / 1024 AS SizeInKB,
   db_name(ct.dbid) AS [Database],
   CAST(pt.query_plan as xml) as QueryPlan
FROM sys.dm_exec_cached_plans cp
OUTER APPLY sys.dm_exec_text_query_plan(plan_handle, 0, -1) pt
OUTER APPLY sys.dm_exec_sql_text(plan_handle) AS ct
WHERE (ct.text LIKE '%' + @FindSql + '%') OR (pt.query_plan LIKE '%' + @FindSql + '%')
ORDER BY cp.usecounts DESC;

您可能希望與使用DBCC FREEPROCCACHE <sql_plan_handle>視圖的任何計劃的計劃句柄一起使用,然後觀察上述查詢的結果以查看它是否再次彈出。

MSSQLTips有一篇關於在 SQL Server 2000 + 中執行此操作的精彩文章

USE Master
GO
SELECT 
   UseCounts, RefCounts,CacheObjtype, ObjType, DB_NAME(dbid) as DatabaseName, SQL
FROM syscacheobjects
WHERE SQL LIKE '%view_name_here%'
ORDER BY dbid,usecounts DESC,objtype

引用自:https://dba.stackexchange.com/questions/39596