2026-03-12 20:23:15
This commit is contained in:
229
vg/ash_sid_sqlids.sql
Normal file
229
vg/ash_sid_sqlids.sql
Normal file
@@ -0,0 +1,229 @@
|
||||
@@header
|
||||
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Session's SQL IDs from ASH
|
||||
* Compatibility : 10.1 and above
|
||||
* Parameters : 1 - SID
|
||||
* 2 - INST_ID (optional, default to 1)
|
||||
* 3 - Serial# (Default %)
|
||||
* 4 - Number of hours (Default 24)
|
||||
* 5 - SQL_ID (Default %)
|
||||
* 6 - WhereClause
|
||||
*
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ -----------------------------------------
|
||||
* 02-JUL-15 Vishal Gupta Added logic to sum up temp/page space for all parallel slaves
|
||||
* 21-JAN-14 Vishal Gupta Added SQL_ID and whereclause as input parameter
|
||||
* 28-JUN-12 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE SID
|
||||
UNDEFINE INST_ID
|
||||
UNDEFINE SERIAL
|
||||
UNDEFINE HOURS
|
||||
UNDEFINE SQL_ID
|
||||
UNDEFINE WHERECLAUSE
|
||||
UNDEFINE WHERECLAUSE2
|
||||
UNDEFINE HAVINGCLAUSE
|
||||
|
||||
DEFINE SID="&&1"
|
||||
DEFINE INST_ID="&&2"
|
||||
DEFINE SERIAL="&&3"
|
||||
DEFINE HOURS="&&4"
|
||||
DEFINE SQL_ID="&&5"
|
||||
DEFINE WHERECLAUSE="&&6"
|
||||
DEFINE WHERECLAUSE2="&&7"
|
||||
DEFINE HAVINGCLAUSE="&&8"
|
||||
|
||||
COLUMN _SID NEW_VALUE SID NOPRINT
|
||||
COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT
|
||||
COLUMN _SERIAL NEW_VALUE SERIAL NOPRINT
|
||||
COLUMN _HOURS NEW_VALUE HOURS NOPRINT
|
||||
COLUMN _SQL_ID NEW_VALUE SQL_ID NOPRINT
|
||||
|
||||
set term off
|
||||
SELECT DECODE(UPPER('&&SID'),'','%',UPPER('&&SID')) "_SID"
|
||||
, DECODE(UPPER('&&INST_ID'),'','1',UPPER('&&INST_ID')) "_INST_ID"
|
||||
, DECODE(UPPER('&&SERIAL'),'','%',UPPER('&&SERIAL')) "_SERIAL"
|
||||
, DECODE(UPPER('&&HOURS'),'','24',UPPER('&&HOURS')) "_HOURS"
|
||||
, DECODE('&&SQL_ID','','%','&&SQL_ID') "_SQL_ID"
|
||||
FROM DUAL;
|
||||
set term on
|
||||
/***********************************/
|
||||
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
|
||||
|
||||
DEFINE COUNT_FORMAT=99,999
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
|
||||
DEFINE BYTES_FORMAT=99,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"
|
||||
|
||||
/************************************/
|
||||
|
||||
|
||||
|
||||
PROMPT ***************************************************
|
||||
PROMPT * ASH SQL Ids
|
||||
PROMPT *
|
||||
PROMPT * Input Parameter:
|
||||
PROMPT * SID = "&&SID"
|
||||
PROMPT * Instance ID = "&&INST_ID"
|
||||
PROMPT * Serial# = "&&SERIAL"
|
||||
PROMPT * Number of Hours = "&&HOURS"
|
||||
PROMPT * SQL Id = "&&SQL_ID"
|
||||
PROMPT * Where Clause = "&&WHERECLAUSE"
|
||||
PROMPT * Where Clause2 = "&&WHERECLAUSE2"
|
||||
PROMPT * Having Clause = "&&HAVINGCLAUSE"
|
||||
PROMPT ***************************************************
|
||||
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN instance_number HEADING "I#" FORMAT 99
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
|
||||
COLUMN FORCE_MATCHING_SIGNATURE HEADING "Force|Matching|Signature" FORMAT 99999999999999999999999
|
||||
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
|
||||
COLUMN sql_exec_start FORMAT a18
|
||||
COLUMN sql_exec_end FORMAT a18
|
||||
COLUMN duration HEADING "Duration|+D HH:MM:SS" FORMAT a12
|
||||
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a10 TRUNCATE
|
||||
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
|
||||
COLUMN current_dop HEADING "DOP" FORMAT 999
|
||||
COLUMN phyread_requests HEADING "Phy|Read|Reqs|(&&COUNT_HEADING)" FORMAT 999999
|
||||
COLUMN phywrite_requests HEADING "Phy|Write|Reqs|(&&COUNT_HEADING)" FORMAT 999999
|
||||
COLUMN phyread HEADING "Phy|Read|(&&BYTES_HEADING)" FORMAT 9999
|
||||
COLUMN phywrite HEADING "Phy|Write|(&&BYTES_HEADING)" FORMAT 9999
|
||||
COLUMN interconnect_io HEADING "Inter|Connect|IO|(&&BYTES_HEADING)" FORMAT 9999
|
||||
COLUMN pga_allocated HEADING "PGA|(&&BYTES_HEADING)" FORMAT 999.00
|
||||
COLUMN temp_space_allocated HEADING "Temp|Space|(&&BYTES_HEADING)" FORMAT 9999.00
|
||||
|
||||
-- Get the SQL Statements from ASH
|
||||
SELECT
|
||||
NVL(ash.qc_session_id,ash.session_id) session_id
|
||||
, NVL(ash.qc_instance_id,ash.inst_id) inst_id
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#) session_serial#
|
||||
, TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
|
||||
, TO_CHAR(max(ash.sample_time) ,'DD-MON-YY HH24:MI:SS') sql_exec_end
|
||||
, SUBSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000','')
|
||||
,1,INSTR(REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'00000000',''),'.')-1
|
||||
) duration
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
--, ash.sql_exec_id
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
&&_IF_ORA_11202_OR_HIGHER , max(current_dop) current_dop
|
||||
, ash.force_matching_signature
|
||||
, ash.top_level_sql_id
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_requests)/&&COUNT_DIVIDER) phyread_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_requests)/&&COUNT_DIVIDER) phywrite_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_read_io_bytes)/&&BYTES_DIVIDER) phyread
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_write_io_bytes)/&&BYTES_DIVIDER) phywrite
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.delta_interconnect_io_bytes)/&&BYTES_DIVIDER) interconnect_io
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.pga_allocated)/&&BYTES_DIVIDER,2) pga_allocated
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , ROUND(SUM(ash.temp_space_allocated)/&&BYTES_DIVIDER,2) temp_space_allocated
|
||||
FROM
|
||||
(
|
||||
SELECT /*+ parallel(ash, 10) LEADING(ash) */
|
||||
ash.session_id
|
||||
, ash.inst_id
|
||||
, ash.session_serial#
|
||||
, ash.qc_session_id
|
||||
, ash.qc_instance_id
|
||||
, ash.qc_session_serial#
|
||||
, NVL(ash.sql_exec_start,MIN(ash.sample_time)) sql_exec_start
|
||||
, max(ash.sample_time) sample_time
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, ash.sql_exec_id
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
&&_IF_ORA_11202_OR_HIGHER , max(trunc(ash.px_flags / 2097152)) current_dop
|
||||
, ash.force_matching_signature
|
||||
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id) top_level_sql_id
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_requests) delta_read_io_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_requests) delta_write_io_requests
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_read_io_bytes) delta_read_io_bytes
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_write_io_bytes) delta_write_io_bytes
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , SUM(ash.delta_interconnect_io_bytes) delta_interconnect_io_bytes
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.pga_allocated) pga_allocated
|
||||
&&_IF_ORA_11gR1_OR_HIGHER , MAX(ash.temp_space_allocated) temp_space_allocated
|
||||
FROM gv$active_session_history ash
|
||||
LEFT OUTER JOIN gv$active_session_history ash_parent
|
||||
ON ash_parent.inst_id = ash.qc_instance_id
|
||||
AND ash_parent.session_id = ash.qc_session_id
|
||||
AND ash_parent.session_serial# = ash.qc_session_serial#
|
||||
AND CAST(ash_parent.sample_time as DATE) = ash.sql_exec_start
|
||||
AND ash_parent.sample_time > sysdate - (&&HOURS/24)
|
||||
WHERE ash.sql_id IS NOT NULL
|
||||
AND NVL(ash.qc_instance_id,ash.inst_id) LIKE '&&INST_ID'
|
||||
AND NVL(ash.qc_session_id,ash.session_id) LIKE '&&SID'
|
||||
AND NVL(ash.qc_session_serial#,ash.session_serial#) LIKE '&&SERIAL'
|
||||
AND NVL(ash.sql_id,' ') LIKE '&&SQL_ID'
|
||||
AND ash.sample_time > sysdate - (&&HOURS/24)
|
||||
AND ash.sql_exec_id IS NOT NULL
|
||||
&&WHERECLAUSE &&WHERECLAUSE2
|
||||
GROUP BY ash.session_id
|
||||
, ash.inst_id
|
||||
, ash.session_serial#
|
||||
, ash.qc_session_id
|
||||
, ash.qc_instance_id
|
||||
, ash.qc_session_serial#
|
||||
, ash.sql_exec_id
|
||||
, ash.sql_exec_start
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.force_matching_signature
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id)
|
||||
) ash
|
||||
WHERE 1=1
|
||||
GROUP BY NVL(ash.qc_session_id,ash.session_id)
|
||||
, NVL(ash.qc_instance_id,ash.inst_id)
|
||||
, NVL(ash.qc_session_serial#,ash.session_serial#)
|
||||
--, ash.sql_exec_id
|
||||
, ash.sql_exec_start
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, ash.force_matching_signature
|
||||
&&_IF_ORA_11gR2_OR_HIGHER , ash.sql_opname
|
||||
, ash.top_level_sql_id
|
||||
&&HAVINGCLAUSE
|
||||
--having (SUM(ash.delta_read_io_bytes)+SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 20 -- Physical Read + Write GBs
|
||||
--having (SUM(ash.delta_read_io_bytes) ) / power(1024,3) > 100 -- Physical Write GBs
|
||||
--having (SUM(ash.delta_interconnect_io_bytes) ) / power(1024,3) > 100 -- Interconnect IO GBs
|
||||
--having (SUM(ash.pga_allocated) ) / power(1024,3) > 2 -- PGA GBs
|
||||
--having (SUM(ash.temp_space_allocated) ) / power(1024,3) > 10 -- Temp Space GBs
|
||||
ORDER BY --max(ash.sample_time) asc
|
||||
--,
|
||||
max(ash.sample_time) asc
|
||||
, NVL(ash.sql_exec_start,MIN(ash.sample_time)) ASC
|
||||
;
|
||||
|
||||
|
||||
@@footer
|
||||
Reference in New Issue
Block a user