INF: Úloha SQL Server 2000 Performance Monitor a aktivity

Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.

Projděte si také anglickou verzi článku:283696
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Souhrn
Tento článek popisuje úlohu ActivityTrace, umístí do trasovacího souboru pro další analýzu dat blokování a výkonu. Zkopírujte skript ActivityTrace úlohy z tohoto článku do okna Query Analyzer a spuštění skriptu úlohy vytvořit. Tak, jak je úloha povolena a naplánováno spuštění každou minutu.


NOTE: Tento článek popisuje příkazu DBCC (DBCC PSS), která není podporována a může způsobit neočekávané chování. Společnost Microsoft nemůže zaručit, že můžete vyřešit problémy způsobené nesprávné použití tohoto příkazu DBCC. Pomocí tohoto příkazu DBCC na vlastní nebezpečí. Tento příkaz DBCC nemusí být k dispozici v budoucí verze serveru SQL. Seznam podporovaných DBCC příkazů naleznete v tématu "DBCC" v části Reference Transact-SQL SQL Server Books Online.

Při prvním úloha provedena, vytvoří soubor s názvem C:\ActivityTrace.ini řídí úlohy ActivityTrace. Tento soubor lze upravit pomocí programu Poznámkový blok.

Spustit trasování upravit změnou jeden nebo oba následující proměnné uvedených souboru ActivityTrace.ini:
@blockingcheck = yes@performancecheck = yes
po provedení změny bude další provedení úlohy spustit trasování.

Zastavit trasování, upravit změnou obě následující proměnné uvedených souboru ActivityTrace.ini:
@blockingcheck = no@performancecheck = no
příštím úlohu provádí trasování bude ukončeno.

Výsledky trasování jsou zapsány do souboru C:\ActivityTrace.trc. Při spuštění trasování C:\ActivityTrace.trc původní soubor přepsán, proto nezapomeňte před restartováním trasování znovu zkopírujte soubor C:\ActivityTrace.trc do jiného umístění.

Slouží k zobrazení dat v souboru trasování najít blokování nebo výkonu bariéra SQL Profiler.

Další informace o analýze dat shromážděných trasování klepněte na následující čísla následujících článcích databáze Microsoft Knowledge Base:
283784INF: Jak data zobrazení SQL Server 2000 aktivity
283725INF: Jak data blokování zobrazení SQL Server 2000
283886Postupy: Zobrazení dat SQL Server 2000 výkonu
Informace o řízení trasování naleznete v následujícím článku:
283786INF: Jak sledování trasování SQL Server 2000
Poznámka: Ujistěte se, že změnou parametrů @ blockingcheck a @ performancecheck ne v ActivityTrace.ini souboru Zastavit trasování. Pokud zastavíte trasování prostřednictvím služby trasování uložené procedury popsané v článku právě odkazované (Q283786), trasování bude ukončeno, ale úloha bude pokračovat. Při příštím spuštění úlohy ji bude číst, že alespoň jeden z parametrů v souboru ActivityTrace.ini je stále nastavena na Ano a restartujte trasování přepsání původní soubor ActivityTrace.trc.
Další informace
Úloha ActivityTrace je řízena C:\ActivityTrace.ini soubor, který obsahuje následující proměnné:
  • @ performancecheck
    Pokud @ výkonu je Ano, uživatel událost 83 slouží tabulka sysperfinfo zapisovat do souboru trasování. Pokud je výkon @ Ne, není generován události uživatele 83.
  • @ blockingcheck
    Pokud @ blockingcheck je Ano, je uživatel události 82 použitých k zaznamenání buď žádné bloku nebo 'blokování. Pokud existuje blokování události uživatele 82 používá k zaznamenání sysprocesses a syslockinfo tabulky do trasovacího souboru. Události uživatele 82 slouží také k umístit dbcc pss informace do trasovacího souboru Pokud blokování existuje. Pokud je @ blockingcheck žádné, krok vynechán a události uživatele 82 není generován.
  • @ tracefile
    Data zapsána do trasovacího souboru zadaného v této proměnné @ tracefile. Změnit @ tracefile uložit trasování jiný název souboru a jednotky. Poznámka: rozšíření .trc automaticky přidán podle trasování.
  • @ maxfilesize
    Počet megabajtů zadané v proměnné @ maxfilesize dosáhne soubor trasování, je daný soubor zavřený. Změnit @ maxfilesize zvýšit nebo snížit velikost v megabajtech souboru trasování.
  • @ minMBfree
    Při megabajtů volného místa na jednotce určené v @ tracefile je menší než zadané v minMBfree @ megabajtů, trasování je zastavena.
  • @ stoptime
    @ Stoptime nastavit čas trasování automaticky zastavit změnit.
  • @ Možnosti
    Při argument @ možnosti je nastavena na 2, bude trasování při překročení proměnné @ maxfilesize vytvořit nové trasovací soubory. Počet megabajtů zadané v proměnné @ maxfilesize dosáhne soubor trasování, soubor zavřít a je vytvořen nový soubor. Pokud původní soubor trasování určený v proměnné @ tracefile C:\ActivityTrace, je původní soubor C:\ActivityTrace.trc. Další soubor trasování je C:\ActivityTrace_1.trc, další soubor trasování je C:\ActivityTrace_2.trc atd.
  • @ události
    Změnit @ události řídit události sledována.
  • @ sloupců
    Změna sloupců @ řízení sloupců sledována.
  • @ Filtr1
    Číslo proměnné @ filtru může lišit od žádné proměnné @ filtr @ filter99. Filtr proměnné musí začínat @ Filtr1 a pokračovat v posloupnosti na poslední filtr. Čtyři argumenty v proměnné @ filtru jsou column_id, logical_operator, operátor_porovnání a hodnota. Argumenty jsou používány systémovou uloženou proceduru sp_trace_setfilter, chcete-li vytvořit filtr.
  • @ job_name
    Změnit proměnné @ job_name měnit název úlohy trasování z ActivityTrace jiných název úlohy. Všimněte si, že pokud změnit název úlohy ActivityTrace je nutné také změnit název v ActivityTrace vlastností úlohy.
  • @ schedule00seconds
    Pokud je nastavena na Ano, bude úloha ActivityTrace naplánována spustit každou minutu na minutu podle definice plánu s názvem schedule00seconds.
  • @ schedule15seconds
    Pokud je nastavena na Ano, bude úloha ActivityTrace naplánován podle definice pojmenované schedule15seconds plán spuštění každou minutu 15 sekund za minutu.
  • @ schedule30seconds
    Pokud je nastavena na Ano, bude úloha ActivityTrace naplánován podle definice pojmenované schedule30seconds plán spuštění každou minutu 30 sekund za minutu.
  • @ schedule45seconds
    Pokud je nastavena na Ano, bude úloha ActivityTrace naplánován podle definice pojmenované schedule45seconds plán spuštění každou minutu 45 sekund za minutu.
