INF: Τρόπος παρακολούθησης ο αποκλεισμός του SQL Server 7.0

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 251004 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Αυτό το άρθρο τεκμηριώνει τη χρήση και τη σχεδίαση μιας αποθηκευμένης η διαδικασία που μπορείτε να χρησιμοποιήσετε για τη διάγνωση ζητημάτων αποκλεισμού και τις επιδόσεις. Για ένα με ποιον τρόπο να καταλάβουν και να επιλύσετε αποκλεισμού, ανατρέξτε στα παρακάτω το άρθρο της Γνωσιακής Βάσης της Microsoft:
224453INF: Κατανόηση και την επίλυση πρόβλημα αποκλεισμού του SQL Server 7.0
Για πληροφορίες σχετικά με αυτά τα ίδια ζητήματα στο SQL Server 2000, ανατρέξτε στο ακόλουθο άρθρο της Γνωσιακής Βάσης της Microsoft:
271509INF: Τρόπος παρακολούθησης ο αποκλεισμός του SQL Server 2000

Περισσότερες πληροφορίες

Τοsp_blocker_pss70αποθηκευμένη διαδικασία, που περιγράφονται σε αυτήν την ενότητα, καταγράφει το παρακάτω πληροφορίες:
  • Η ώρα έναρξης (σύμφωνα με τον υπολογιστή που είναι εκτελεί τον SQL Server), έτσι ώστε η δειγματοληψία του αποκλεισμού της μπορεί να είναι στοιχισμένες χρόνου με άλλες πληροφορίες επιδόσεων, όπως το Microsoft Windows NT επιδόσεις Οθόνη ή ένα αρχείο καταγραφής SQL Profiler.

  • Πληροφορίες σχετικά με τις συνδέσεις με τον SQL Server, ζητώντας τοsysprocessesπίνακας του συστήματος.

  • Πληροφορίες σχετικά με τους πόρους του κλειδώματος, ζητώντας τηνsyslockinfoπίνακας του συστήματος.

  • Πληροφορίες σχετικά με τον πόρο θα περιμένει, εκτελώντας DBCC SQLPERF(WAITSTATS).

  • Της τρέχουσας δέσμης εκτελείται SQL για συνδέσεις που είναι αποκλείονται από άλλους χρήστες ή να αποκλείει άλλους, εκτελώντας DBCC INPUTBUFFER.

  • Η ώρα λήξης, σύμφωνα με τον υπολογιστή που εκτελεί το SQL Server.
Η αποθηκευμένη διαδικασία δημιουργήθηκε με το ακόλουθο βελτιστοποιήσεις για να μειώσετε την επίδραση στις επιδόσεις και αποκλεισμός εκτελώντας αυτό αποθηκευμένη διαδικασία:
  • Δεν υπάρχει κανένα αποτέλεσμα που δημιουργούνται εκτός εάν τουλάχιστον μία σύνδεση είναι σε αναμονή από έναν πόρο.

  • Τοsysprocessesκαιsyslockinfoπίνακες συστήματος από τουπόδειγμαβάση δεδομένων ερωτώνται απευθείας, για να αυξήσετε τις επιδόσεις και να εμποδίζει την όλο και αποκλειστεί η αποθηκευμένη διαδικασία. Επομένως, αυτό που είναι αποθηκευμένες η διαδικασία είναι συγκεκριμένες για Microsoft SQL Server 7.0.

  • Δημιουργείται ένα μικρό worktable με το δρομέα για να αποκτήσετε το DBCC INPUTBUFFER παραγωγής. Αυτό θα δεν έχουν αισθητές επιπτώσεις από τη χρήση του τοtempdbη βάση δεδομένων.

  • Επειδή ο αποκλεισμός μπορεί να αλλάξει κατά τη συλλογή του πληροφορίες, μια γρήγορη κατάσταση λειτουργίας υπάρχει, που αυξάνει την απόδοση, μειώνοντας τη αποτελέσματα στις σχετικές γραμμές τουsysprocessesκαιsyslockinfoπίνακες συστήματος.

  • Εάν προσπαθείτε να παρακολουθήσετε αναμονή μη κλείδωμα πόρων, μιας κλείθρου λειτουργία υπάρχει, που έχει ως αποτέλεσμα το κλείδωμα εξόδου να παραλείπονται.
