2026-03-12 20:23:15
This commit is contained in:
175
vg/sqlstats_per_exec.sql
Normal file
175
vg/sqlstats_per_exec.sql
Normal file
@@ -0,0 +1,175 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display SQLStats from SQL Area (per Execution)
|
||||
* Version : 10.1.0.4 and above
|
||||
* Parameters : 1 - SQL_ID
|
||||
* 2 - PLAN_HASH_VALUE (Use % as wildcard)
|
||||
* 3 - Hours (Default 72 hours)
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 20-Feb-14 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE sql_id
|
||||
UNDEFINE plan_hash_value
|
||||
UNDEFINE hours
|
||||
|
||||
DEFINE sql_id="&&1"
|
||||
DEFINE plan_hash_value="&&2"
|
||||
DEFINE hours="&&3"
|
||||
|
||||
COLUMN _plan_hash_value NEW_VALUE plan_hash_value NOPRINT
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
COLUMN _hours NEW_VALUE HOURS NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE('&&plan_hash_value','','%','&&plan_hash_value') "_plan_hash_value"
|
||||
, DECODE('&&sql_id','%','%','') "_force_matching_signature"
|
||||
, DECODE('&&hours','','72','&&hours') "_hours"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
DEFINE COUNT_SMALL_FORMAT=9,999
|
||||
DEFINE COUNT_SMALL_DIVIDER="1"
|
||||
DEFINE COUNT_SMALL_HEADING="#"
|
||||
--DEFINE COUNT_DIVIDER="1000"
|
||||
--DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
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"
|
||||
--DEFINE BYTES_HEADING="KB"
|
||||
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"
|
||||
--DEFINE TIME_DIVIDER="60"
|
||||
--DEFINE TIME_HEADING="min"
|
||||
|
||||
/************************************
|
||||
* MAIN Section
|
||||
************************************/
|
||||
|
||||
DEFINE force_matching_signature=""
|
||||
COLUMN _force_matching_signature NEW_VALUE force_matching_signature NOPRINT
|
||||
|
||||
set term off
|
||||
set numf 99999999999999999999999
|
||||
select to_char(sql.force_matching_signature) "_force_matching_signature"
|
||||
from gv$sqlstats sql
|
||||
where sql.sql_id = '&&sql_id'
|
||||
and rownum <= 1;
|
||||
set term on
|
||||
|
||||
PROMPT **************************************************************
|
||||
PROMPT * SQL Executions Statistics (All Figures are per execution)
|
||||
PROMPT * (Force Matching Signature = '&&force_matching_signature')
|
||||
PROMPT *
|
||||
PROMPT * Input Parameters
|
||||
PROMPT * - SQL Id = '&&sql_id'
|
||||
PROMPT * - Plan Hash Value = '&&plan_hash_value'
|
||||
PROMPT * - Hours = '&&hours'
|
||||
PROMPT **************************************************************
|
||||
|
||||
COLUMN first_load_time HEADING "First Load Time" FORMAT a20
|
||||
COLUMN last_active_time HEADING "Last Active Time" FORMAT a20
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN SQL_ID HEADING "SQLId" FORMAT a13
|
||||
COLUMN plan_hash_value HEADING "Plan|Hash|Value" FORMAT 999999999999
|
||||
COLUMN invalidations HEADING "Invalid|Per|Exec|(&COUNT_HEADING)" FORMAT 9,999
|
||||
COLUMN iowait HEADING "IO|Wait|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN apwait HEADING "Appl|Wait|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN ccwait HEADING "Conc|Wait|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN clwait HEADING "Cluster|Wait|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN plsexec_time HEADING "PLsexec|Time|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN cpu_time HEADING "CPU|Time|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN elapsed_time HEADING "Elapsed|Time|Per|Exec|(&TIME_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN executions HEADING "Exec|Total|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT
|
||||
COLUMN px_servers_executions HEADING "Par'l|Serv|Exec|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT
|
||||
COLUMN rows_processed HEADING "Rows|Per|Exec|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT
|
||||
COLUMN sorts HEADING "Sorts|Per|Exec|(&COUNT_SMALL_HEADING)" FORMAT &COUNT_SMALL_FORMAT
|
||||
COLUMN buffer_gets HEADING "Buffer|Gets|Per|Exec|(&COUNT_HEADING)" FORMAT &COUNT_FORMAT
|
||||
COLUMN direct_writes HEADING "Direct|Write|Per|Exec|(&COUNT_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN io_interconnect_bytes HEADING "IO|Inter|Connect|Per|Exec|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN physical_read_bytes HEADING "Phy|Read|Per|Exec|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN physical_write_bytes HEADING "Phy|Write|Per|Exec|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN optimized_physical_reads HEADING "Optimized|Phy|ReadReq|(&COUNT_HEADING)" FORMAT &TIME_FORMAT
|
||||
COLUMN io_offload_elig_bytes HEADING "IO|Offload|Elig|Per|Exec|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN io_offload_return_bytes HEADING "IO|Offload|Return|Per|Exec|(&BYTES_HEADING)" FORMAT &BYTES_FORMAT
|
||||
COLUMN sql_profile HEADING "sql_profile" FORMAT a29
|
||||
COLUMN sql_plan_baseline HEADING "sql_plan_baseline" FORMAT a30
|
||||
|
||||
set lines 300
|
||||
|
||||
SELECT TO_CHAR(TO_DATE(sql.first_load_time,'YYYY-MM-DD/HH24:MI:SS'),'DD-MON-YYYY HH24:MI:SS') first_load_time
|
||||
, TO_CHAR(ss.last_active_time,'DD-MON-YYYY HH24:MI:SS') last_active_time
|
||||
, ss.inst_id instance_number
|
||||
, ss.sql_id
|
||||
, ss.plan_hash_value
|
||||
, ROUND(ss.user_io_wait_time/1000000/ss.executions/&TIME_DIVIDER) iowait
|
||||
, ROUND(ss.application_wait_time/1000000/ss.executions/&TIME_DIVIDER) apwait
|
||||
, ROUND(ss.concurrency_wait_time/1000000/ss.executions/&TIME_DIVIDER) ccwait
|
||||
, ROUND(ss.cluster_wait_time/1000000/ss.executions/&TIME_DIVIDER) clwait
|
||||
, ROUND(ss.plsql_exec_time/1000000/ss.executions/&TIME_DIVIDER) plsexec_time
|
||||
, ROUND(ss.cpu_time/1000000/ss.executions/&TIME_DIVIDER) cpu_time
|
||||
, ROUND(ss.elapsed_time/1000000/ss.executions/&TIME_DIVIDER) elapsed_time
|
||||
, ss.executions/&COUNT_SMALL_DIVIDER executions
|
||||
, ROUND(ss.px_servers_executions/ss.executions/&COUNT_SMALL_DIVIDER) px_servers_executions
|
||||
-- , ss.invalidations/&COUNT_DIVIDER invalidations
|
||||
&&_IF_ORA_10gR2_OR_HIGHER , ss.rows_processed/ss.executions/&COUNT_DIVIDER rows_processed
|
||||
&&_IF_ORA_10gR2_OR_HIGHER , ss.sorts/ss.executions/&COUNT_SMALL_DIVIDER sorts
|
||||
&&_IF_ORA_10gR2_OR_HIGHER , ss.buffer_gets/ss.executions/&COUNT_DIVIDER buffer_gets
|
||||
&&_IF_ORA_10gR2_OR_HIGHER , ROUND(ss.direct_writes/ss.executions/&COUNT_DIVIDER) direct_writes
|
||||
&&_IF_ORA_11107_OR_HIGHER , ss.io_interconnect_bytes/ss.executions/&BYTES_DIVIDER io_interconnect_bytes
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_read_bytes/ss.executions/&BYTES_DIVIDER physical_read_bytes
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.physical_write_bytes/ss.executions/&BYTES_DIVIDER physical_write_bytes
|
||||
--&&_IF_ORA_11gR2_OR_HIGHER , ss.optimized_physical_reads/ss.executions/&COUNT_DIVIDER optimized_physical_reads
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_cell_offload_eligible_bytes/ss.executions/&BYTES_DIVIDER io_offload_elig_bytes
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ss.io_cell_offload_returned_bytes/ss.executions/&BYTES_DIVIDER io_offload_return_bytes
|
||||
&&_IF_ORA_10gR2_OR_HIGHER , sql.sql_profile
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , sql.sql_plan_baseline
|
||||
from gv$sqlstats ss
|
||||
, gv$sqlarea sql
|
||||
where ss.inst_id = sql.inst_id (+)
|
||||
AND ss.sql_id = sql.sql_id (+)
|
||||
AND ss.plan_hash_value = sql.plan_hash_value (+)
|
||||
AND ss.plan_hash_value LIKE '&&plan_hash_value'
|
||||
AND ss.sql_id LIKE CASE ss.force_matching_signature
|
||||
WHEN 0 THEN '&&sql_id'
|
||||
ELSE '%'
|
||||
END
|
||||
AND ss.force_matching_signature = '&&force_matching_signature'
|
||||
AND ss.last_active_time > sysdate - (&&hours/24)
|
||||
order by ss.last_active_time
|
||||
, ss.inst_id
|
||||
;
|
||||
|
||||
|
||||
|
||||
@@footer
|
||||
Reference in New Issue
Block a user