SQL Server2005のパフォーマンスの問題のトラブルシューティングにspAskBrentを使用しました。
問題は、誰かがDBCCFREEPROCCACHEを実行したことであることがわかりました。データベースのパフォーマンスが低下し(PLEが非常に低くなり)、クエリがタイムアウトしました。
誰がクエリを実行してプランキャッシュを解放したかを知るにはどうすればよいですか?
インスタンスでまだ有効になっている場合は、SQLServerのdefault trace
内でこれを見つけることができるはずです。キャプチャされたイベントの1つはSecurity Audit: Audit DBCC Event
であり、イベントの詳細を読むことができます ここ 。
デフォルトのトレースが有効になっている場合は、次の MSSQLTips.comの記事からクエリを実行してDBCCがいつ実行されたかを確認してください :
DECLARE @path NVARCHAR(260)
SELECT @path=path FROM sys.traces WHERE is_default = 1
--Security Audit: Audit DBCC CHECKDB, DBCC CHECKTABLE, DBCC CHECKCATALOG,
--DBCC CHECKALLOC, DBCC CHECKFILEGROUP Events, and more.
SELECT TextData, Duration, StartTime, EndTime, SPID, ApplicationName, LoginName
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass IN (116) AND TextData like 'DBCC%CHECK%'
ORDER BY StartTime DESC