[INF] SQL Server 2000 のパフォーマンスと利用状況を監視するジョブ

この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
概要
この資料では、ブロッキング データとパフォーマンス データをトレース ファイルに格納して追加分析を行う ActivityTrace ジョブについて説明します。この資料から ActivityTrace ジョブのスクリプトをクエリ アナライザ ウィンドウにコピーし、そのスクリプトを実行してジョブを作成します。そのままでジョブは有効になり、1 分ごとに実行されるようにスケジュールが設定されます。


: この資料では、サポート対象でない DBCC コマンド (DBCC PSS) について説明します。この DBCC コマンドが原因で、予期しないエラーが発生することがあります。マイクロソフトでは、この DBCC コマンドの誤用により発生する問題に関しては、一切責任を負わないものとします。この DBCC コマンドは、自己の責任においてご使用ください。将来のバージョンの SQL Server では、この DBCC コマンドを使用できなくなる可能性があります。サポートされている DBCC コマンドの一覧については、SQL Server Books Online の「Transact-SQL リファレンス」にある「DBCC」を参照してください。

ActivityTrace ジョブを初めて実行するときに、ActivityTrace ジョブを制御する C:\ActivityTrace.ini という名前のファイルが作成されます。このファイルは、メモ帳を使用して編集できます。

トレースを開始するには ActivityTrace.ini ファイルを編集して、以下の変数のいずれかまたは両方を記載されているとおりに変更します。
@blockingcheck = yes@performancecheck = yes
変更後、次にジョブを実行するときにトレースが開始されます。

トレースを停止するには、ActivityTrace.ini ファイルを編集して、以下の変数のいずれかまたは両方を記載されているとおりに変更します。
@blockingcheck = no@performancecheck = no
次にジョブを実行するときに、トレースが停止されます。

トレースの結果は、C:\ActivityTrace.trc ファイルに書き込まれます。トレースが開始すると、元の C:\ActivityTrace.trc ファイルが上書きされます。そのため、トレースを再開する前に、C:\ActivityTrace.trc ファイルを別の場所にコピーしてください。

SQL プロファイラを使用してトレース ファイルのデータを表示し、ブロッキングまたはパフォーマンス バリヤを見つけます。

