2026-03-12 20:23:15
This commit is contained in:
675
star/sid_details.sql
Normal file
675
star/sid_details.sql
Normal file
@@ -0,0 +1,675 @@
|
||||
/*
|
||||
*
|
||||
* Author : Vishal Gupta
|
||||
* Purpose : Display Session Details
|
||||
* Compatibility : 10.1 and above
|
||||
* Parameters : 1 - SID
|
||||
* 2 - INST_ID (optional, default to 1)
|
||||
*
|
||||
* Revision History:
|
||||
* ===================
|
||||
* Date Author Description
|
||||
* --------- ------------ --------------------------------------------------
|
||||
* 25-JUN-15 Vishal Gupta Changed exadata specific statistics section
|
||||
* 03-JUN-15 Vishal Gupta Changed event history's average waits from sec to msec.
|
||||
* 12-MAR-15 Vishal Gupta Added follwoing columns to the output
|
||||
* command name,
|
||||
* 05-SEP-14 Vishal Gupta In last 10 SQL statement, removed filter for SQL_EXEC_START IS NOT NULL
|
||||
* 03-JUL-14 Vishal Gupta Change Top Session Events column formatting
|
||||
Added PGA and Temp usage in Last 10 SQL statements section
|
||||
* 20-MAY-14 Vishal Gupta Updated last 10 sql statements query
|
||||
* 12-Feb-14 Vishal Gupta Changed session tranactions output layout to transpose
|
||||
* columns to rows.
|
||||
* 04-Oct-13 Vishal Gupta Added SQL's SQLProfile and sql_plan_baseline
|
||||
* information to output
|
||||
* 17-May-13 Vishal Gupta Added last 10 SQL statements from ASH
|
||||
* 08-Jan-13 Vishal Gupta Added time since last wait in wait-history section
|
||||
* 05-Sep-12 Vishal Gupta Changed output field layout again.
|
||||
* 09-Aug-12 Vishal Gupta Changed output field layout
|
||||
* 11-May-12 Vishal Gupta Change output layout. Instead of SELECT output
|
||||
* now it display dbms_output lines.
|
||||
* 27-Mar-12 Vishal Gupta Included the session wait history
|
||||
* 05-Aug-04 Vishal Gupta Created
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/************************************
|
||||
* INPUT PARAMETERS
|
||||
************************************/
|
||||
|
||||
|
||||
VARIABLE SID number ;
|
||||
VARIABLE INST_ID number ;
|
||||
|
||||
BEGIN
|
||||
:SID := '&&1';
|
||||
:INST_ID := NVL('&&2',1);
|
||||
IF :INST_ID = '' OR :INST_ID IS NULL THEN
|
||||
:INST_ID := 1;
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
|
||||
/************************************
|
||||
* CONFIGURATION PARAMETERS
|
||||
************************************/
|
||||
UNDEFINE TOP_EVENT_COUNT
|
||||
UNDEFINE BYTES_FORMAT
|
||||
UNDEFINE BYTES_HEADING
|
||||
UNDEFINE BYTES_DIVIDER
|
||||
|
||||
DEFINE TOP_EVENT_COUNT=10
|
||||
|
||||
DEFINE COUNT_SMALL_FORMAT=9,999
|
||||
--DEFINE COUNT_SMALL_DIVIDER="1"
|
||||
--DEFINE COUNT_SMALL_HEADING="#"
|
||||
DEFINE COUNT_SMALL_DIVIDER="1000"
|
||||
DEFINE COUNT_SMALL_HEADING="#1000"
|
||||
|
||||
DEFINE COUNT_FORMAT=999,999,999,999,999
|
||||
--DEFINE COUNT_DIVIDER="1"
|
||||
--DEFINE COUNT_HEADING="#"
|
||||
DEFINE COUNT_DIVIDER="1000"
|
||||
DEFINE COUNT_HEADING="#1000"
|
||||
|
||||
DEFINE BYTES_FORMAT="999,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=999,999
|
||||
DEFINE TIME_DIVIDER="1"
|
||||
DEFINE TIME_HEADING="sec"
|
||||
--DEFINE TIME_DIVIDER="60"
|
||||
--DEFINE TIME_HEADING="min"
|
||||
|
||||
|
||||
COLUMN session_details1 HEADING "Session Details" FORMAT a41
|
||||
COLUMN session_details2 HEADING "Session Details" FORMAT a70
|
||||
COLUMN sql_details HEADING "Session Details" FORMAT a151
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN SID HEADING "SID" FORMAT 99999
|
||||
|
||||
PROMPT
|
||||
PROMPT ################# Session Details ##########################
|
||||
|
||||
set heading off
|
||||
select /*+ORDERED */
|
||||
/* First Column */
|
||||
TRIM(SUBSTR('Instance : ' || s.inst_id ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('SID : ' || s.sid ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Session Serial# : ' || s.serial# ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Status : ' || s.status ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('State : ' || s.state ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Logon Time : ' || TO_CHAR(s.logon_time,'DD-MON-YY HH24:MI:SS') ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Session Duration : ' || FLOOR(sysdate-s.logon_time) || 'd '
|
||||
|| FLOOR(MOD((sysdate-s.logon_time) ,1 ) * 24) || 'h '
|
||||
|| FLOOR(MOD((sysdate-s.logon_time)*24 ,1 ) * 60) || 'm '
|
||||
|| FLOOR(MOD((sysdate-s.logon_time)*24*60,1 ) * 60) || 's'
|
||||
,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('LastCall(sec) : ' || FLOOR(s.last_call_et/ 3600) || 'h '
|
||||
|| LPAD(FLOOR(MOD(s.last_call_et , 3600 ) / 60),2) || 'm '
|
||||
|| LPAD(MOD(s.last_call_et, 60 ) ,2) || 's'
|
||||
,1,70)) || chr(10)
|
||||
|| TRIM('Failed Over : ' || s.failed_over ) || chr(10)
|
||||
|| TRIM('Failover Type : ' || s.failover_type ) || chr(10)
|
||||
|| TRIM('Failover Method : ' || s.failover_method ) || chr(10)
|
||||
|| TRIM('Parallel Query : ' || s.pq_status ) || chr(10)
|
||||
|| TRIM('PDML Enabled : ' || s.pdml_enabled ) || chr(10)
|
||||
|| TRIM('PDML Status : ' || s.pdml_status ) || chr(10)
|
||||
|| TRIM('PDDL Status : ' || s.pddl_status ) || chr(10)
|
||||
|| TRIM('SQL Trace : ' || s.sql_trace ) || chr(10)
|
||||
|| TRIM('SQL Trace Waits : ' || s.sql_trace_waits ) || chr(10)
|
||||
|| TRIM('SQL Trace Binds : ' || s.sql_trace_binds ) || chr(10)
|
||||
|| TRIM('SQL Trace PlanStats: ' || s.sql_trace_plan_stats ) || chr(10)
|
||||
as session_details1
|
||||
/* Second Column */
|
||||
, TRIM(SUBSTR('OS Username : ' || s.osuser ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Client Machine : ' || s.machine ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Client Process : ' || s.process ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Program : ' || s.program ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Module : ' || s.module ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Action : ' || s.action ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Client Info : ' || s.client_info ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Client Identifier : ' || s.client_identifier ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('DB UserName : ' || s.username ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Schema Name : ' || s.schemaname ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('ServiceName : ' || s.service_name ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('DB HostName : ' || i.host_name ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Oracle SPID : ' || p.spid ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Oracle PID : ' || p.pid ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Oracle Process Name: ' || p.pname ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Session Type : ' || s.type ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Command Name : ' || c.command_name ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Wait Event : ' || w.event ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Wait(sec) : ' || w.seconds_in_wait ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Wait Parameter 1 : ' || w.p1text || ' ' || w.p1 ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Wait Parameter 2 : ' || w.p2text || ' ' || w.p2 ,1,70)) || chr(10)
|
||||
|| TRIM(SUBSTR('Wait Parameter 3 : ' || w.p3text || ' ' || w.p3 ,1,70)) || chr(10)
|
||||
as session_details2
|
||||
from gv$instance i
|
||||
JOIN gv$session s ON i.inst_id = s.inst_id
|
||||
LEFT OUTER JOIN gv$process p ON p.inst_id = s.inst_id AND p.ADDR = s.PADDR
|
||||
LEFT OUTER JOIN gv$session_wait w ON w.inst_id = s.inst_id AND w.sid = s.sid
|
||||
LEFT OUTER JOIN v$sqlcommand c ON c.command_type = s.command
|
||||
where 1=1
|
||||
AND s.sid = :SID
|
||||
AND s.inst_id = :INST_ID
|
||||
;
|
||||
|
||||
PROMPT
|
||||
PROMPT ################# Currrent SQL Statement ####################
|
||||
|
||||
-- Get the SQL Statement being executed
|
||||
select --+
|
||||
TRIM(SUBSTR('Current SQL Exec Start : ' || TO_CHAR(s.sql_exec_start,'DD-MON-YY HH24:MI:SS') ,1,150)) || chr(10) ||
|
||||
TRIM(SUBSTR('Current SQL Exec Duration: ' || NVL2(s.sql_exec_start,FLOOR(sysdate - s.sql_exec_start) || 'd '
|
||||
|| LPAD(FLOOR(MOD((sysdate - s.sql_exec_start) , 1) * 24 ) ,2) || 'h '
|
||||
|| LPAD(FLOOR(MOD((sysdate - s.sql_exec_start) * 24 , 1) * 60 ) ,2) || 'm '
|
||||
|| LPAD(FLOOR(MOD((sysdate - s.sql_exec_start) * 24 * 60 , 1) * 60 ) ,2),'')
|
||||
,1,150)) || chr(10)
|
||||
|| TRIM(SUBSTR('Current SQL ID : ' || s.sql_id ,1,150)) || chr(10)
|
||||
|| TRIM(SUBSTR('Current SQL Child Number : ' || s.sql_child_number ,1,150)) || chr(10)
|
||||
|| TRIM(SUBSTR('Current SQL Plan : ' || sql.plan_hash_value ,1,150)) || chr(10)
|
||||
|| TRIM(SUBSTR('Current SQL Profile : ' || sql.sql_profile ,1,150)) || chr(10)
|
||||
|| TRIM(SUBSTR('Current SQL Plan Baseline: ' || sql.sql_plan_baseline,1,150)) || chr(10)
|
||||
|| TRIM(SUBSTR('Current SQLText : ' || sql.sql_text ,1,150)) || chr(10)
|
||||
|| chr(10)
|
||||
|| TRIM(SUBSTR('Previous SQL Exec Start : ' || TO_CHAR(s.prev_exec_start,'DD-MON-YY HH24:MI:SS') ,1,150)) || chr(10)
|
||||
|| TRIM(SUBSTR('Previous SQL ID : ' || s.prev_sql_id ,1,150)) || chr(10)
|
||||
|| TRIM(SUBSTR('Previous SQL Child Number : ' || s.prev_child_number ,1,150)) || chr(10)
|
||||
|| TRIM(SUBSTR('Previous SQL Plan : ' || prev_sql.plan_hash_value ,1,150)) || chr(10)
|
||||
|| TRIM(SUBSTR('Previous SQL Profile : ' || prev_sql.sql_profile ,1,150)) || chr(10)
|
||||
|| TRIM(SUBSTR('Previous SQL Plan Baseline: ' || prev_sql.sql_plan_baseline ,1,150)) || chr(10)
|
||||
|| TRIM(SUBSTR('Previous SQLText : ' || prev_sql.sql_text ,1,150))
|
||||
as sql_details
|
||||
from gv$session s
|
||||
, gv$sqlarea sql
|
||||
, gv$sqlarea prev_sql
|
||||
where s.inst_id = sql.inst_id (+)
|
||||
AND s.sql_id = sql.sql_id (+)
|
||||
AND s.inst_id = prev_sql.inst_id (+)
|
||||
AND s.prev_sql_id = prev_sql.sql_id (+)
|
||||
AND s.sid = :SID
|
||||
AND s.inst_id = :INST_ID
|
||||
;
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ############### Session Statistics #######################
|
||||
|
||||
COLUMN stat HEADING "Statisic" FORMAT a60
|
||||
|
||||
WITH stat1 AS
|
||||
(
|
||||
SELECT DECODE(sn.name
|
||||
,'physical read total bytes' ,1
|
||||
,'physical reads' ,2
|
||||
,'physical reads direct' ,3
|
||||
,'physical reads direct temporary tablespace' ,4
|
||||
,'physical reads direct (lob)' ,5
|
||||
,'redo size' ,6
|
||||
,'redo size for direct writes' ,7
|
||||
,'CPU used by this session' ,8
|
||||
,'CPU used when call started' ,9
|
||||
,'session logical reads' ,10
|
||||
,'user calls' ,11
|
||||
,'table fetch by rowid' ,12
|
||||
,'table fetch continued row' ,13
|
||||
, 99
|
||||
) sr_no
|
||||
, DECODE(sn.name
|
||||
,'physical reads' ,RPAD('Physical Read Requests' ,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT'))
|
||||
,'redo size' ,RPAD('Redo Size' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING'
|
||||
,'redo size for direct writes' ,RPAD('Redo Size (For Direct Reads)' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING'
|
||||
,'physical read total bytes' ,RPAD('Physical Read Size' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING'
|
||||
,'CPU used when call started' ,RPAD('CPU used when call started',35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/100/&&TIME_DIVIDER),'&&TIME_FORMAT')) || ' &&TIME_HEADING'
|
||||
,'CPU used by this session' ,RPAD('CPU used by this session' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/100/&&TIME_DIVIDER),'&&TIME_FORMAT')) || ' &&TIME_HEADING'
|
||||
,'session logical reads' ,RPAD('Logical Reads' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND((ss.value*p.value)/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING'
|
||||
, RPAD(sn.name,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT'))
|
||||
) stat
|
||||
FROM gv$sesstat ss
|
||||
, v$statname sn
|
||||
, v$system_parameter p
|
||||
WHERE ss.statistic# = sn.statistic#
|
||||
AND sn.name IN
|
||||
(
|
||||
'physical reads'
|
||||
,'redo size'
|
||||
,'redo size for direct writes'
|
||||
,'physical read total bytes'
|
||||
,'physical reads direct'
|
||||
,'physical reads direct temporary tablespace'
|
||||
,'physical reads direct (lob)'
|
||||
,'user calls'
|
||||
,'CPU used by this session'
|
||||
,'CPU used when call started'
|
||||
,'session logical reads'
|
||||
,'table fetch by rowid'
|
||||
,'table fetch continued row'
|
||||
)
|
||||
AND p.name = 'db_block_size'
|
||||
AND ss.inst_id = :INST_ID
|
||||
AND ss.sid = :SID
|
||||
ORDER BY sr_no
|
||||
)
|
||||
, stat2 as
|
||||
(
|
||||
SELECT DECODE(sn.name
|
||||
,'physical write total bytes' ,1
|
||||
,'physical writes' ,2
|
||||
,'physical writes direct' ,3
|
||||
,'physical writes direct temporary tablespace',4
|
||||
,'physical writes direct (lob)' ,5
|
||||
,'temp space allocated (bytes)' ,6
|
||||
,'session pga memory' ,7
|
||||
,'session pga memory max' ,8
|
||||
,'OS User time used' ,9
|
||||
,'OS System time used' ,10
|
||||
,'bytes sent via SQL*Net to client' ,11
|
||||
,'bytes received via SQL*Net from client' ,12
|
||||
, 99
|
||||
) sr_no
|
||||
, DECODE(sn.name
|
||||
,'physical reads' ,RPAD('Physical Read Requests' ,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT'))
|
||||
,'physical writes' ,RPAD('Physical Write Requests' ,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT'))
|
||||
,'physical read total bytes' ,RPAD('Physical Read Size' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
,'physical write total bytes' ,RPAD('Physical Write Size' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
,'temp space allocated (bytes)' ,RPAD('Temp Space Allocated' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
,'session pga memory' ,RPAD('PGA Memory Used (HostRAM)' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
,'session pga memory max' ,RPAD('PGA Memory Max (HostRAM)' ,35) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
,'bytes sent via SQL*Net to client' ,RPAD('Data Sent to Client' ,35)|| ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
,'bytes received via SQL*Net from client' ,RPAD('Data received from Client' ,35)|| ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
, RPAD(sn.name,35) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT'))
|
||||
) stat
|
||||
FROM gv$sesstat ss
|
||||
, v$statname sn
|
||||
WHERE ss.statistic# = sn.statistic#
|
||||
AND sn.name IN
|
||||
(
|
||||
'physical writes'
|
||||
,'physical write total bytes'
|
||||
,'physical writes direct'
|
||||
,'physical writes direct temporary tablespace'
|
||||
,'physical writes direct (lob)'
|
||||
,'session pga memory'
|
||||
,'session pga memory max'
|
||||
,'bytes sent via SQL*Net to client'
|
||||
,'bytes received via SQL*Net from client'
|
||||
,'OS User time used'
|
||||
,'OS System time used'
|
||||
,'temp space allocated (bytes)'
|
||||
)
|
||||
AND ss.inst_id = :INST_ID
|
||||
AND ss.sid = :SID
|
||||
ORDER BY sr_no
|
||||
)
|
||||
SELECT stat1.stat, stat2.stat
|
||||
FROM stat1
|
||||
FULL OUTER JOIN stat2 ON stat1.sr_no = stat2.sr_no
|
||||
ORDER BY stat1.sr_no
|
||||
;
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ######### Session Statistics (Exadata specific) ###########
|
||||
|
||||
COLUMN stat HEADING "Statistic" FORMAT a150
|
||||
|
||||
WITH stat1 AS
|
||||
(
|
||||
SELECT DECODE(sn.name
|
||||
,'cell physical IO interconnect bytes' ,1
|
||||
,'cell physical IO interconnect bytes returned by smart scan' ,2
|
||||
,'physical read total bytes optimized' ,3
|
||||
,'cell physical IO bytes eligible for predicate offload' ,4
|
||||
,'cell physical IO bytes saved by storage index' ,5
|
||||
,'cell physical IO bytes eligible for predicate offload' ,6
|
||||
,'cell IO uncompressed bytes' ,7
|
||||
,'cell overwrites in flash cache' ,8
|
||||
,'cell partial writes in flash cache' ,9
|
||||
,'cell writes to flash cache' ,10
|
||||
,'cell num bytes in passthru during predicate offload' ,11
|
||||
, 99
|
||||
) sr_no
|
||||
, DECODE(sn.name
|
||||
,'cell physical IO interconnect bytes' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
,'cell physical IO interconnect bytes returned by smart scan' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
,'physical read total bytes optimized' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
,'cell physical IO bytes eligible for predicate offload' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
,'cell physical IO bytes saved by storage index' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
,'cell physical IO bytes eligible for predicate offload' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
,'cell IO uncompressed bytes' ,RPAD(sn.name ,60) || ' : ' || LTRIM(TO_CHAR(ROUND(ss.value/1024/1024),'&&COUNT_FORMAT')) || ' MB'
|
||||
, RPAD(sn.name,60) || ' : ' || LTRIM(TO_CHAR(ss.value,'&&COUNT_FORMAT'))
|
||||
) stat
|
||||
FROM gv$sesstat ss
|
||||
, v$statname sn
|
||||
WHERE ss.statistic# = sn.statistic#
|
||||
AND sn.name IN
|
||||
(
|
||||
'cell physical IO interconnect bytes'
|
||||
,'cell physical IO interconnect bytes returned by smart scan'
|
||||
,'physical read total bytes optimized'
|
||||
,'cell physical IO bytes eligible for predicate offload'
|
||||
,'cell physical IO bytes saved by storage index'
|
||||
,'cell physical IO bytes eligible for predicate offload'
|
||||
,'cell IO uncompressed bytes'
|
||||
,'cell overwrites in flash cache'
|
||||
,'cell partial writes in flash cache'
|
||||
,'cell writes to flash cache'
|
||||
,'cell num bytes in passthru during predicate offload'
|
||||
)
|
||||
AND ss.inst_id = :INST_ID
|
||||
AND ss.sid = :SID
|
||||
ORDER BY sr_no
|
||||
)
|
||||
SELECT stat1.stat
|
||||
FROM stat1
|
||||
ORDER BY stat1.sr_no
|
||||
;
|
||||
|
||||
set heading on
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ################# Session Transactions ####################
|
||||
|
||||
|
||||
COLUMN xid HEADING "XID" FORMAT a16
|
||||
COLUMN transaction_status HEADING "Tran|Status" FORMAT a8
|
||||
COLUMN transaction_start_date HEADING "Tran|StartDate" FORMAT a18
|
||||
COLUMN tran_duration HEADING "Tran|Duration" FORMAT a15
|
||||
COLUMN space HEADING "Space|Tran" FORMAT a5
|
||||
COLUMN recursive HEADING "Recu|rsive|Tran" FORMAT a5
|
||||
COLUMN noundo HEADING "No|Undo|Tran" FORMAT a4
|
||||
COLUMN ptx HEADING "Par'l|Tran" FORMAT a5
|
||||
COLUMN used_undo HEADING "Undo|(&&BYTES_HEADING)" FORMAT &&BYTES_FORMAT
|
||||
COLUMN log_io HEADING "Logical|IO" FORMAT 999,999,999
|
||||
COLUMN phy_io HEADING "Physical|IO" FORMAT 999,999,999
|
||||
COLUMN cr_get HEADING "Consistent|Gets" FORMAT 999,999,999
|
||||
COLUMN name HEADING "Tran Name" FORMAT a15 WRAP
|
||||
|
||||
|
||||
set heading off
|
||||
|
||||
SELECT 'Transaction Name : ' || TRIM(t.name) || chr(10)
|
||||
|| 'XID : ' || TRIM(t.xid) || chr(10)
|
||||
|| 'Parent XID : ' || TRIM(t.ptx_xid) || chr(10)
|
||||
|| 'Tran Status : ' || TRIM(t.status) || chr(10)
|
||||
|| 'Tran Start Time : ' || TO_CHAR(t.start_date,'DD-MON-YY HH24:MI:SS') || chr(10)
|
||||
|| 'Tran Duration : ' || FLOOR(sysdate - t.start_date) || 'd '
|
||||
|| LPAD(FLOOR(MOD((sysdate - t.start_date) , 1) * 24 ) ,2) || 'h '
|
||||
|| LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 , 1) * 60 ) ,2) || 'm '
|
||||
|| LPAD(FLOOR(MOD((sysdate - t.start_date) * 24 * 60 , 1) * 60 ) ,2) || 's ' || chr(10)
|
||||
|| 'Parallel Tran : ' || TRIM(t.ptx) || chr(10)
|
||||
|| 'Space Tran : ' || TRIM(t.space) || chr(10)
|
||||
|| 'Recursive Tran : ' || TRIM(t.recursive) || chr(10)
|
||||
|| 'No UNDO Tran : ' || TRIM(t.noundo) || chr(10)
|
||||
|| 'Undo : ' || TRIM(TO_CHAR(ROUND((t.used_ublk * p.value)/&&BYTES_DIVIDER),'&&BYTES_FORMAT')) || ' &&BYTES_HEADING' || chr(10)
|
||||
|| 'Logical IO : ' || TRIM(TO_CHAR(t.log_io,'999,999,999')) || chr(10)
|
||||
|| 'Physical IO : ' || TRIM(TO_CHAR(t.phy_io,'999,999,999')) || chr(10)
|
||||
|| 'Consistent Gets : ' || TRIM(TO_CHAR(t.cr_get,'999,999,999')) || chr(10)
|
||||
FROM gv$transaction t
|
||||
INNER JOIN gv$session s ON t.inst_id = s.inst_id AND t.ses_addr = s.saddr
|
||||
INNER JOIN v$parameter p ON p.name = 'db_block_size'
|
||||
WHERE s.inst_id = :INST_ID
|
||||
AND s.sid = :SID
|
||||
ORDER BY t.start_date
|
||||
;
|
||||
|
||||
set heading on
|
||||
|
||||
PROMPT
|
||||
PROMPT ######### Locked Objects ##########################
|
||||
|
||||
COLUMN object_name HEADING "ObjectName" FORMAT a40
|
||||
COLUMN object_type HEADING "ObjectType" FORMAT a10 TRUNCATED
|
||||
COLUMN locked_mode HEADING "LockedMode" FORMAT a10
|
||||
|
||||
SELECT o.owner || '.' || o.object_name object_name
|
||||
, o.object_type
|
||||
, DECODE(l.locked_mode,
|
||||
0, 'None', /* Mon Lock equivalent */
|
||||
1, 'Null', /* N */
|
||||
2, 'Row-S (SS)', /* L */
|
||||
3, 'Row-X (SX)', /* R */
|
||||
4, 'Share', /* S */
|
||||
5, 'S/Row-X (SSX)', /* C */
|
||||
6, 'Exclusive', /* X */
|
||||
TO_CHAR(l.locked_mode)) locked_mode
|
||||
FROM gv$locked_object l
|
||||
JOIN dba_objects o ON o.object_id = l.object_id
|
||||
JOIN gv$session s ON s.inst_id = l.inst_id AND s.sid = l.session_id
|
||||
WHERE s.sid = :SID
|
||||
AND s.inst_id = :INST_ID
|
||||
ORDER BY object_name
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ######### Session Lock Information #################
|
||||
|
||||
COLUMN Block HEADING "Block" FORMAT a10
|
||||
COLUMN blocking_instance HEADING "Blocking|I#" FORMAT 999999999
|
||||
COLUMN blocking_instance HEADING "Blocking|I#" FORMAT 999999999
|
||||
COLUMN blocking_session_status HEADING "Blocking|SID Status" FORMAT a10
|
||||
COLUMN final_blocking_instance HEADING "Final|Blocking|I#" FORMAT 999999999
|
||||
COLUMN final_blocking_session HEADING "Final|Blocking|SID" FORMAT 999999999
|
||||
COLUMN final_blocking_session_status HEADING "Final|Blocking|SID Status" FORMAT a10
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN username HEADING "DBUser" FORMAT a15
|
||||
COLUMN osuser HEADING "OSUser" FORMAT a15
|
||||
COLUMN status HEADING "Status" FORMAT a10
|
||||
COLUMN state HEADING "State" FORMAT a10
|
||||
COLUMN logon_time HEADING "LogonTime" FORMAT a18
|
||||
COLUMN service_name HEADING "ServiceName" FORMAT a20
|
||||
|
||||
|
||||
select 'Blocked By' Block
|
||||
, s.blocking_instance
|
||||
, s.blocking_session
|
||||
, s.blocking_session_status
|
||||
, s.final_blocking_instance
|
||||
, s.final_blocking_session
|
||||
, s.final_blocking_session_status
|
||||
FROM gv$session s
|
||||
where s.sid = :SID
|
||||
AND s.inst_id = :INST_ID
|
||||
and s.blocking_session is NOT NULL
|
||||
order by 1;
|
||||
|
||||
|
||||
select 'Blocking' Block
|
||||
, s.inst_id
|
||||
, s.SID
|
||||
--, s.SERIAL#
|
||||
, s.username
|
||||
, s.osuser
|
||||
, s.status
|
||||
, s.state
|
||||
, CASE
|
||||
WHEN s.status = 'ACTIVE' THEN s.last_call_et
|
||||
ELSE NULL
|
||||
END last_call_et
|
||||
, TO_CHAR(s.LOGON_TIME,'DD-Mon-YY HH24:MI:SS') logon_time
|
||||
, s.service_name
|
||||
, s.sql_id
|
||||
FROM gv$session s
|
||||
where (s.blocking_session = :SID
|
||||
AND s.blocking_instance = :INST_ID)
|
||||
OR (s.final_blocking_session = :SID
|
||||
AND s.final_blocking_instance = :INST_ID)
|
||||
;
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ######### Session Events (Top &&TOP_EVENT_COUNT) ###
|
||||
|
||||
COLUMN wait_class HEAD "WaitClass" FORMAT a20 TRUNCATE
|
||||
COLUMN event HEAD "EventName" FORMAT a40
|
||||
COLUMN total_waits HEAD "TotalWaits" FORMAT 9,999,999
|
||||
COLUMN total_timeouts HEAD "TotalTimeOuts" FORMAT 9,999,999
|
||||
COLUMN time_waited HEAD "TimeWaited (s)" FORMAT 9,999,999
|
||||
COLUMN average_wait HEAD "AvgWait (ms)" FORMAT 9,999,999
|
||||
COLUMN max_wait HEAD "MaxWait (s)" FORMAT 9,999,999
|
||||
|
||||
select * from
|
||||
(
|
||||
SELECT e.sid
|
||||
, e.inst_id
|
||||
, e.wait_class
|
||||
, e.event
|
||||
, e.total_waits
|
||||
, e.total_timeouts
|
||||
, e.time_waited / 100 time_waited
|
||||
, e.average_wait * 10 average_wait
|
||||
, e.max_wait / 100 max_wait
|
||||
FROM gv$session_event e
|
||||
WHERE e.sid = :SID
|
||||
AND e.inst_id = :INST_ID
|
||||
order by e.time_waited desc, e.total_waits desc
|
||||
)
|
||||
where rownum <= &&TOP_EVENT_COUNT
|
||||
/
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ######### Session Wait History #####################
|
||||
|
||||
COLUMN seq# FORMAT 999
|
||||
COLUMN state FORMAT a10
|
||||
COLUMN event HEADING "EventName" FORMAT a40
|
||||
COLUMN wait_time HEADING "Wait(ms)" FORMAT 99,999
|
||||
COLUMN TIME_SINCE_LAST_WAIT HEADING "TimeSince|LastWait|(ms)" FORMAT 999,999
|
||||
COLUMN p1 FORMAT 9999999999
|
||||
COLUMN p2 FORMAT 9999999999
|
||||
COLUMN p3 FORMAT 9999999999
|
||||
COLUMN p1text FORMAT a20
|
||||
COLUMN p2text FORMAT a20
|
||||
COLUMN p3text FORMAT a20
|
||||
|
||||
SELECT w.sid
|
||||
, w.inst_id
|
||||
, w.seq#
|
||||
, w.event
|
||||
, w.wait_time * 10 wait_time
|
||||
, w.TIME_SINCE_LAST_WAIT_MICRO/1000 TIME_SINCE_LAST_WAIT
|
||||
, w.p1
|
||||
, w.p1text
|
||||
, w.p2
|
||||
, w.p2text
|
||||
, w.p3
|
||||
, w.p3text
|
||||
FROM gv$session_wait_history w
|
||||
WHERE w.sid = :SID
|
||||
AND w.inst_id = :INST_ID
|
||||
ORDER BY seq#
|
||||
/
|
||||
|
||||
|
||||
PROMPT
|
||||
PROMPT ######### Last 10 SQL Statements ##################
|
||||
|
||||
COLUMN session_id HEADING "SID" FORMAT 99999
|
||||
COLUMN inst_id HEADING "I#" FORMAT 99
|
||||
COLUMN "session_serial#" HEADING "Serial#" FORMAT 999999
|
||||
COLUMN FORCE_MATCHING_SIGNATURE FORMAT 99999999999999999999999
|
||||
COLUMN sql_plan_hash_value HEADING "Plan|Hash|Value" FORMAT 9999999999
|
||||
COLUMN sql_exec_start FORMAT a19
|
||||
COLUMN sql_exec_end HEADING "MaxSampleTime" FORMAT a19
|
||||
COLUMN duration FORMAT a15
|
||||
COLUMN sql_opname HEADING "SQL|Operation" FORMAT a15 TRUNCATE
|
||||
COLUMN sql_child_number HEADING "SQL|Ch#" FORMAT 999
|
||||
COLUMN current_dop HEADING "DOP" FORMAT 999
|
||||
COLUMN phyread HEADING "Phy|Read|(GB)" FORMAT 9999
|
||||
COLUMN phywrite HEADING "Phy|Write|(GB)" FORMAT 9999
|
||||
COLUMN interconnect_io HEADING "Inter|Connect|IO|(GB)" FORMAT 9999
|
||||
COLUMN pga_allocated HEADING "PGA|(GB)" FORMAT 99.00
|
||||
COLUMN temp_space_allocated HEADING "Temp|Space|(GB)" FORMAT 999.00
|
||||
|
||||
-- Get the SQL Statements from ASH
|
||||
SELECT * FROM
|
||||
(
|
||||
SELECT --ash.sql_exec_id,
|
||||
--TO_CHAR(NVL(ash.sql_exec_start,MIN(ash.sample_time)),'DD-MON-YY HH24:MI:SS') sql_exec_start
|
||||
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
|
||||
, REPLACE(max(ash.sample_time) - NVL(ash.sql_exec_start,MIN(ash.sample_time)),'+00000000','+') duration
|
||||
, ash.sql_opname
|
||||
, ash.sql_id
|
||||
, ash.sql_child_number
|
||||
, ash.sql_plan_hash_value
|
||||
, 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
|
||||
, ROUND(SUM(ash.delta_read_io_bytes)/power(1024,3)) phyread
|
||||
, ROUND(SUM(ash.delta_write_io_bytes)/power(1024,3)) phywrite
|
||||
, ROUND(SUM(ash.delta_interconnect_io_bytes)/power(1024,3)) interconnect_io
|
||||
, ROUND(MAX(ash.pga_allocated)/power(1024,3),2) pga_allocated
|
||||
, ROUND(MAX(ash.temp_space_allocated)/power(1024,3),2) temp_space_allocated
|
||||
FROM gv$session s
|
||||
JOIN gv$active_session_history ash
|
||||
ON s.inst_id = NVL(ash.qc_instance_id,ash.inst_id)
|
||||
AND s.sid = NVL(ash.qc_session_id,ash.session_id)
|
||||
AND s.serial# = NVL(ash.qc_session_serial#,ash.session_serial#)
|
||||
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
|
||||
WHERE s.inst_id = :INST_ID
|
||||
AND s.sid = :SID
|
||||
--AND ash.sql_exec_id IS NOT NULL
|
||||
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
|
||||
, ash.sql_opname
|
||||
, NVL(ash_parent.top_level_sql_id,ash.top_level_sql_id)
|
||||
ORDER BY
|
||||
-- max(ash.sample_time) asc
|
||||
--,
|
||||
NVL(ash.sql_exec_start,MIN(ash.sample_time)) DESC
|
||||
, max(ash.sample_time) DESC
|
||||
)
|
||||
WHERE ROWNUM <= 10
|
||||
ORDER BY sql_exec_end
|
||||
;
|
||||
|
||||
PROMPT
|
||||
PROMPT ######### Kill/Disconnect Command ##################
|
||||
|
||||
COLUMN command HEADING "Disconnect Command" FORMAT a60
|
||||
COLUMN command2 HEADING "Kill Command" FORMAT a60
|
||||
|
||||
BEGIN
|
||||
FOR i IN (select 'alter system disconnect session ''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; ' Command
|
||||
, 'alter system kill session ''' || s.sid || ',' || s.serial# || ',@' || s.inst_id || ''' immediate ; ' Command2
|
||||
from gv$session s
|
||||
, gv$process p
|
||||
where s.inst_id = p.inst_id (+)
|
||||
AND s.PADDR = p.ADDR (+)
|
||||
AND s.sid = :SID
|
||||
AND s.inst_id = :INST_ID)
|
||||
LOOP
|
||||
DBMS_OUTPUT.PUT_LINE( i.command || chr(10)
|
||||
|| i.command2 );
|
||||
END LOOP;
|
||||
END;
|
||||
/
|
||||
|
||||
Reference in New Issue
Block a user