分析诊断进程跟踪文件工具ASS.AWK(1)

2/9/2008来源:Oracle教程人气:8316


  一个强大的分析诊断进程跟踪文件的工具ASS.AWK
  
  你可以使用下面方法产生系统状态跟踪文件
  
  process state dumps ==>一个进程的所有对象状态,假如确认哪个进程有问题,就用该方法
  
  system state dumps ==>整个系统的所有进程中的所有对象状态
  
  PRocess state dumps
  ~~~~~~~~~~~~~~~~~~~~~
  1.ALTER session SET EVENTS 'IMMEDIATE TRACE NAME PROCESSSTATE LEVEL 10';
  
  2.event = '604 trace name processstate,level 10'
  
  3.oradebug setospid 进程ID
   oradebug dump processstate 10;
  
  system state dumps
  ~~~~~~~~~~~~~~~~~~~~~
  1.ALTER SESSION SET EVENTS 'IMMEDIATE TRACE NAME SYSTEMSTATE LEVEL 10';
  
  2.event = '604 trace name systemstate,level 10'
  ass.awk的脚本
  ===========
  ass.awk
  ===========
  REM ------------------------------------------------------------------------------------------------
  REM #DESC   : Generate a formatted report from system state dump showing who's blocking whom
  REM Usage   : See below
  REM Description: Must run this script on the db server where the trace file resides
  REM ------------------------------------------------------------------------------------------------
  
  # Usage InstrUCtions
  # ~~~~~~~~~~~~~~~~~~
  # Usage: [n]awk -f ass.awk fname.trc  (But read the Portability Section !!)
  #
  # Configuring Ass:
  #
  #  By default, 'ass' attempts to dump as much information as possible and
  # assumes that the output is to be printed to screen. This means that 'ass'
  # runs in its slowest mode. Ass can be changed/speeded up by amending the
  # following variables in the BEGIN section :
  #
  #  interactive...........1 = show indication of processing [default]
  #             0 = don't show anything (faster)
  #  verbose...............1 = prints additional info    [default]
  #             0 = don't show info (faster)
  #  eventdetail...........1 = prints additional event info for selected events
  #               [default]
  #             0 = don't do the above (faster)
  #  skipbranch............1 = Skip 'branch of' state objects cause by SQL*NET
  #               loopback sessions etc (default)
  #             0 = don't skip 'branch of' transactions
  #  seqinfo...............1 = Output sequence number for WAITING processes
  #             0 = Do not dump seq# information.
  #
  # Portability
  # ~~~~~~~~~~~
  # 1) This uses the nawk extension of functions. Some variants of awk accept
  #   this (eg HP-UX v10) and others do not. Use nawk if awk fails !!
  #
  #   Alpha OSF/1  nawk     IBM RS/6000  awk
  #   Sun Solaris  nawk     HPUX     awk (v10) ???
(v9)
  #   Sun SunOS   nawk     Sequent    nawk
  #
  # 2) The Alpha version of awk can only handle 99 fields and will return
  #   a message like 'awk: Line ..... cannot have more than 99 fields'.
  #   The w/a: Either change the identified line or use a different platform.
  #
  # Known Restrictions
  # ~~~~~~~~~~~~~~~~~~
  # o The script assumes a certain structure to the System State. This means
  #  that this cannot be used on systemstates produced by MVS or VM.
  #  [To make it work the first two or three Words need to be stripped from]
  #  [each line in the systemstate trace file.               ]
  #
  # o This has been developed to work with Oracle7. It *may* work with Oracle
  #  version 6 but this has not been tested.
  #
  # o The code currently does not recognise processes that are CONVERTING locks.
  #  Eg, I have an SX lock and I am requesting the higher SSX mode.
  #  This will result in the process as waiting for a lock when it owns it. Note
  #  that if any other process has the resource locked then both are listed
  #  as holding the resource but a SELF-DEADLOCK is not flagged.
  #
  # o It looks like there may be a bug with listing processes that are
  #  blocking others because they have a buffer s.o. that others are waiting
  #  on.
  #
  # Coding Notes
  # ~~~~~~~~~~~~
  # o There's an obscure usage of building the blkres word list. It seems
  #  that you cannot just say : blkres[a,b] = blkres[a,b] " " newval
  #  You have to use a temporary variable ('tb' in our case) to achieve this.
  # o Sequent doesn't seem to like logical Operators being used with regular
  #  eXPressions. Hence the 'wait event' section had to be re-written to use
  #  $0 ~ /a/ $0 ~ /b/. Just try the following test :
  #
  #    NR == 1 && /a/ /b/ { print }
  #
  # History
  # ~~~~~~~
  # kquinn.uk  v1.0.0 04/96  Created
  # kquinn.uk  v1.0.1 04/96  Minor changes to run with nawk on OSF1 and AIX
  #                Blocking Section's output changed slightly
  # kquinn.uk  v1.0.2 04/96  Dumps object names for library objects
  #                Now sequent-nawk aware
  #                First public release
  # kquinn.uk  v1.0.3 06/96  File I/O wait events now output file, block etc
  # kquinn.uk  v1.0.4 07/96  Parallel Query Dequeue Reason codes now output
  # kquinn.uk  v1.0.5 08/96  Added QC to QS code
  #                Added code to skip 'branch of' state objects
  # kquinn.uk  v1.0.5 03/97  Output Oracle command based on 'oct:' code.
  #                (Note that only the PARENT session's command
  #                code is output).
  #                Strip carriage returns (^M)
  # kquinn.uk  v1.0.6 10/97  Indicate dead processes
  # kquinn.uk  v1.0.7 09/98  Print some more wait information for certain
  #                wait events and handle waits on the sequence
  #                enqueue.
  # kquinn.uk  v1.0.8 12/98  Minor changes
  #                Changed to accomodate new systemstate format
  #                so that we identify the start of a systemstate
  #                correctly once more.
  #                Added seq# processing for waiting processes.
  #                Dumped more info for DFS lock acquisition
  #
  # Current Enhancement Requests Oustanding
  # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # o Pick out error code in PQO Queue Ref's
  # o Test concatenating all array elements so that we affectively use singular
  #  arrays. This may speed the processing depending upon how the implementation
  #  of awk uses multi-dimensional arrays.
  #
  ##############################################################################
  # Any failure cases or suggested improvements then please Email KQUINN.UK  #
  # with the details and the system state file (if relevant).         #
  ############################################################################## right">(出处:清风软件下载学院)