Sql-Server
SQL Server 如何檢測未使用的視圖和/或獲取使用情況統計資訊
有沒有辦法確定視圖是否不再被使用(不刪除它們)?
理想情況下,我想知道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