【IT168 服务器学院】 一个强大的分析诊断进程跟踪文件的工具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). #
##############################