SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server のゴーストクリーンアップタスクの基本動作 その 4

leave a comment

久しぶりにゴーストクリーンアップタスク (GhostCleanupTask) の続きを。
今回はゴーストクリーンアップタスクが動いているのを確認する方法などをまとめてみたいと思います。

何を書こうと思っていたか、だいぶ忘れてきてしまいました…。
勢いにのってガシガシ書かないと駄目ですね。

■ゴーストクリーンアップタスクを確認する方法

私が知っている範囲ですと以下の 2 種類でゴーストクリーンアップタスクが動いているかを確認することが可能です。

  • SQL Server Profiler (SQL Trace)
  • sys.dm_exec_requests

それぞれを使ってどのように確認するかを簡単に見ていきたいと思います。

 

■SQL Server Profiler


ゴーストクリーンアップタスクですが、SQL Server Profiler で確認することが可能です。
イベントとしては、[Transactions] の [SQL Transaction] になります。
image

このままだといろいろなトランザクション処理をひっぱてきてしまいますので、ObjectName に [Ghost] が含まれるもののみをフィルタリングします。

image

そうすると、ゴーストクリーンアップタスクが動いたタイミングでトレースに表示されるようになります。
image

トレースラグ [661] でゴーストクリーンアップタスクを無効にしていない場合はこのように表示されます。
image

Duration が 0 より大きいものに絞ってみるとこのような感じに。
image

一度の処理で大量のページを削除するのではなく少しずつ処理しているみたいですね。

 

 

■sys.dm_exec_requests


sys.dm_exec_requests を確認し続けることでも動作を見ることができます。

以前、DELETE について書いた時のクエリですね。

SET NOCOUNT ON
GO
SELECT * INTO #tmp FROM sys.dm_exec_requests WHERE 1 = 0

DECLARE @i int = 0
WHILE (@i < 1)
BEGIN
    INSERT INTO #tmp SELECT  * FROM sys.dm_exec_requests
    WHERE command LIKE ‘%GHOST%’
    SELECT @i = COUNT(*) FROM #tmp
END
SELECT session_id, start_time,status,command FROM #tmp
DROP TABLE #tmp

このクエリを実行しておくとゴーストクリーンアップタスクが動作したタイミングで以下のような情報を取得することができます。
image

グリーンアップするページ数や、実行されるタクトについては詳しく調べきれていないので書けていないません…。
ゴーストクリーンアップタスクについてはあと一つぐらい書けそうなのですが、他の調べ物もしたいのでちょっとしてからまとめたいと思います。

Share

Written by Masayuki.Ozawa

4月 13th, 2011 at 11:21 am

Posted in SQL Server

Tagged with

Leave a Reply