Všimněte si, že pokud @ schedule00seconds, @ schedule15seconds, @ schedule30seconds a @ schedule45seconds jsou všechny sady Ano, spuštění úlohy každých 15 sekund. @ Schedule00seconds, @ schedule15seconds, @ schedule30seconds a @ schedule45seconds jsou všechny sady Ne, nelze úlohu spustit vůbec. V tomto případě protože úloha není spuštěna, nemůže rozpoznat změny do souboru ActivityTrace.ini; tedy úlohy musí být spuštěna ručně povolit jeho čtení souboru ActivityTrace.ini Změna plánu.

Další informace o @ tracefile @ maxfilesize, @ stoptime a @ možnosti argumenty naleznete SQL Server 2000 Books Online článku sp_trace_create.

Další informace o události @ a argumenty @ sloupců naleznete SQL Server 2000 Books Online článku sp_trace_setevent.

Další informace o filtrech naleznete SQL Server 2000 Books Online článku sp_trace_setfilter.

Zvažte například následující obsah souboru @ traceini nazývá C:\ActivityTrace.ini:
@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				
podle nastavení proměnné tímto způsobem v souboru ActivityTrace.ini ActivityTrace (@ jobname) úloha spustí každou minutu na minutu (@ schedule00seconds = Ano). Tato úloha je nastaven na vytvořit soubor trasování, C:\ActivityTrace.trc (@ tracefile), obsahovat blokování a výkonu trasování aktivity; však trasování nebude spuštěna (@ performancecheck = no, @ blockingcheck = Ne).

Trasování je spuštěna, když dosáhne tracefile 50 MB (@ maxfilesize), bude uzavřen C:\ActivityTrace.trc a nového souboru C:\ActivityTrace_1.trc bude vytvořen (@ Možnosti). Následující události bude trasovaných (@ události):
  • RPC: dokončeno
  • RPC: počáteční
  • SQL:BatchCompleted
  • SQL:BatchStarting
  • Pozornost
  • ExistingConnection
  • DTCTransaction
  • Výjimka
  • SP: počáteční
  • SP: dokončeno
  • Upozornění hash
  • Uživatelem definované události 82
  • Uživatelem definované události 83
Trasovaných (@ sloupců) budou následující sloupce:
  • TextData
  • BinaryData
  • DatabaseID
  • NTUserName
  • ClientProcessID
  • ApplicationName
  • SQLSecurityLoginName
  • SPID
  • Doba trvání
  • StartTime
  • EndTime
  • Přečte
  • Zapíše
  • Procesor
  • IntegerData
Trasování bude filtrovat události, aby pouze digitalizuje události, kde ApplicationName NOT například 'SQL Profiler' (@ Filtr1), ApplicationName NOT LIKE 'SQLAgent - Správce úloh' (@ Filtr2) ApplicationName NOT LIKE 'SQLAgent - oznámení Engine' (@ filter3) ApplicationName NOT jako 'SQLAgent - Generic aktualizační program' (@ filter4) a DatabaseID NOT rovná 4 (@ filter5).

Trasování bude zastavit v 12: 00 pm na prosinec 31, 2010 (@ stoptime).

Skript úlohy 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'') > 0 begin 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)  = @s endset @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 > 0 begin select @event = cast(substring(@events,@estart,@enext-@estart) as int) while @cnext > 0  begin  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 = 0  end 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 = 0 endset @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 @filter endfinish: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) > 0  begin  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) != ''@'') > 0   begin   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_output  end while (select top 1 count(*) from @s where d1 = 0) > 0  begin  select top 1 @id = id1, @ud = ud from @s where d1 = 0  exec sp_trace_generateevent 82, N''blocking'', @ud  delete @s where id1 = @id  endendfinish:', @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) > 0 begin select top 1 @id1 = [id1], @UserData = [UserData] from @s exec sp_trace_generateevent @eventid = 83,  @userinfo = @UserData delete @s where [id1] = @id1 endfinish: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: 				

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 283696 - Poslední kontrola: 12/05/2015 23:36:52 - Revize: 3.4

Microsoft SQL Server 2000 Standard Edition

  • kbnosurvey kbarchive kbmt kbinfo KB283696 KbMtcs
Váš názor