久しぶりにゴーストクリーンアップタスク (GhostCleanupTask) の続きを。
今回はゴーストクリーンアップタスクが動いているのを確認する方法などをまとめてみたいと思います。
何を書こうと思っていたか、だいぶ忘れてきてしまいました…。
勢いにのってガシガシ書かないと駄目ですね。
■ゴーストクリーンアップタスクを確認する方法
私が知っている範囲ですと以下の 2 種類でゴーストクリーンアップタスクが動いているかを確認することが可能です。
- SQL Server Profiler (SQL Trace)
- sys.dm_exec_requests
それぞれを使ってどのように確認するかを簡単に見ていきたいと思います。
■SQL Server Profiler
ゴーストクリーンアップタスクですが、SQL Server Profiler で確認することが可能です。
イベントとしては、[Transactions] の [SQL Transaction] になります。
このままだといろいろなトランザクション処理をひっぱてきてしまいますので、ObjectName に [Ghost] が含まれるもののみをフィルタリングします。
そうすると、ゴーストクリーンアップタスクが動いたタイミングでトレースに表示されるようになります。
トレースラグ [661] でゴーストクリーンアップタスクを無効にしていない場合はこのように表示されます。
Duration が 0 より大きいものに絞ってみるとこのような感じに。
一度の処理で大量のページを削除するのではなく少しずつ処理しているみたいですね。
■sys.dm_exec_requests
sys.dm_exec_requests を確認し続けることでも動作を見ることができます。
以前、DELETE について書いた時のクエリですね。
SET NOCOUNT ON DECLARE @i int = 0 |
このクエリを実行しておくとゴーストクリーンアップタスクが動作したタイミングで以下のような情報を取得することができます。
グリーンアップするページ数や、実行されるタクトについては詳しく調べきれていないので書けていないません…。
ゴーストクリーンアップタスクについてはあと一つぐらい書けそうなのですが、他の調べ物もしたいのでちょっとしてからまとめたいと思います。