(削除せずに)ビューが使用されなくなったかどうかを確認する方法はありますか?
理想的には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
残念ながら、100%正確にしたい場合、プランがまったくキャッシュされない可能性のあるSQL Serverのシナリオにはすべての種類があるため、プランキャッシュはそれを削減しません。たとえば、OPTION(RECOMPILE)、ゼロコストプラン、アドホックワークロードおよびシングルユースプランスタブなどの最適化。
2000-2012で機能するメソッドが必要なため、使用状況を確実に把握するための実際のオプションは、サーバー側のトレースをAudit Database Object Access
イベント:
http://msdn.Microsoft.com/en-us/library/ms175013.aspx
アクセス中のViewsのみをキャッチするように、ObjectType = 8278
でフィルタリングする必要があります。
http://msdn.Microsoft.com/en-us/library/ms180953.aspx
次に、ファイルデータをプルし、数時間ごと(またはデータ生成率によっては数日)ごとにカウントを集計するジョブをセットアップします。これにより、発生しているアクセスを正確に追跡できます。
ええ、私はTraceを次の人と同じくらい嫌いですが、これは、手元のタスクに適したツールであるシナリオの1つです。
FWIW、2012では、Server AuditまたはExtended Eventsを使用できますオブジェクトアクセスも追跡しますが、2000のトレース定義を作成すると、大部分が2012に移植可能になり、Profiler作業をより簡単にするためのスクリプトを生成します。