Η αποθηκευμένη διαδικασία είναι χρήσιμη, εκτελώντας από οποιοδήποτε ερώτημα το εργαλείο. Ωστόσο, η Microsoft προτείνει να ακολουθήσετε αυτά τα βήματα για την εκτέλεση αποκλεισμός ανάλυσης:
  1. Δημιουργία αποθηκευμένης διαδικασίαςsp_blocker_pss70, που περιλαμβάνεται στο τέλος αυτού του άρθρου, από οποιοδήποτε ερώτημα εργαλείο ενώ είστε συνδεδεμένοι με μια σύνδεση που έχει δικαιώματα sysadmin στον το Διακομιστής SQL Server ή η παρουσία του SQL Server που πρόκειται να Εποπτεία.
  2. Δημιουργήστε ένα αρχείο δέσμης ενεργειών με το παρακάτω ερώτημα για την εκτέλεση του αποθηκευμένη διαδικασία σε μια επανάληψη. Σημειώστε ότι η καθυστέρηση είναι από 5 έως 60 δευτερόλεπτα:
    WHILE 1=1
    BEGIN
       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'
    END
    GO
    					
  3. Αυτό το μήνυμα είναι πολύ χρήσιμο, όταν συνδυάζεται με ένα Microsoft Καταγραφή εποπτείας επιδόσεων των Windows NT και ενός αρχείου καταγραφής SQL Profiler, δημιουργώντας έτσι, τόσο σε Προτείνεται συγχρόνως. Για πληροφορίες σχετικά με ποια Profiler και Συμβάντα της εποπτείας επιδόσεων για την καταγραφή, καθώς και για πληροφορίες σχετικά με τον τρόπο ερμηνεία των αποτελεσμάτων, ανατρέξτε στο ακόλουθο άρθρο τη γνώση της Microsoft Βάση:
    224453INF: Κατανόηση και την επίλυση πρόβλημα αποκλεισμού του SQL Server 7.0
  4. Εκτελέστε το αρχείο δέσμης ενεργειών που δημιουργήσατε στο βήμα 2 είτε από το Εργαλείο isql.exe ή Osql.exe ερώτημα από μια γραμμή εντολών των Windows στον υπολογιστή που εκτελεί τον SQL Server που πρόκειται να παρακολουθεί για να αποτρέψετε την δικτύωση προβλήματα από την αποσύνδεση του εργαλείου ερωτήματος. Ακολουθεί ένα παράδειγμα εντολής γραμμή εκκίνησης Osql.exe, πράγμα που προϋποθέτει ότι ο υπολογιστής-πελάτης εκτελείται από τον υπολογιστή που εκτελεί SQL Server, και ότι το αρχείο δέσμης ενεργειών ονομάζεται Checkblk.sql. Βεβαιωθείτε ότι για τη διόρθωση του -Sη παράμετρος, αντικαταστήστε το "διακομιστής" με το όνομα του διακομιστή SQL διακομιστής, σωστό του -Iη παράμετρος και αντικατάσταση "checkblk.sql" με τη διαδρομή και το όνομα για την το αρχείο δέσμης ενεργειών που δημιουργήσατε στο βήμα 2.
    osql -E -Sserver -icheckblk.sql -ocheckblk.out -w2000
    						
    Σημειώστε ότι πρέπει να χρησιμοποιήσετε τους άλλους διακόπτες γραμμής εντολών για το παρακάτω λόγους:

    • Για να αποτρέψετε την αναδίπλωση γραμμών στην έξοδο αρχείων, όπου καθιστά ευκολότερη την ανάγνωση.
    • Για να αποστείλετε την έξοδο σε ένα αρχείο, με το -oπαράμετρος, αντί για την οθόνη, ώστε να έχει το εργαλείο ερώτημα ότι αν προβλήματα, εξακολουθεί να εξάγετε μέχρι το εργαλείο ερώτημα αποτυγχάνει.
Ακολουθεί η δέσμη ενεργειών που μπορείτε να χρησιμοποιήσετε για να δημιουργήσετε τοsp_blocker_pss70αποθηκευμένη διαδικασία:

use master
GO

if exists (select * from sysobjects where id = object_id('dbo.sp_blocker_pss70') and sysstat & 0xf = 4)
   drop procedure dbo.sp_blocker_pss70
GO

create proc sp_blocker_pss70 (@latch int = 0, @fast int = 1)
as 
--version 13
set nocount on
declare @spid varchar(6)
declare @blocked varchar(6)
declare @time datetime
declare @time2 datetime
declare @time3 datetime
declare @dbname nvarchar(128)
declare @IsDetached tinyint
declare @IsEmergencyMode tinyint
declare @IsInLoad tinyint
declare @IsInRecovery tinyint
declare @IsNotRecovered tinyint
declare @IsOffline tinyint
declare @IsShutDown tinyint
declare @IsSingleUser tinyint
declare @IsSuspect tinyint

set @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 != 0x0000
create 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 -- All
else
  print '7 No Waittypes: ' + convert(varchar(26), @time, 121) + ' '
    + convert(varchar(12), datediff(ms,@time,@time3)) + ' ' + ISNULL (@@servername,'(null)')
GO 
	

Ιδιότητες

Αναγν. άρθρου: 251004 - Τελευταία αναθεώρηση: Πέμπτη, 27 Ιανουαρίου 2011 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft SQL Server 7.0 Standard Edition
Λέξεις-κλειδιά: 
kbhowto kbinfo kbsqlserv700 kbmt KB251004 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:251004

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com