トレースによって収集されたデータ解析についての関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
283784 INF: How to View SQL Server 2000 Activity Data
283725 INF: How to View SQL Server 2000 Blocking Data
283886 HOW TO: View SQL Server 2000 Performance Data
トレースの制御に関する情報については、次の資料を参照してください。
283786 INF: How to Monitor SQL Server 2000 Traces
: ActivityTrace.ini ファイルで @blockingcheck パラメータと @performancecheck パラメータを no に変更して、トレースの停止を確認してください。上記の資料 (283786) で説明されている trace ストアド プロシージャを使用してトレースを停止した場合、トレースは停止されますがジョブは続行します。次にジョブを実行したときに、ActivityTrace.ini ファイルの少なくとも 1 つのパラメータが依然として yes に設定されていることが読み取られ、トレースが再開されます。その結果、元の ActivityTrace.trc ファイルが上書きされます。
詳細
ActivityTrace ジョブは、C:\ActivityTrace.ini ファイルによって制御されます。C:\ActivityTrace.ini ファイルには、以下の変数が含まれています。
  • @performancecheck
    @performance が yes の場合、ユーザー イベント 83 を使用して、トレース ファイルに sysperfinfo テーブルが書き込まれます。@performance が no の場合、ユーザー イベント 83 は生成されません。
  • @blockingcheck
    @blockingcheck が yes の場合、ユーザー イベント 82 を使用して、'no block' または 'blocking' のいずれかが記録されます。ブロッキングが存在する場合、ユーザー イベント 82 を使用して、トレース ファイルに sysprocesses テーブルおよび syslockinfo テーブルが出力されます。また、ユーザー イベント 82 は、ブロッキングが存在する場合に、トレース ファイルに dbcc pss 情報を出力するためにも使用されます。@blockingcheck が no の場合、この手順は省略されるので、ユーザー イベント 82 は生成されません。
  • @tracefile
    この @tracefile 変数で指定されたトレース ファイルにデータが書き込まれます。@tracefile を変更して、別のドライブおよびファイル名にトレースを保存します。トレースによって、.trc 拡張子が自動的に追加されることに注意してください。
  • @maxfilesize
    トレース ファイルが @maxfilesize 変数で指定された MB に達すると、ファイルが閉じられます。@maxfilesize を変更して、トレース ファイルのサイズ (MB 単位) を大きくするか小さくします。
  • @minMBfree
    @tracefile で指定されたドライブの空き領域の MB が、@minMBfree で指定された MB より小さい場合、トレースが停止します。
  • @stoptime
    @stoptime を変更して、トレースが自動的に停止されるように時間を設定します。
  • @options
    @options 引数が 2 に設定されている場合、@maxfilesize 変数を超えると、トレースで新しいトレース ファイルが作成されます。トレース ファイルが @maxfilesize 変数で指定した MB に達すると、そのファイルが閉じられ、新しいファイルが作成されます。@tracefile 変数で指定された元のトレース ファイルが C:\ActivityTrace の場合、元のファイルは C:\ActivityTrace.trc です。次のトレース ファイルは C:\ActivityTrace_1.trc で、その次のトレース ファイルは C:\ActivityTrace_2.trc というように続きます。
  • @events
    @events を変更して、トレースするイベントを制御します。
  • @columns
    @columns を変更して、トレースする列を制御します。
  • @filter1
    @filter 変数の数は、@filter 変数なしから @filter99 まで変化します。フィルタ変数は、@filter1 から始まり、最後のフィルタまで順序どおりに続く必要があります。@filter 変数の 4 つの引数は、column_id、logical_operator、comparison_operator、および値です。これらの引数が、sp_trace_setfilter というシステム ストアド プロシージャで使用されて、フィルタが作成されます。
  • @job_name
    @job_name 変数を変更して、トレース ジョブ名を ActivityTrace からそれ以外のジョブ名に変更します。ActivityTrace ジョブ名を変更する場合、ActivityTrace ジョブのプロパティの名前も変更する必要があります。
  • @schedule00seconds
    yes に設定すると、ジョブ ActivityTrace は schedule00seconds という名前のスケジュールで定義されたとおり、毎分 00 秒の時点で実行するようにスケジュールが設定されます。
  • @schedule15seconds
    yes に設定すると、ジョブ ActivityTrace は schedule15seconds という名前のスケジュールで定義されたとおり、毎分 15 秒の時点で実行するようにスケジュールが設定されます。
  • @schedule30seconds
    yes に設定すると、ジョブ ActivityTrace は schedule30seconds という名前のスケジュールで定義されたとおり、毎分 30 秒の時点で実行するようにスケジュールが設定されます。
  • @schedule45seconds
    yes に設定すると、ジョブ ActivityTrace は schedule45seconds という名前のスケジュールで定義されたとおり、毎分 45 秒の時点で実行するようにスケジュールが設定されます。
@schedule00seconds、@schedule15seconds、@schedule30seconds、および @schedule45seconds すべてが yes に設定されている場合、15 秒ごとにジョブが実行されます。@schedule00seconds、@schedule15seconds、@schedule30seconds、および @schedule45seconds すべてが no に設定されている場合、ジョブは実行されません。その場合、ジョブが実行されていないので、ActivityTrace.ini ファイルへの変更が検出されません。したがって、スケジュールの変更を検出するために、ジョブを手動で開始して、ActivityTrace.ini ファイルが読み取られるようにする必要があります。

@tracefile、@maxfilesize、@stoptime、および @options 引数についての関連情報は、SQL Server 2000 Books Online の資料「sp_trace_create」を参照してください。

