DetailPage-MSS-KB

Knowledge Base

Artikel-ID: 271509 - Geändert am: Donnerstag, 24. August 2006 - Version: 12.1

Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
271509  (http://support.microsoft.com/kb/271509/EN-US/ ) How to monitor SQL Server 2000 blocking
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.

Zusammenfassung

Dieser Artikel über Microsoft SQL Server 2000 ist ein Update des folgenden Microsoft Knowledge Base-Artikels, der sich auf Microsoft SQL Server 7.0 bezieht:
251004  (http://support.microsoft.com/kb/251004/DE/ ) INF: Überwachen von SQL Server 7.0-Blockierungen
Dieser Artikel dokumentiert den Einsatz und die Gestaltung einer gespeicherten Prozedur, mit deren Hilfe Sie Blockierungs- und Leistungsprobleme diagnostizieren können. Informationen zum Verständnis und zur Behebung von Blockierungsproblemen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
224453  (http://support.microsoft.com/kb/224453/DE/ ) INF: Verstehen und Lösen von Blockierproblemen in SQL Server 7.0 und SQL Server 2000

Weitere Informationen

Mit der gespeicherten Prozedur sp_blocker_pss80, die in diesem Abschnitt beschrieben wird, werden die folgenden Informationen eingeholt:
  • Die Startzeit (auf der Basis der Daten des Computers, auf dem SQL Server ausgeführt wird), damit dieses Blockierungsbeispiel mit anderen Leistungsinformationen abgeglichen werden kann, z. B. mit einem Protokoll des Microsoft Windows NT-Systemmonitors oder einem SQL Profiler-Protokoll.
  • Informationen zu Verbindungen mit SQL Server durch Abfragen der Systemtabelle sysprocesses.
  • Informationen zu LOCK-Ressourcen durch Abfragen der Systemtabelle syslockinfo.
  • Informationen zu Ressourcenwartezeiten durch Ausführen von DBCC SQLPERF(WAITSTATS).
  • Der aktuell ausgeführte SQL Server-Batch für Verbindungen, die von anderen blockiert werden oder andere blockieren (durch Ausführen der DBCC INPUTBUFFER-Anweisung).
  • Die Endezeit auf der Basis der Daten des Computers, auf dem SQL Server ausgeführt wird.
Die gespeicherte Prozedur wurde mit den nachstehend genannten Optimierungen erstellt, um die Auswirkungen auf Leistung und Blockierungen zu minimieren, die das Ausführen dieser Prozedur hat:
  • Es wird nur dann eine Ausgabe generiert, wenn mindestens eine Verbindung auf eine Ressource wartet.
  • Die Systemtabellen sysprocesses und syslockinfo aus der master-Datenbank werden direkt abgefragt, um die Leistung zu verbessern und zu verhindern, dass diese gespeicherte Prozedur blockiert wird. Aus diesem Grund ist diese gespeicherte Prozedur nur für Microsoft SQL Server 2000 geeignet.
  • Durch den Cursor wird eine kleine Arbeitstabelle erstellt, um die Ausgabe für die Befehle DBCC INPUTBUFFER und DBCC PSS zu erhalten; dies sollte keine nennenswerten Auswirkungen auf die Auslastung der Datenbank tempdb haben.
  • Da sich die Blockierung während des Einholens der Informationen ändern kann, gibt es einen Schnellmodus, der die Leistung verbessert, indem die Ergebnisse auf die wesentlichen Zeilen der Systemtabellen sysprocesses und syslockinfo beschränkt werden.
  • Wenn Sie nicht blockierende Ressourcenwartezeiten verfolgen möchten, gibt es dafür einen Latch-Modus, bei dem die Ausgabe für blockierende Ereignisse ausgelassen wird.
Diese gespeicherte Prozedur kann aus jedem Abfrageprogramm heraus ausgeführt werden. Microsoft empfiehlt jedoch, bei der Blockierungsanalyse wie folgt vorzugehen:
  1. Erstellen Sie die gespeicherte Prozedur sp_blocker_pss80, die am Ende dieses Artikels enthalten ist, mit einem beliebigen Abfrageprogramm. Sie müssen dabei mit einem Konto angemeldet sein, das über Berechtigungen des Typs sysadmin (Systemadministrator) für den SQL Server-Server oder die Instanz von SQL Server verfügt, die Sie überwachen möchten.
  2. Erstellen Sie eine Skriptdatei mit der folgenden Abfrage, um die gespeicherte Prozedur in einer Schleife ausführen zu lassen. Beachten Sie, dass die Verzögerung zwischen 5 und 60 Sekunden betragen sollte:
  3. Diese Ausgabe ist sehr nützlich, wenn Sie mit einem Microsoft Windows NT-Systemmonitorprotokoll oder einem SQL Profiler-Protokoll kombiniert wird; Sie sollten daher beide Protokolle gleichzeitig erstellen. Informationen dazu, welche Profiler- und Systemmonitor-Ereignisse protokolliert werden und wie die Ergebnisse zu interpretieren sind, finden Sie im folgenden Artikel der Microsoft Knowledge Base:
    224453  (http://support.microsoft.com/kb/224453/DE/ ) INF: Verstehen und Lösen von Blockierproblemen in SQL Server 7.0 und SQL Server 2000
  4. Führen Sie die in Schritt 2 erstellte Skriptdatei mit dem Abfrageprogramm "Isql.exe" oder "Osql.exe" von einer Windows-Eingabeaufforderung aus. Um zu vermeiden, dass die Verbindung zum Abfrageprogramm durch etwaige Netzwerkprobleme getrennt wird, tun Sie dies auf dem Computer, auf dem die zu überwachende Instanz von SQL Server ausgeführt wird. Es folgt ein Beispiel für eine Befehlszeile, die Sie zum Starten von "Osql.exe" verwenden können. Hier wird davon ausgegangen, dass der Client von dem Computer ausgeführt wird, auf dem SQL Server ausgeführt wird, und dass der Name der Skriptdatei "Checkblk.sql" lautet. Achten Sie darauf, den Parameter "-S" zu korrigieren und "server" durch den Namen Ihres SQL Server-Servers zu ersetzen (bzw. "servername/instance", wenn Sie eine benannte Instanz überwachen). Also correct the -i parameter, and replace "checkblk.sql" with the path and name to the script file created in step 2.
    osql -E -Sserver -icheckblk.sql -ocheckblk.out -w2000
    Beachten Sie, dass Sie die anderen Befehlszeilenoptionen aus den folgenden Gründen verwenden müssen:

    • Um Zeilenumbrüche in der Ausgabedatei zu vermeiden und diese dadurch besser lesbar zu machen.
    • Um die Ausgabe anstatt auf den Bildschirm in eine mit dem Parameter "-o" angegebene Datei zu senden, sodass bei etwaigen Problemen mit dem Abfrageprogramm zumindest bis zum Ausfall des Abfrageprogramms eine Ausgabe vorhanden ist.
Im Folgenden sehen Sie ein Skript zum Erstellen der gespeicherten Prozedur sp_blocker_pss80:
/* Note: This script is meant to have 2 creations of the same stored procedure and one of them will fail  with either 207 errors or a 2714 error. */  use master GO if exists (select * from sysobjects where id = object_id('dbo.sp_blocker_pss80') and sysstat & 0xf = 4)    drop procedure dbo.sp_blocker_pss80 GO create procedure dbo.sp_blocker_pss80 (@latch int = 0, @fast int = 1, @appname sysname='PSSDIAG') as  --version 16SP3 if is_member('sysadmin')=0  begin   print 'Must be a member of the sysadmin group in order to run this procedure'   return end  set nocount on SET LANGUAGE 'us_english' declare @spid varchar(6) declare @blocked varchar(6) declare @time datetime declare @time2 datetime declare @dbname nvarchar(128) declare @status sql_variant declare @useraccess sql_variant  set @time = getdate() declare @probclients table(spid smallint, ecid smallint, blocked smallint, waittype binary(2), dbid smallint,    ignore_app tinyint, primary key (blocked, spid, ecid)) insert @probclients select spid, ecid, blocked, waittype, dbid,    case when convert(varchar(128),hostname) = @appname then 1 else 0 end    from sysprocesses where blocked!=0 or waittype != 0x0000  if exists (select spid from @probclients where ignore_app != 1 or waittype != 0x020B) begin    set @time2 = getdate()    print ''    print '8.2 Start time: ' + convert(varchar(26), @time, 121) + ' ' + convert(varchar(12), datediff(ms,@time,@time2))     insert @probclients select distinct blocked, 0, 0, 0x0000, 0, 0 from @probclients       where blocked not in (select spid from @probclients) and blocked != 0     if (@fast = 1)    begin       print ''       print 'SYSPROCESSES ' + ISNULL (@@servername,'(null)') + ' ' + str(@@microsoftversion)        select spid, status, blocked, open_tran, waitresource, waittype,           waittime, cmd, lastwaittype, cpu, physical_io,          memusage, last_batch=convert(varchar(26), last_batch,121),          login_time=convert(varchar(26), login_time,121),net_address,          net_library, dbid, ecid, kpid, hostname, hostprocess,          loginame, program_name, nt_domain, nt_username, uid, sid,          sql_handle, stmt_start, stmt_end       from master..sysprocesses       where blocked!=0 or waittype != 0x0000          or spid in (select blocked from @probclients where blocked != 0)          or spid in (select spid from @probclients where blocked != 0)        print 'ESP ' + convert(varchar(12), datediff(ms,@time2,getdate()))         print ''       print 'SYSPROC FIRST PASS'       select spid, ecid, waittype from @probclients where waittype != 0x0000        if exists(select blocked from @probclients where blocked != 0)       begin          print 'Blocking via locks at ' + convert(varchar(26), @time, 121)          print ''          print 'SPIDs at the head of blocking chains'          select spid from @probclients             where blocked = 0 and spid in (select blocked from @probclients where spid != 0)          if @latch = 0          begin             print 'SYSLOCKINFO'             select @time2 = getdate()              select spid = convert (smallint, req_spid),                ecid = convert (smallint, req_ecid),                rsc_dbid As dbid,                rsc_objid As ObjId,                rsc_indid As IndId,                Type = case rsc_type when 1 then 'NUL'                                     when 2 then 'DB'                                     when 3 then 'FIL'                                     when 4 then 'IDX'                                     when 5 then 'TAB'                                     when 6 then 'PAG'                                     when 7 then 'KEY'                                     when 8 then 'EXT'                                     when 9 then 'RID'                                     when 10 then 'APP' end,                Resource = substring (rsc_text, 1, 16),                Mode = case req_mode + 1 when 1 then NULL                                         when 2 then 'Sch-S'                                         when 3 then 'Sch-M'                                         when 4 then 'S'                                         when 5 then 'U'                                         when 6 then 'X'                                         when 7 then 'IS'                                         when 8 then 'IU'                                         when 9 then 'IX'                                         when 10 then 'SIU'                                         when 11 then 'SIX'                                         when 12 then 'UIX'                                         when 13 then 'BU'                                         when 14 then 'RangeS-S'                                         when 15 then 'RangeS-U'                                         when 16 then 'RangeIn-Null'                                         when 17 then 'RangeIn-S'                                         when 18 then 'RangeIn-U'                                         when 19 then 'RangeIn-X'                                         when 20 then 'RangeX-S'                                         when 21 then 'RangeX-U'                                         when 22 then 'RangeX-X'end,                Status = case req_status when 1 then 'GRANT'                                         when 2 then 'CNVT'                                         when 3 then 'WAIT' end,                req_transactionID As TransID, req_transactionUOW As TransUOW             from master.dbo.syslockinfo s,                @probclients p             where p.spid = s.req_spid              print 'ESL ' + convert(varchar(12), datediff(ms,@time2,getdate()))           end -- latch not set       end       else          print 'No blocking via locks at ' + convert(varchar(26), @time, 121)       print ''    end  -- fast set     else      begin  -- Fast not set       print ''       print 'SYSPROCESSES ' + ISNULL (@@servername,'(null)') + ' ' + str(@@microsoftversion)        select spid, status, blocked, open_tran, waitresource, waittype,           waittime, cmd, lastwaittype, cpu, physical_io,          memusage, last_batch=convert(varchar(26), last_batch,121),          login_time=convert(varchar(26), login_time,121),net_address,          net_library, dbid, ecid, kpid, hostname, hostprocess,          loginame, program_name, nt_domain, nt_username, uid, sid,          sql_handle, stmt_start, stmt_end       from master..sysprocesses        print 'ESP ' + convert(varchar(12), datediff(ms,@time2,getdate()))         print ''       print 'SYSPROC FIRST PASS'       select spid, ecid, waittype from @probclients where waittype != 0x0000        if exists(select blocked from @probclients where blocked != 0)       begin          print 'Blocking via locks at ' + convert(varchar(26), @time, 121)          print ''          print 'SPIDs at the head of blocking chains'          select spid from @probclients          where blocked = 0 and spid in (select blocked from @probclients where spid != 0)          if @latch = 0          begin             print 'SYSLOCKINFO'             select @time2 = getdate()              select spid = convert (smallint, req_spid),                ecid = convert (smallint, req_ecid),                rsc_dbid As dbid,                rsc_objid As ObjId,                rsc_indid As IndId,                Type = case rsc_type when 1 then 'NUL'                                     when 2 then 'DB'                                     when 3 then 'FIL'                                     when 4 then 'IDX'                                     when 5 then 'TAB'                                     when 6 then 'PAG'                                     when 7 then 'KEY'                                     when 8 then 'EXT'                                     when 9 then 'RID'                                     when 10 then 'APP' end,                Resource = substring (rsc_text, 1, 16),                Mode = case req_mode + 1 when 1 then NULL                                         when 2 then 'Sch-S'                                         when 3 then 'Sch-M'                                         when 4 then 'S'                                         when 5 then 'U'                                         when 6 then 'X'                                         when 7 then 'IS'                                         when 8 then 'IU'                                         when 9 then 'IX'                                         when 10 then 'SIU'                                         when 11 then 'SIX'                                         when 12 then 'UIX'                                         when 13 then 'BU'                                         when 14 then 'RangeS-S'                                         when 15 then 'RangeS-U'                                         when 16 then 'RangeIn-Null'                                         when 17 then 'RangeIn-S'                                         when 18 then 'RangeIn-U'                                         when 19 then 'RangeIn-X'                                         when 20 then 'RangeX-S'                                         when 21 then 'RangeX-U'                                         when 22 then 'RangeX-X'end,                Status = case req_status when 1 then 'GRANT'                                         when 2 then 'CNVT'                                         when 3 then 'WAIT' end,                req_transactionID As TransID, req_transactionUOW As TransUOW             from master.dbo.syslockinfo              print 'ESL ' + convert(varchar(12), datediff(ms,@time2,getdate()))           end -- latch not set       end       else         print 'No blocking via locks at ' + convert(varchar(26), @time, 121)       print ''    end -- Fast not set     print 'DBCC SQLPERF(WAITSTATS)'    dbcc sqlperf(waitstats)     Print ''    Print '*********************************************************************'    Print 'Print out DBCC Input buffer for all blocked or blocking spids.'    Print '*********************************************************************'     declare ibuffer cursor fast_forward for    select distinct cast (spid as varchar(6)) as spid    from @probclients    where (spid <> @@spid) and        ((blocked!=0 or (waittype != 0x0000 and ignore_app = 0))       or spid in (select blocked from @probclients where blocked != 0))    open ibuffer    fetch next from ibuffer into @spid    while (@@fetch_status != -1)    begin       print ''       print 'DBCC INPUTBUFFER FOR SPID ' + @spid       exec ('dbcc inputbuffer (' + @spid + ')')        fetch next from ibuffer into @spid    end    deallocate ibuffer     Print ''    Print '*******************************************************************************'    Print 'Print out DBCC OPENTRAN for active databases for all blocked or blocking spids.'    Print '*******************************************************************************'    declare ibuffer cursor fast_forward for    select distinct cast (dbid as varchar(6)) from @probclients    where dbid != 0    open ibuffer    fetch next from ibuffer into @spid    while (@@fetch_status != -1)    begin       print ''       set @dbname = db_name(@spid)       set @status = DATABASEPROPERTYEX(@dbname,'Status')       set @useraccess = DATABASEPROPERTYEX(@dbname,'UserAccess')       print 'DBCC OPENTRAN FOR DBID ' + @spid + ' ['+ @dbname + ']'       if @Status = N'ONLINE' and @UserAccess != N'SINGLE_USER'          dbcc opentran(@dbname)       else          print 'Skipped: Status=' + convert(nvarchar(128),@status)             + ' UserAccess=' + convert(nvarchar(128),@useraccess)        print ''       if @spid = '2' select @blocked = 'Y'       fetch next from ibuffer into @spid    end    deallocate ibuffer    if @blocked != 'Y'     begin       print ''       print 'DBCC OPENTRAN FOR DBID  2 [tempdb]'       dbcc opentran ('tempdb')    end     print 'End time: ' + convert(varchar(26), getdate(), 121) end -- All else   print '8 No Waittypes: ' + convert(varchar(26), @time, 121) + ' '       + convert(varchar(12), datediff(ms,@time,getdate())) + ' ' + ISNULL (@@servername,'(null)') GO      create procedure dbo.sp_blocker_pss80 (@latch int = 0, @fast int = 1, @appname sysname='PSSDIAG') as  --version 16   if is_member('sysadmin')=0 begin   print 'Must be a member of the sysadmin group in order to run this procedure'   return end  set nocount on declare @spid varchar(6) declare @blocked varchar(6) declare @time datetime declare @time2 datetime declare @dbname nvarchar(128) declare @status sql_variant declare @useraccess sql_variant  set @time = getdate() declare @probclients table(spid smallint, ecid smallint, blocked smallint, waittype binary(2), dbid smallint,    ignore_app tinyint, primary key (blocked, spid, ecid)) insert @probclients select spid, ecid, blocked, waittype, dbid,    case when convert(varchar(128),hostname) = @appname then 1 else 0 end    from sysprocesses where blocked!=0 or waittype != 0x0000  if exists (select spid from @probclients where ignore_app != 1 or waittype != 0x020B) begin    set @time2 = getdate()    print ''    print '8 Start time: ' + convert(varchar(26), @time, 121) + ' ' + convert(varchar(12), datediff(ms,@time,@time2))     insert @probclients select distinct blocked, 0, 0, 0x0000, 0, 0 from @probclients       where blocked not in (select spid from @probclients) and blocked != 0     if (@fast = 1)    begin       print ''       print 'SYSPROCESSES ' + ISNULL (@@servername,'(null)') + ' ' + str(@@microsoftversion)        select spid, status, blocked, open_tran, waitresource, waittype,           waittime, cmd, lastwaittype, cpu, physical_io,          memusage,last_batch=convert(varchar(26), last_batch,121),          login_time=convert(varchar(26), login_time,121), net_address,          net_library, dbid, ecid, kpid, hostname, hostprocess,          loginame, program_name, nt_domain, nt_username, uid, sid       from master..sysprocesses       where blocked!=0 or waittype != 0x0000          or spid in (select blocked from @probclients where blocked != 0)          or spid in (select spid from @probclients where waittype != 0x0000)        print 'ESP ' + convert(varchar(12), datediff(ms,@time2,getdate()))         print ''       print 'SYSPROC FIRST PASS'       select spid, ecid, waittype from @probclients where waittype != 0x0000        if exists(select blocked from @probclients where blocked != 0)       begin          print 'Blocking via locks at ' + convert(varchar(26), @time, 121)          print ''          print 'SPIDs at the head of blocking chains'          select spid from @probclients             where blocked = 0 and spid in (select blocked from @probclients where spid != 0)          if @latch = 0          begin             print 'SYSLOCKINFO'             select @time2 = getdate()              select spid = convert (smallint, req_spid),                ecid = convert (smallint, req_ecid),                rsc_dbid As dbid,                rsc_objid As ObjId,                rsc_indid As IndId,                Type = case rsc_type when 1 then 'NUL'                                     when 2 then 'DB'                                     when 3 then 'FIL'                                     when 4 then 'IDX'                                     when 5 then 'TAB'                                     when 6 then 'PAG'                                     when 7 then 'KEY'                                     when 8 then 'EXT'                                     when 9 then 'RID'                                     when 10 then 'APP' end,                Resource = substring (rsc_text, 1, 16),                Mode = case req_mode + 1 when 1 then NULL                                         when 2 then 'Sch-S'                                         when 3 then 'Sch-M'                                         when 4 then 'S'                                         when 5 then 'U'                                         when 6 then 'X'                                         when 7 then 'IS'                                         when 8 then 'IU'                                         when 9 then 'IX'                                         when 10 then 'SIU'                                         when 11 then 'SIX'                                         when 12 then 'UIX'                                         when 13 then 'BU'                                         when 14 then 'RangeS-S'                                         when 15 then 'RangeS-U'                                         when 16 then 'RangeIn-Null'                                         when 17 then 'RangeIn-S'                                         when 18 then 'RangeIn-U'                                         when 19 then 'RangeIn-X'                                         when 20 then 'RangeX-S'                                         when 21 then 'RangeX-U'                                         when 22 then 'RangeX-X'end,                Status = case req_status when 1 then 'GRANT'                                         when 2 then 'CNVT'                                         when 3 then 'WAIT' end,                req_transactionID As TransID, req_transactionUOW As TransUOW             from master.dbo.syslockinfo s,                @probclients p             where p.spid = s.req_spid              print 'ESL ' + convert(varchar(12), datediff(ms,@time2,getdate()))           end -- latch not set       end       else          print 'No blocking via locks at ' + convert(varchar(26), @time, 121)       print ''    end  -- fast set     else      begin  -- Fast not set       print ''       print 'SYSPROCESSES ' + ISNULL (@@servername,'(null)') + ' ' + str(@@microsoftversion)        select spid, status, blocked, open_tran, waitresource, waittype,           waittime, cmd, lastwaittype, cpu, physical_io,          memusage,last_batch=convert(varchar(26), last_batch,121),          login_time=convert(varchar(26), login_time,121), net_address,          net_library, dbid, ecid, kpid, hostname, hostprocess,          loginame, program_name, nt_domain, nt_username, uid, sid       from master..sysprocesses        print 'ESP ' + convert(varchar(12), datediff(ms,@time2,getdate()))         print ''       print 'SYSPROC FIRST PASS'       select spid, ecid, waittype from @probclients where waittype != 0x0000        if exists(select blocked from @probclients where blocked != 0)       begin          print 'Blocking via locks at ' + convert(varchar(26), @time, 121)          print ''          print 'SPIDs at the head of blocking chains'          select spid from @probclients          where blocked = 0 and spid in (select blocked from @probclients where spid != 0)          if @latch = 0          begin             print 'SYSLOCKINFO'             select @time2 = getdate()              select spid = convert (smallint, req_spid),                ecid = convert (smallint, req_ecid),                rsc_dbid As dbid,                rsc_objid As ObjId,                rsc_indid As IndId,                Type = case rsc_type when 1 then 'NUL'                                     when 2 then 'DB'                                     when 3 then 'FIL'                                     when 4 then 'IDX'                                     when 5 then 'TAB'                                     when 6 then 'PAG'                                     when 7 then 'KEY'                                     when 8 then 'EXT'                                     when 9 then 'RID'                                     when 10 then 'APP' end,                Resource = substring (rsc_text, 1, 16),                Mode = case req_mode + 1 when 1 then NULL                                         when 2 then 'Sch-S'                                         when 3 then 'Sch-M'                                         when 4 then 'S'                                         when 5 then 'U'                                         when 6 then 'X'                                         when 7 then 'IS'                                         when 8 then 'IU'                                         when 9 then 'IX'                                         when 10 then 'SIU'                                         when 11 then 'SIX'                                         when 12 then 'UIX'                                         when 13 then 'BU'                                         when 14 then 'RangeS-S'                                         when 15 then 'RangeS-U'                                         when 16 then 'RangeIn-Null'                                         when 17 then 'RangeIn-S'                                         when 18 then 'RangeIn-U'                                         when 19 then 'RangeIn-X'                                         when 20 then 'RangeX-S'                                         when 21 then 'RangeX-U'                                         when 22 then 'RangeX-X'end,                Status = case req_status when 1 then 'GRANT'                                         when 2 then 'CNVT'                                         when 3 then 'WAIT' end,                req_transactionID As TransID, req_transactionUOW As TransUOW             from master.dbo.syslockinfo              print 'ESL ' + convert(varchar(12), datediff(ms,@time2,getdate()))           end -- latch not set       end       else         print 'No blocking via locks at ' + convert(varchar(26), @time, 121)       print ''    end -- Fast not set     print 'DBCC SQLPERF(WAITSTATS)'    dbcc sqlperf(waitstats)     Print ''    Print '*********************************************************************'    Print 'Print out DBCC Input buffer for all blocked or blocking spids.'    Print '*********************************************************************'     declare ibuffer cursor fast_forward for    select distinct cast (spid as varchar(6)) as spid    from @probclients    where (spid <> @@spid) and        ((blocked!=0 or (waittype != 0x0000 and ignore_app = 0))       or spid in (select blocked from @probclients where blocked != 0))    open ibuffer    fetch next from ibuffer into @spid    while (@@fetch_status != -1)    begin       print ''       print 'DBCC INPUTBUFFER FOR SPID ' + @spid       exec ('dbcc inputbuffer (' + @spid + ')')        fetch next from ibuffer into @spid    end    deallocate ibuffer     Print ''    Print '*******************************************************************************'    Print 'Print out DBCC OPENTRAN for active databases for all blocked or blocking spids.'    Print '*******************************************************************************'    declare ibuffer cursor fast_forward for    select distinct cast (dbid as varchar(6)) from @probclients    where dbid != 0    open ibuffer    fetch next from ibuffer into @spid    while (@@fetch_status != -1)    begin       print ''       set @dbname = db_name(@spid)       set @status = DATABASEPROPERTYEX(@dbname,'Status')       set @useraccess = DATABASEPROPERTYEX(@dbname,'UserAccess')       print 'DBCC OPENTRAN FOR DBID ' + @spid + ' ['+ @dbname + ']'       if @Status = N'ONLINE' and @UserAccess != N'SINGLE_USER'          dbcc opentran(@dbname)       else          print 'Skipped: Status=' + convert(nvarchar(128),@status)             + ' UserAccess=' + convert(nvarchar(128),@useraccess)        print ''       if @spid = '2' select @blocked = 'Y'       fetch next from ibuffer into @spid    end    deallocate ibuffer    if @blocked != 'Y'     begin       print ''       print 'DBCC OPENTRAN FOR DBID  2 [tempdb]'       dbcc opentran ('tempdb')    end     print 'End time: ' + convert(varchar(26), getdate(), 121) end -- All else   print '8 No Waittypes: ' + convert(varchar(26), @time, 121) + ' '      + convert(varchar(12), datediff(ms,@time,getdate())) + ' ' + ISNULL (@@servername,'(null)') GO         
Hinweis:In SQL Server 2005 können Sie die Ereignisklasse Blocked Process Report im SQL Profiler in Verbindung mit dem Befehl sp_configure dazu verwenden, die Option blocked process threshold zu konfigurieren.

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Standard Edition
Keywords: 
kbhowto kbinfo KB271509
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Freigeben
Weitere Supportoptionen
Microsoft Community-Supportforen
Kontaktieren Sie uns direkt
Zertifizierten Partner finden
Microsoft Store
Folgen Sie uns: