BILGI: SQL Server 7.0 engelleme izlemek nasıl

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

Makalenin İngilizcesi aşağıdaki gibidir:251004
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Özet
Bu makalede, engelleme ve performans sorunlarını tanılamak için kullanabileceğiniz bir saklı yordam tasarım ve kullanımı belgelemektedir. Açıklaması ve engelleme gidermek için Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
224453INF: Anlama ve SQL Server 7.0 engelleme sorunu çözme
SQL Server 2000'de aynı bu sorunlar hakkında daha fazla bilgi için Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
271509BILGI: SQL Server 2000 engelleme izlemek nasıl
Daha fazla bilgi
Bu bölümde açıklanan sp_blocker_pss70 saklı yordamı, aşağıdaki bilgileri yakalar:
  • Başlangıç saati (SQL Server çalıştıran bilgisayar) için göre bu örnekleme engelleme zaman hizalanmış bir Microsoft Windows NT Performans izleyicisi günlüğü veya bir SQL Profiler günlüğü gibi diğer performans bilgilerle olabilir.

  • Sysprocesses sistem tablosundaki sorgulamak için SQL Server bağlantıları hakkında bilgi sağlar.

  • Syslockinfo sistem tablosu sorgulamak, kilit kaynaklar hakkında bilgi sağlar.

  • DBCC çalıştırarak, kaynağın bekleyeceği hakkında bilgi SQLPERF(WAITSTATS).

  • Geçerli başkaları tarafından engellenen bağlantıları için SQL toplu işlemi çalıştırmadan ve diğerleri, DBCC INPUTBUFFER çalıştırarak engelleme.

  • Bitiş saati, SQL Server çalıştıran bilgisayara göre.
Saklı yordamın, performansı ve bu saklı yordamını çalıştırarak engelleme etkisini azaltmak için bir aşağıdaki iyileştirmeleri ile oluşturuldu:
  • En az bir bağlantı bir kaynağı bekliyordur sürece üretilen çıktı yok.

  • Master veritabanını sysprocesses ve syslockinfo sistem tablolarından, performansı artırmak ve bu saklı yordam, engellenmiş olmasını önlemek için doğrudan sorgulanır. Bu nedenle, bu saklı yordam Microsoft SQL Server 7. 0'a özeldir.

  • Küçük bir worktable oluşturulan elde etmek için imleçle DBCC INPUTBUFFER çıkışını; bu fark kullanımı üzerinde tempdb veritabanında etkisi olmaz.

  • Durdurma bilgileri toplanırken değiştirmek için bir hızlı mod var, hangi sysprocesses ve syslockinfo sistem tablolarıyla ilgili satırları sonuçları azaltarak performansı artırır.

  • Olmayan kilit kaynağın bekleyeceği izlemek çalışılırken, çıkış atlanmış için Kilit, neden olan bir mandallı modu bulunmaktadır.
Bu saklı yordam, herhangi bir sorgu aracını çalıştırarak yararlıdır. Ancak Microsoft, engelleyici çözümlemesi yapmak için şu adımları izleyin önerir:
  1. SQL Server sunucusuna veya izlemek için planladığınız bir SQL Server örneğinin sysadmin ayrıcalıklara sahip bir oturum ile bağlı olduğunuz sırada sorgu aracı, bu makalenin sonunda bulunan, saklı yordamın sp_blocker_pss70, oluşturun.
  2. Bir komut dosyası bir döngüde saklı yordamı çalıştırmak için aşağıdaki sorgu oluşturun. 5 Ile 60 saniye arasında gecikme olan Not:
    WHILE 1=1BEGIN   EXEC master.dbo.sp_blocker_pss70   -- Or for fast mode    -- EXEC master.dbo.sp_blocker_pss70 @fast=1   -- Or for latch mode    -- EXEC master.dbo.sp_blocker_pss70 @latch=1   WAITFOR DELAY '00:00:15'ENDGO					
  3. Bu çıktıyı bir Microsoft Windows NT Performans izleyicisi günlüğü ve günlük SQL Profiler ile birleştirildiğinde kullanışlıdır, böylece her ikisi de aynı anda oluşturma önerilir. Yakalamak için hangi Profiler ve performans izleyicisi olayları ile ilgili bilgi ve sonuçları yorumlama hakkında bilgi için Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
    224453INF: Anlama ve SQL Server 7.0 engelleme sorunu çözme
  4. Adım 2'de aracından ya da isql.exe veya Osql.exe sorgu bir <a0>Windows</a0> komut satırından sorgu aracı kesme gelen ağ sorunlarını önlemek için izlemek istediğiniz SQL Server'ın çalıştığı bilgisayarda oluşturulan komut dosyasını çalıştırın. Hangi istemcinin SQL Server çalıştıran bilgisayardan çalıştırılan ve komut dosyası Checkblk.sql adlı Osql.exe başlatmak için bir örnek komut satırı aşağıdadır. Düzeltilecek emin olun - S parametresi, "sunucu" ile SQL Server'ınızın adını değiştirmek sunucu doğru i parametre ve komut dosyasının adını ve yolunu ile "checkblk.sql 2. adımda oluşturduğunuz" olarak değiştirin.
    osql -E -Sserver -icheckblk.sql -ocheckblk.out -w2000						
    Not komut satırını kullanmanız gerekir aşağıdaki nedenlerle geçirir:

    • Çıkış dosyaları, daha kolay okunur hale satır kaydırması önlemek için <a0></a0>.
    • Sorgu aracı sorunları varsa, sorgu aracı başarısız kadar yine de çıkış için çıkışı bir dosyaya göndermek o parametresi yerine ekrana belirtildi.
Sp_blocker_pss70 saklı yordamı oluşturmak için kullanabileceğiniz bir komut dosyası aşağıdadır:

use masterGOif exists (select * from sysobjects where id = object_id('dbo.sp_blocker_pss70') and sysstat & 0xf = 4)   drop procedure dbo.sp_blocker_pss70GOcreate proc sp_blocker_pss70 (@latch int = 0, @fast int = 1)as --version 13set nocount ondeclare @spid varchar(6)declare @blocked varchar(6)declare @time datetimedeclare @time2 datetimedeclare @time3 datetimedeclare @dbname nvarchar(128)declare @IsDetached tinyintdeclare @IsEmergencyMode tinyintdeclare @IsInLoad tinyintdeclare @IsInRecovery tinyintdeclare @IsNotRecovered tinyintdeclare @IsOffline tinyintdeclare @IsShutDown tinyintdeclare @IsSingleUser tinyintdeclare @IsSuspect tinyintset @time = getdate()select spid, ecid, blocked, waittype, dbid, 'ignore_app' = case   when convert(varchar(128),hostname) = 'PSSDIAG' then 1 else 0 end into #probclients  from master..sysprocesses where blocked!=0 or waittype != 0x0000create unique clustered index pc on #probclients (blocked, spid, ecid)set @time3 = getdate()if exists (select spid from #probclients where ignore_app != 1 or waittype != 0x020B)begin   set @time2 = getdate()   print ''   print '7 Start time: ' + convert(varchar(26), @time, 121) + ' '      + convert(varchar(12), datediff(ms,@time,@time2)) + ' ' + convert(varchar(12), datediff(ms,@time,@time3))   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 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'            set @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' 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 'IS'                                        when 5 then 'SIU'                                        when 6 then 'IS-S'                                        when 7 then 'IX'                                        when 8 then 'SIX'                                        when 9 then 'S'                                        when 10 then 'U'                                        when 11 then 'IIn-Nul'                                        when 12 then 'IS-X'                                        when 13 then 'IU'                                        when 14 then 'IS-U'                                        when 15 then 'X'                                        when 16 then 'BU' end,               Status = case req_status when 1 then 'GRANT'                                        when 2 then 'CNVT'                                        when 3 then 'WAIT' end            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 -- blocking via locks      else         print 'No blocking via locks at ' + convert(varchar(26), @time, 121)   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'            set @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' 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 'IS'                                        when 5 then 'SIU'                                        when 6 then 'IS-S'                                        when 7 then 'IX'                                        when 8 then 'SIX'                                        when 9 then 'S'                                        when 10 then 'U'                                        when 11 then 'IIn-Nul'                                        when 12 then 'IS-X'                                        when 13 then 'IU'                                        when 14 then 'IS-U'                                        when 15 then 'X'                                        when 16 then 'BU' end,               Status = case req_status when 1 then 'GRANT'                                        when 2 then 'CNVT'                                        when 3 then 'WAIT' end            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)   end -- Fast not set   print ''   print 'DBCC SQLPERF(WAITSTATS)'   dbcc sqlperf(waitstats)   print ''   print ''   Print '*********************************************************************'   Print 'Print out DBCC INPUTBUFFER for all blocked or blocking spids.'   Print '*********************************************************************'   declare ibuffer cursor fast_forward for   select cast (spid as varchar(6)) as spid, cast (blocked as varchar(6)) as blocked   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, @blocked   while (@@fetch_status != -1)   begin      print ''      exec ('print ''DBCC INPUTBUFFER FOR SPID ' + @spid + '''')      exec ('dbcc inputbuffer (' + @spid + ')')      fetch next from ibuffer into @spid, @blocked   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)      select @IsDetached = DATABASEPROPERTY(@dbname,'IsDetached')      select @IsEmergencyMode = DATABASEPROPERTY(@dbname,'IsEmergencyMode')      select @IsInLoad = DATABASEPROPERTY(@dbname,'IsInLoad')      select @IsInRecovery = DATABASEPROPERTY(@dbname,'IsInRecovery')      select @IsNotRecovered = DATABASEPROPERTY(@dbname,'IsNotRecovered')      select @IsOffline = DATABASEPROPERTY(@dbname,'IsOffline')      select @IsShutDown = DATABASEPROPERTY(@dbname,'IsShutDown')      select @IsSingleUser = DATABASEPROPERTY(@dbname,'IsSingleUser')      select @IsSuspect = DATABASEPROPERTY(@dbname,'IsSuspect')      print 'DBCC OPENTRAN FOR DBID ' + @spid + ' ['+ @dbname + ']'      if @IsDetached + @IsEmergencyMode + @IsInLoad + @IsInRecovery + @IsNotRecovered + @IsOffline         + @IsShutDown + @IsSingleUser + @IsSuspect = 0         dbcc opentran(@dbname)      else         print 'Skipped: Status=ID=' + str(@IsDetached,1) + ' IEM=' + str(@IsEmergencyMode,1) + ' IIL='            + str(@IsInLoad,1) + ' IIR=' + str(@IsInRecovery,1) + ' INR' + str(@IsNotRecovered,1) + ' IO='            + str(@IsOffline,1) + ' ISD=' + str(@IsShutDown,1) + ' ISU=' + str(@IsSingleUser,1) + ' IS='           + str(@IsSuspect,1)       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 ''   print 'End time: ' + convert(varchar(26), getdate(), 121)end -- Allelse  print '7 No Waittypes: ' + convert(varchar(26), @time, 121) + ' '    + convert(varchar(12), datediff(ms,@time,@time3)) + ' ' + ISNULL (@@servername,'(null)')GO 	
Performans

Özellikler

Makale No: 251004 - Son İnceleme: 12/05/2015 18:15:22 - Düzeltme: 3.2

Microsoft SQL Server 7.0 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowto kbinfo kbsqlserv700 KB251004 KbMttr
Geri bildirim