@events 引数および @columns 引数についての関連情報は、SQL Server 2000 Books Online の資料「sp_trace_setevent」を参照してください。

フィルタの詳細については、SQL Server 2000 Books Online の資料「sp_trace_setfilter」を参照してください。

たとえば、以下の C:\ActivityTrace.ini という @traceini ファイルの内容を調べてみます。
@performancecheck  = no @blockingcheck     = no @tracefile         = C:\ActivityTrace @maxfilesize       = 50@minMBfree         = 200 @stoptime          = 2010-12-31 12:00:00.000 @options           = 2 @events            = 10,11,12,13,16,17,19,33,42,43,55,82,83 @columns           = 1,2,3,6,9,10,11,12,13,14,15,16,17,18,25 @filter1           = 10, 0, 7, N'SQL Profiler' @filter2           = 10, 0, 7, N'SQLAgent - Job Manager' @filter3           = 10, 0, 7, N'SQLAgent - Alert Engine' @filter4           = 10, 0, 7, N'SQLAgent - Generic Refresher' @filter5           = 3, 0, 1, 4 @job_name          = ActivityTrace @schedule00seconds = yes @schedule15seconds = no @schedule30seconds = no @schedule45seconds = no				
ActivityTrace.ini ファイルで上記のように変数を設定すると、ジョブ ActivityTrace (@jobname) は毎分指定された秒数の時点で実行されます (@schedule00seconds = yes)。このジョブは、トレース ファイル C:\ActivityTrace.trc (@tracefile) を作成するように設定され、ブロッキングとパフォーマンスのトレース アクティビティを含みます。ただし、トレースは開始されません (@performancecheck = no、@blockingcheck = no)。

トレースが開始された場合、トレース ファイルが 50 MB (@maxfilesize) に達すると、C:\ActivityTrace.trc が閉じられ、新しいファイル C:\ActivityTrace_1.trc が作成されます (@options)。以下のイベントがトレースされます (@events)。
  • RPC:Completed
  • RPC:Starting
  • SQL:BatchCompleted
  • SQL:BatchStarting
  • Attention
  • ExistingConnection
  • DTCTransaction
  • Exception
  • SP:Starting
  • SP:Completed
  • Hash Warning
  • User-defined event 82
  • User-defined event 83
以下の列がトレースされます (@columns)。
  • TextData
  • BinaryData
  • DatabaseID
  • NTUserName
  • ClientProcessID
  • ApplicationName
  • SQLSecurityLoginName
  • SPID
  • Duration
  • StartTime
  • EndTime
  • Reads
  • Writes
  • CPU
  • IntegerData
トレースでは、ApplicationName NOT LIKE 'SQL Profiler' (@filter1)、ApplicationName NOT LIKE 'SQLAgent - Job Manager' (@filter2)、ApplicationName NOT LIKE 'SQLAgent - Alert Engine' (@filter3)、ApplicationName NOT LIKE 'SQLAgent - Generic Refresher' (@filter4)、および DatabaseID NOT EQUAL 4 (@filter5) の条件に該当するイベントのみをキャプチャするように、イベントがフィルタ処理されます。

トレースは、2010 年 12 月 31 日の午後 12:00 に停止します (@stoptime)。

ActivityTrace ジョブのスクリプト

-- Script generated on 2/9/2001 12:02 PMBEGIN TRANSACTION  DECLARE @JobID BINARY(16)    DECLARE @ReturnCode INT  SELECT @ReturnCode = 0IF (SELECT COUNT(*) FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]') < 1   EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]'IF (SELECT COUNT(*) FROM msdb.dbo.sysjobs WHERE name = N'ActivityTrace') > 0   PRINT N'The job "ActivityTrace" already exists so will not be replaced.'ELSEBEGIN  -- Add the job.  EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N'ActivityTrace', @owner_login_name = N'sa', @description = N'Trace performance and blocking.', @category_name = N'[Uncategorized (Local)]', @enabled = 1, @notify_level_email = 0, @notify_level_page = 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   -- Add the job steps.  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 1, @step_name = N'CreateIniFile', @command = N'-- create C:\ActivityTrace.ini filedeclare @c nvarchar(256), @rc int, @i char(20)set @i = ''C:\ActivityTrace.ini''set @c = ''copy C:\ActivityTrace.ini C:\ActivityTrace.bak'' exec @rc = master.dbo.xp_cmdshell @c, no_outputif (@rc = 0) goto finishset @c = ''echo @blockingcheck     = no > ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @performancecheck  = no >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @tracefile         = C:\ActivityTrace >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @maxfilesize       = 50 >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @minMBfree         = 200 >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @stoptime          = 2010-12-31 12:00:00.000 >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @options           = 2 >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @events            = 10,11,12,13,16,17,19,33,42,43,55,82,83 >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @columns           = 1,2,3,6,9,10,11,12,13,14,15,16,17,18,25 >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @filter1           = 10, 0, 7, N''''SQL Profiler'''' >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @filter2           = 10, 0, 7, N''''SQLAgent - Job Manager'''' >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @filter3           = 10, 0, 7, N''''SQLAgent - Alert Engine'''' >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @filter4           = 10, 0, 7, N''''SQLAgent - Generic Refresher'''' >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @filter5           = 3, 0, 1, 4 >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @job_name          = ActivityTrace >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @schedule00seconds = yes >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @schedule15seconds = no >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @schedule30seconds = no >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputset @c = ''echo @schedule45seconds = no >> ''+@iexec master.dbo.xp_cmdshell @c, no_outputfinish:if exists (select * from dbo.sysobjects where id = object_id(N''[_t1]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)drop table [_t1]create table _t1 ([c1] nvarchar(512))exec (''bulk insert _t1 FROM ''''''+@i + '''''''')', @database_name = N'master', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 3, @on_fail_step_id = 0, @on_fail_action = 2  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 2, @step_name = N'CreateTrace', @command = N'-- create tracedeclare @p varchar(3), @b varchar(3), @traceid int, @options int, @tracefile nvarchar (245), @maxfilesize bigint, @stoptime datetime, @minMBfree bigint, @rc int, @on bit, @cmd1 nvarchar(128), @mbfree bigint, @job_name sysname, @s sysnameselect @p = cast(rtrim(ltrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as nvarchar (3)) from _t1 where left(c1,3) =  ''@pe''select @b = cast(rtrim(ltrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as nvarchar (3)) from _t1 where left(c1,3) = ''@bl''select @tracefile = cast(rtrim(ltrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as nvarchar (245)) from _t1 where left(c1,3) = ''@tr''select @maxfilesize = cast(rtrim(ltrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as bigint) from _t1 where left(c1,3) = ''@ma''select @minMBfree = cast(rtrim(ltrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as bigint) from _t1 where left(c1,3) = ''@mi''select @stoptime = cast(rtrim(ltrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as datetime) from _t1 where left(c1,3) = ''@st''select @options = cast(rtrim(ltrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as int) from _t1 where left(c1,3) = ''@op''select @job_name = cast(rtrim(ltrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as sysname) from _t1 where left(c1,3) = ''@jo''while (select count(*) from _t1 where left(c1,3) = ''@sc'') > 0begin select top 1 @s = cast(rtrim(ltrim(substring(c1,2,charindex(''='',c1,1)-2))) as sysname)  , @on = case upper(cast(rtrim(ltrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as varchar(3))) when ''YES'' then 1 else 0 end from _t1 where left(c1,3) = ''@sc'' EXEC msdb.dbo.sp_update_jobschedule @job_name=@job_name, @name = @s, @enabled = @on delete _t1 where cast(rtrim(ltrim(substring(c1,2,charindex(''='',c1,1)-2))) as sysname)  = @sendset @on = 1set @traceid = 0if @stoptime < getdate() goto stoptraceset @cmd1 = ''dir '' + left(@tracefile,2) + '' | find "bytes free"''insert into _t1 exec master.dbo.xp_cmdshell @cmd1select @mbfree = cast(replace(substring(c1,charindex(''Dir'',c1)+6,charindex(''bytes free'',c1)       -(charindex(''Dir'',c1)+6)),'','','''') as bigint)/1024/1024  from _t1 where charindex(''bytes free'',c1) > 0delete _t1 where left([c1],1) != ''@''SELECT @traceid = traceid FROM :: fn_trace_getinfo(0) where property = 2 and value = @tracefileif upper(@p) != ''YES'' and upper(@b) != ''YES'' goto stoptraceif @traceid != 0 and @mbfree > @minMBfree goto finishif @mbfree <= @minMBfree goto disableif @traceid != 0 goto finishset @cmd1 = ''if exist '' + @tracefile + ''.trc '' + ''del '' + @tracefile + ''*.trc''exec @rc = master.dbo.xp_cmdshell @cmd1, no_outputif (@rc != 0) goto disableexec @rc = sp_trace_create @traceid output, @options, @tracefile, @maxfilesize, @stoptimeif (@rc != 0) goto disablegoto finishdisable:exec msdb.dbo.sp_update_job @job_name = @job_name, @enabled = 0stoptrace:exec sp_trace_setstatus @traceid, 0exec sp_trace_setstatus @traceid, 2finish:', @database_name = N'master', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 3, @on_fail_step_id = 0, @on_fail_action = 2  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 3, @step_name = N'SetEvents', @command = N'-- set trace events and filtersdeclare @traceid int, @tracefile  nvarchar (245), @rc int, @on bit, @cmd1 nvarchar(256), @events varchar(512), @columns varchar(512), @event int, @column int, @estart int, @enext int, @cstart int, @cnext int, @le int, @lc int, @filter nvarchar(245), @filter_num intset @on = 1set @traceid = 0select @tracefile = cast(ltrim(rtrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as nvarchar (245)) from _t1 where left(c1,3) = N''@tr''select @events=cast(ltrim(rtrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as nvarchar (512)) from _t1 where left(c1,3) = N''@ev''select @columns=cast(ltrim(rtrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as nvarchar (512)) from _t1 where left(c1,3) = N''@co''SELECT @traceid = traceid FROM :: fn_trace_getinfo(0) where property = 2 and value = @tracefileif @traceid = 0 goto finishif (SELECT count(*) FROM ::fn_trace_geteventinfo(@traceid)) > 0 goto finishselect @estart = 1select @enext = charindex('','',@events,@estart)select @cstart = 1select @cnext = charindex('','',@columns,@cstart)set @le = len(@events)set @lc = len(@columns)while @enext > 0begin select @event = cast(substring(@events,@estart,@enext-@estart) as int) while @cnext > 0begin  select @column = cast(substring(@columns,@cstart,@cnext-@cstart) as int)  exec sp_trace_setevent @traceid, @event, @column, @on  select @cstart = @cnext + 1  select @cnext = charindex('','',@columns,@cstart)  if @cnext = 0 set @cnext = @lc + 1  if @cstart >@lc set @cnext = 0end select @cstart = 1 select @cnext = charindex('','',@columns,@cstart) select @estart = @enext + 1 select @enext = charindex('','',@events,@estart) if @enext = 0 set @enext = @le + 1 if @estart > @le set @enext = 0endset @cmd1 = ''exec sp_trace_setfilter '' set @filter = N''none''select @filter = cast(ltrim(rtrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as nvarchar (245)) from _t1 where cast(ltrim(rtrim(substring(c1,1,charindex(''='',c1,1)-1))) as nvarchar (245)) = N''@filter1''set @filter_num = 2while @filter != N''none''begin exec (@cmd1 + @traceid + '',''+@filter) set @filter_num = @filter_num + 1 set @filter = N''none'' select @filter = cast(ltrim(rtrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as nvarchar (245)) from _t1 where cast(ltrim(rtrim(substring(c1,1,charindex(''='',c1,1)-1))) as nvarchar (245)) = N''@filter'' + cast(@filter_num as nvarchar(3)) select @filterendfinish:exec sp_trace_setstatus @traceid, 1', @database_name = N'master', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 3, @on_fail_step_id = 0, @on_fail_action = 2  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 4, @step_name = N'blocking', @command = N'-- blocking checkdeclare @s table(id1 int identity, spid smallint, b smallint, d1 bit, ud binary(2540))declare @ud binary(2540), @id int, @spid smallint, @c nvarchar(128), @b varchar(3), @rc int,@ui nvarchar(128)select @b = cast(rtrim(ltrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as nvarchar (3))  from _t1 where left(c1,3) =  ''@bl''if upper(@b) != ''YES'' goto finishinsert into @s select spid, blocked, 0,cast(spid as binary(2))+cast(kpid as binary(2))+cast(blocked as binary(2))+waittype+cast(waittime as binary(4))+cast(lastwaittype as binary(64))+cast(waitresource as binary(512))+cast(dbid as binary(2))+cast(uid as binary(2))+cast(cpu as binary(4))+cast(physical_io as binary(8))+cast([memusage] as binary(4))+cast(login_time as binary(8))+cast(last_batch as binary(8)) +cast(ecid as binary(2))+cast(open_tran as binary(2))+cast(status as binary(60))+cast(sid as binary(86))+cast(hostname as binary(256))+cast(program_name as binary(256))+cast(hostprocess as binary(16))+cast(cmd as binary(32))+cast(nt_domain as binary(256))+cast(nt_username as binary(256))+cast(net_address as binary(24))+cast(net_library as binary(24))+cast(loginame as binary(256))+cast([context_info] as binary(128))+cast(l.rsc_text as binary(64))+cast(rsc_bin as binary(16))+cast(rsc_valblk as binary(16))+cast(rsc_dbid as binary(2))+cast(rsc_indid as binary(2))+cast(rsc_objid as binary(4))+cast(rsc_type as binary(1))+cast(rsc_flag as binary(1)) +cast(req_mode as binary(1))+cast(req_status as binary(1))+cast(req_refcnt as binary(2))+cast(req_cryrefcnt as binary(2))+cast(req_lifetime as binary(4))+cast(req_spid as binary(4))+cast(req_ecid as binary(4))+cast(req_ownertype as binary(2))+cast(req_transactionID as binary(8))+cast(req_transactionUOW as binary(16)) from master.dbo.sysprocesses p join master.dbo.syslockinfo l on p.spid = l.req_spid where (blocked != 0 or waittype != 0x0000) or (blocked = 0 and spid in (select blocked from master.dbo.sysprocesses where blocked != 0))if (select top 1 count(*) from @s) < 1 exec sp_trace_generateevent  82,  N''no block''elsebegin update @s set d1 = 1 where b = 0 and spid in (select b from @s where b != 0) while (select top 1 count(*) from @s where d1 = 1) > 0begin  select top 1 @spid = spid from @s where d1 = 1  set @c = ''osql -S''+@@servername+'' -Q"dbcc traceon(3604) dbcc pss(0,''         + cast(@spid as nvarchar(3))+ '')" -o C:\pss.txt -w128''  exec @rc = master.dbo.xp_cmdshell @c, no_output  if (@rc = 0) bulk insert _t1 FROM ''C:\pss.txt''  delete _t1 where left([c1],2) = ''00''  update @s set d1 = 0 where spid = @spid  while (select top 1 count(*) from _t1 where left([c1],1) != ''@'') > 0begin   select top 1 @ui = c1 from _t1 where left([c1],1) != ''@''   exec sp_trace_generateevent 82, @ui   delete _t1 where left(c1,5) = left(@ui,5)end  set @c = ''del C:\pss.txt''  exec master.dbo.xp_cmdshell @c, no_outputend while (select top 1 count(*) from @s where d1 = 0) > 0begin  select top 1 @id = id1, @ud = ud from @s where d1 = 0  exec sp_trace_generateevent 82, N''blocking'', @ud  delete @s where id1 = @idendendfinish:', @database_name = N'master', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 3, @on_fail_step_id = 0, @on_fail_action = 2  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   EXECUTE @ReturnCode = msdb.dbo.sp_add_jobstep @job_id = @JobID, @step_id = 5, @step_name = N'performance', @command = N'-- performance checkdeclare @s table (id1 int IDENTITY, UserData nvarchar(128))declare @UserData nvarchar(128), @id1 int, @p varchar(3), @b varchar(3), @rc int, @cmd nvarchar(80),@userinfo nvarchar(128), @row int, @lastrow intselect @p = cast(rtrim(ltrim(substring(c1,charindex(''='',c1,1)+1,len(c1)))) as nvarchar (3))  from _t1 where left(c1,3) =  ''@pe''if upper(@p) != ''YES'' goto finishinsert into @s select  left([object_name],40)+ left([counter_name],40)+ left([instance_name],35)+ cast([cntr_value] as nchar(11))  from master.dbo.sysperfinfo where cntr_value > 0while (select top 1 [id1] from @s) > 0begin select top 1 @id1 = [id1], @UserData = [UserData] from @s exec sp_trace_generateevent @eventid = 83,  @userinfo = @UserData delete @s where [id1] = @id1endfinish:if exists (select * from dbo.sysobjects where id = object_id(N''[_t1]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)drop table [_t1]', @database_name = N'master', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0, @on_fail_action = 2  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   EXECUTE @ReturnCode = msdb.dbo.sp_update_job @job_id = @JobID, @start_step_id = 1   IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   -- Add the job schedules.  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'schedule00seconds', @enabled = 1, @freq_type = 4, @active_start_date = 20001220, @active_start_time = 0, @freq_interval = 1, @freq_subday_type = 4, @freq_subday_interval = 1, @freq_relative_interval = 0, @freq_recurrence_factor = 0, @active_end_date = 99991231, @active_end_time = 235959  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'schedule30seconds', @enabled = 1, @freq_type = 4, @active_start_date = 20001227, @active_start_time = 30, @freq_interval = 1, @freq_subday_type = 4, @freq_subday_interval = 1, @freq_relative_interval = 0, @freq_recurrence_factor = 0, @active_end_date = 99991231, @active_end_time = 235959  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'schedule15seconds', @enabled = 1, @freq_type = 4, @active_start_date = 20001227, @active_start_time = 15, @freq_interval = 1, @freq_subday_type = 4, @freq_subday_interval = 1, @freq_relative_interval = 0, @freq_recurrence_factor = 0, @active_end_date = 99991231, @active_end_time = 235959  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   EXECUTE @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id = @JobID, @name = N'schedule45seconds', @enabled = 1, @freq_type = 4, @active_start_date = 20001227, @active_start_time = 45, @freq_interval = 1, @freq_subday_type = 4, @freq_subday_interval = 1, @freq_relative_interval = 0, @freq_recurrence_factor = 0, @active_end_date = 99991231, @active_end_time = 235959  IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback   -- Add the Target Servers.  EXECUTE @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @JobID, @server_name = N'(local)'   IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback ENDCOMMIT TRANSACTIONGOTO   EndSaveQuitWithRollback:  IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION EndSave: 				
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 283696 (最終更新日 2003-09-16) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。
プロパティ

文書番号:283696 - 最終更新日: 12/05/2015 23:36:58 - リビジョン: 3.1

Microsoft SQL Server 2000 Standard Edition

  • kbnosurvey kbarchive kbinfo KB283696
フィードバック