2026-03-12 20:23:15
This commit is contained in:
126
vg/undostat.sql
Normal file
126
vg/undostat.sql
Normal file
@@ -0,0 +1,126 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Undo statistics
|
||||
* Parameters : 1 - Number of hours (Optional)
|
||||
* 2 - Instance Number (Optional)
|
||||
* 3 - Whereclause
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 16-Dec-15 Vishal Gupta Add where clause as input
|
||||
* 17-Oct-13 Vishal Gupta Fixed decode statement in errors columns
|
||||
* and added SQL Id in the output
|
||||
* 14-Mar-12 Vishal Gupta Parameterized heading and dividers
|
||||
* 15-May-07 Vishal Gupta Formatted the output
|
||||
* 05-Aug-06 Vishal Gupta First Draft
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
|
||||
UNDEFINE NoOfHours
|
||||
UNDEFINE inst_id
|
||||
UNDEFINE WHERECLAUSE
|
||||
|
||||
DEFINE NoOfHours="&&1"
|
||||
DEFINE inst_id="&2"
|
||||
DEFINE WHERECLAUSE="&3"
|
||||
|
||||
COLUMN _NoOfHours NEW_VALUE NoOfHours NOPRINT
|
||||
COLUMN _inst_id NEW_VALUE inst_id NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&NoOfHours','','10','&&NoOfHours') "_NoOfHours"
|
||||
, DECODE('&&inst_id','','%','&&inst_id') "_inst_id"
|
||||
FROM DUAL
|
||||
;
|
||||
|
||||
set term on
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT=999,999,999
|
||||
DEFINE COUNT_DIVIDER="1"
|
||||
DEFINE COUNT_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
DEFINE BYTES_FORMAT="999,999"
|
||||
DEFINE BYTES_DIVIDER="1024/1024"
|
||||
DEFINE BYTES_HEADING="MB"
|
||||
--DEFINE BYTES_DIVIDER="1024/1024/1024"
|
||||
--DEFINE BYTES_HEADING="GB"
|
||||
DEFINE TIME_FORMAT=9,999
|
||||
DEFINE TIME_DIVIDER="1"
|
||||
DEFINE TIME_HEADING="sec"
|
||||
|
||||
|
||||
PROMPT
|
||||
Prompt **************************************************************
|
||||
Prompt * Undo Statistics
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - Number of Hours = '&&NoOfHours'
|
||||
PROMPT * - Instance Number = '&&inst_id'
|
||||
PROMPT * - WHERE Clause = '&&WHERECLAUSE'
|
||||
PROMPT **************************************************************
|
||||
PROMPT
|
||||
|
||||
|
||||
COLUMN inst_id HEADING I# FORMAT 99
|
||||
COLUMN Hour HEADING "Hour|(YYYYMMDD-HH24)" FORMAT a15
|
||||
COLUMN tablespace_name HEADING "TableSpace" FORMAT a15
|
||||
COLUMN "ActiveSize" HEADING "Active|Size|(&&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN UndoSize HEADING "Undo|Size|(&&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN ExpiredSize HEADING "Expired|Size|(&&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN UnExpiredSize HEADING "UnExpired|Size|(&&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN ExpiredRelSize HEADING "Expired|Rel|Size|(&&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN MAXCONCURRENCY HEADING "Max |Concurrent|txn|(#)" FORMAT &COUNT_FORMAT
|
||||
COLUMN TXNCOUNT HEADING "Total|txn|(#)" FORMAT &COUNT_FORMAT
|
||||
COLUMN MAXQUERYLEN HEADING "Max Query|Length|(sec)" FORMAT &BYTES_FORMAT
|
||||
COLUMN MAXQUERYID HEADING "Max SQL Id" FORMAT a13
|
||||
COLUMN tuned_undoretention HEADING "Tuned|Undo" FORMAT 9999999
|
||||
COLUMN NOSPACEERRCNT HEADING "nospace|errors|(#)" FORMAT a10
|
||||
COLUMN SSOLDERRCNT HEADING "ORA-01555|errors|(#)" FORMAT a10
|
||||
|
||||
--BREAK ON "Hour"
|
||||
|
||||
select to_char(a.BEGIN_TIME, 'YYYYMMDD-HH24') "Hour"
|
||||
, a.INST_ID
|
||||
, t.tablespace_name
|
||||
&&_IF_ORA_10gR1_OR_HIGHER , ROUND(SUM(A.ACTIVEBLKS * t.block_size ) / &BYTES_DIVIDER ) "ActiveSize"
|
||||
, ROUND(SUM(A.UNDOBLKS * t.block_size ) / &BYTES_DIVIDER ) "UndoSize"
|
||||
&&_IF_ORA_10gR1_OR_HIGHER , ROUND(SUM(A.EXPIREDBLKS * t.block_size ) / &BYTES_DIVIDER ) "EXPIREDSize"
|
||||
, ROUND(SUM(A.EXPBLKRELCNT * t.block_size ) / &BYTES_DIVIDER ) "EXPIREDRelSize"
|
||||
&&_IF_ORA_10gR1_OR_HIGHER , ROUND(SUM(A.UNEXPIREDBLKS * t.block_size ) / &BYTES_DIVIDER ) "UNEXPIREDSize"
|
||||
, max(MAXCONCURRENCY) MAXCONCURRENCY
|
||||
, sum(TXNCOUNT) TXNCOUNT
|
||||
, max(a.MAXQUERYLEN) MAXQUERYLEN
|
||||
&&_IF_ORA_10gR1_OR_HIGHER , max(a.MAXQUERYID) MAXQUERYID
|
||||
&&_IF_ORA_10gR1_OR_HIGHER , max(a.tuned_undoretention) tuned_undoretention
|
||||
, DECODE(sum(NOSPACEERRCNT),0,'',sum(NOSPACEERRCNT)) NOSPACEERRCNT
|
||||
, DECODE(sum(SSOLDERRCNT),0,'',sum(SSOLDERRCNT)) SSOLDERRCNT
|
||||
from gv$undostat a
|
||||
LEFT OUTER JOIN v$tablespace t2 ON a.undotsn = t2.ts#
|
||||
LEFT OUTER JOIN dba_tablespaces t ON t2.name = t.tablespace_name
|
||||
where a.inst_Id LIKE DECODE('&&inst_id',NULL,'%','','%','&&inst_id')
|
||||
AND a.begin_time > (sysdate - (&NoOfHours)/24 )
|
||||
&&WHERECLAUSE
|
||||
group by to_char(a.BEGIN_TIME, 'YYYYMMDD-HH24')
|
||||
, a.INST_ID
|
||||
, a.undotsn
|
||||
, t.tablespace_name
|
||||
order by 1,2
|
||||
/
|
||||
|
||||
@@footer
|
||||
Reference in New Issue
Block a user