COL con_id FOR 999 HEA 'Con|ID'; COL pdb_name FOR A30 HEA 'PDB Name' FOR A30 TRUNC; COL sum_seconds FOR 999,999,990 HEA 'Sum Dur Secs'; COL avg_seconds FOR 999,999,990 HEA 'Avg Dur Secs'; COL max_seconds FOR 999,999,990 HEA 'Max Dur Secs'; COL execs FOR 999,990 HEA 'Executions'; COL last_refresh_time FOR A19 HEA 'Last Captured'; COL con_id FOR 999 HEA 'Con|ID'; COL sql_plan_hash_value FOR 9999999999 HEA 'Plan|Hash Value'; COL binds FOR A300 HEA 'Binds (:name=value :name=value ...)' TRUNC; COL status FOR A19 HEA 'Status'; COL username FOR A30 HEA 'Username' TRUNC; COL machine FOR A64 HEA 'Machine'; COL sid_serial# FOR A12 HEA 'Sid,Serial#'; COL avg_et_secs FOR 999,999,990.0 HEA 'Avg ET Secs'; COL avg_cpu_secs FOR 999,999,990.0 HEA 'Avg CPU Secs'; COL avg_buffer_gets FOR 999,999,999,990 HEA 'Avg Buffer Gets'; COL avg_disk_reads FOR 999,999,999,990 HEA 'Avg Disk Reads'; COL module_action_program FOR A100 HEA 'Module Action Program' TRUNC; -- PRO PRO SQL MONITOR BINDS by Sum Secs (v$sql_monitor) Top 100 PRO ~~~~~~~~~~~~~~~~~ -- WITH mon AS ( SELECT s.con_id, s.sql_plan_hash_value, s.sql_exec_id, s.sql_exec_start, s.last_refresh_time, s.binds_xml, (s.last_refresh_time - s.sql_exec_start) * 24 * 3600 AS seconds, s.status, s.username, s.sid, s.session_serial# AS serial#, (SELECT e.machine FROM v$session e WHERE e.sid = s.sid AND e.serial# = s.session_serial# AND e.machine IS NOT NULL AND ROWNUM = 1) AS machine, s.elapsed_time, s.cpu_time, s.buffer_gets, s.disk_reads, s.module, s.action, s.program FROM v$sql_monitor s WHERE s.sql_id = '&&cs_sql_id.' AND (s.last_refresh_time - s.sql_exec_start) * 24 * 3600 >= 0 AND s.binds_xml IS NOT NULL ), bind AS ( SELECT mon.con_id, mon.sql_plan_hash_value, mon.sql_exec_id, mon.sql_exec_start, mon.last_refresh_time, mon.seconds, mon.status, mon.username, mon.sid, mon.serial#, mon.machine, mon.elapsed_time, mon.cpu_time, mon.buffer_gets, mon.disk_reads, mon.module, mon.action, mon.program, bv.name, bv.pos, bv.type, bv.maxlen, bv.len, bv.value FROM mon, XMLTABLE( '/binds/bind' PASSING XMLTYPE(REPLACE(REPLACE(ASCIISTR(mon.binds_xml), '\FFFF'), CHR(0))) COLUMNS name VARCHAR2( 30 ) path '@name' , pos NUMBER path '@pos', type VARCHAR2( 15 ) path '@dtystr' , maxlen NUMBER path '@maxlen', len NUMBER path '@len', value VARCHAR2( 4000 ) path '.' ) bv ), execs AS ( SELECT con_id, sql_plan_hash_value, sql_exec_id, sql_exec_start, last_refresh_time, seconds, status, username, sid, serial#, machine, elapsed_time, cpu_time, buffer_gets, disk_reads, module, action, program, MAX(CASE pos WHEN 1 THEN name||'='||value END)|| MAX(CASE pos WHEN 2 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 3 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 4 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 5 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 6 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 7 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 8 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 9 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 10 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 11 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 12 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 13 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 14 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 15 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 16 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 17 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 18 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 19 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 20 THEN ' '||name||'='||value END) AS binds FROM bind GROUP BY con_id, sql_plan_hash_value, sql_exec_id, sql_exec_start, last_refresh_time, seconds, status, username, sid, serial#, machine, elapsed_time, cpu_time, buffer_gets, disk_reads, module, action, program ) SELECT SUM(seconds) AS sum_seconds, ROUND(AVG(seconds)) AS avg_seconds, MAX(seconds) AS max_seconds, COUNT(*) AS execs, ROUND(AVG(elapsed_time)/1e6, 1) AS avg_et_secs, ROUND(AVG(cpu_time)/1e6, 1) AS avg_cpu_secs, ROUND(AVG(buffer_gets)) AS avg_buffer_gets, ROUND(AVG(disk_reads)) AS avg_disk_reads, MAX(last_refresh_time) AS last_refresh_time, con_id, (SELECT c.name FROM v$containers c WHERE c.con_id = e.con_id) AS pdb_name, sql_plan_hash_value, binds -- status, -- sid||','||serial# AS sid_serial#, -- --username, -- machine, -- TRIM( -- CASE WHEN module IS NOT NULL THEN 'm:'||SUBSTR(module, 1, 64) END|| -- CASE WHEN action IS NOT NULL THEN ' a:'||SUBSTR(action, 1, 64) END|| -- CASE WHEN program IS NOT NULL THEN ' p:'||SUBSTR(program, 1, 64) END -- ) AS module_action_program FROM execs e GROUP BY con_id, sql_plan_hash_value, binds -- status, -- username, -- sid, -- serial#, -- machine, -- module, -- action, -- program ORDER BY 1 DESC, 2 DESC, 3 DESC, 5 FETCH FIRST 100 ROWS ONLY / -- PRO PRO SQL MONITOR BINDS by Last Captured (v$sql_monitor) Last 100 PRO ~~~~~~~~~~~~~~~~~ -- WITH mon AS ( SELECT s.con_id, s.sql_plan_hash_value, s.sql_exec_id, s.sql_exec_start, s.last_refresh_time, s.binds_xml, (s.last_refresh_time - s.sql_exec_start) * 24 * 3600 AS seconds, s.status, s.username, s.sid, s.session_serial# AS serial#, (SELECT e.machine FROM v$session e WHERE e.sid = s.sid AND e.serial# = s.session_serial# AND e.machine IS NOT NULL AND ROWNUM = 1) AS machine, s.elapsed_time, s.cpu_time, s.buffer_gets, s.disk_reads, s.module, s.action, s.program FROM v$sql_monitor s WHERE s.sql_id = '&&cs_sql_id.' AND (s.last_refresh_time - s.sql_exec_start) * 24 * 3600 >= 0 AND s.binds_xml IS NOT NULL ), bind AS ( SELECT mon.con_id, mon.sql_plan_hash_value, mon.sql_exec_id, mon.sql_exec_start, mon.last_refresh_time, mon.seconds, mon.status, mon.username, mon.sid, mon.serial#, mon.machine, mon.elapsed_time, mon.cpu_time, mon.buffer_gets, mon.disk_reads, mon.module, mon.action, mon.program, bv.name, bv.pos, bv.type, bv.maxlen, bv.len, bv.value FROM mon, XMLTABLE( '/binds/bind' PASSING XMLTYPE(REPLACE(REPLACE(ASCIISTR(mon.binds_xml), '\FFFF'), CHR(0))) COLUMNS name VARCHAR2( 30 ) path '@name' , pos NUMBER path '@pos', type VARCHAR2( 15 ) path '@dtystr' , maxlen NUMBER path '@maxlen', len NUMBER path '@len', value VARCHAR2( 4000 ) path '.' ) bv ), execs AS ( SELECT con_id, sql_plan_hash_value, sql_exec_id, sql_exec_start, last_refresh_time, seconds, status, username, sid, serial#, machine, elapsed_time, cpu_time, buffer_gets, disk_reads, module, action, program, MAX(CASE pos WHEN 1 THEN name||'='||value END)|| MAX(CASE pos WHEN 2 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 3 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 4 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 5 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 6 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 7 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 8 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 9 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 10 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 11 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 12 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 13 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 14 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 15 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 16 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 17 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 18 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 19 THEN ' '||name||'='||value END)|| MAX(CASE pos WHEN 20 THEN ' '||name||'='||value END) AS binds FROM bind GROUP BY con_id, sql_plan_hash_value, sql_exec_id, sql_exec_start, last_refresh_time, seconds, status, username, sid, serial#, machine, elapsed_time, cpu_time, buffer_gets, disk_reads, module, action, program ), top AS ( SELECT MAX(last_refresh_time) AS last_refresh_time, SUM(seconds) AS sum_seconds, ROUND(AVG(seconds)) AS avg_seconds, MAX(seconds) AS max_seconds, COUNT(*) AS execs, ROUND(AVG(elapsed_time)/1e6, 1) AS avg_et_secs, ROUND(AVG(cpu_time)/1e6, 1) AS avg_cpu_secs, ROUND(AVG(buffer_gets)) AS avg_buffer_gets, ROUND(AVG(disk_reads)) AS avg_disk_reads, con_id, (SELECT c.name FROM v$containers c WHERE c.con_id = e.con_id) AS pdb_name, sql_plan_hash_value, binds -- status, -- sid||','||serial# AS sid_serial#, --username, -- machine, -- TRIM( -- CASE WHEN module IS NOT NULL THEN 'm:'||SUBSTR(module, 1, 64) END|| -- CASE WHEN action IS NOT NULL THEN ' a:'||SUBSTR(action, 1, 64) END|| -- CASE WHEN program IS NOT NULL THEN ' p:'||SUBSTR(program, 1, 64) END -- ) AS module_action_program FROM execs e GROUP BY con_id, sql_plan_hash_value, binds -- status, -- username, -- sid, -- serial#, -- machine, -- module, -- action, -- program ORDER BY 1 DESC FETCH FIRST 100 ROWS ONLY ) SELECT last_refresh_time, sum_seconds, avg_seconds, max_seconds, execs, avg_et_secs, avg_cpu_secs, avg_buffer_gets, avg_disk_reads, con_id, pdb_name, sql_plan_hash_value, binds -- status, -- sid_serial#, --username, -- machine, -- module_action_program FROM top ORDER BY last_refresh_time / -- PRO PRO SQL MONITOR BINDS by Sum of Elapsed Time (v$sql_monitor) Top 100 PRO ~~~~~~~~~~~~~~~~~ -- COL sum_duration_secs FOR 999,990 HEA 'Sum|Duration|Seconds'; COL sum_elapsed_secs FOR 999,990 HEA 'Sum|Elapsed|Seconds'; COL sum_cpu_secs FOR 999,990 HEA 'Sum|CPU|Seconds'; COL sum_buffer_gets FOR 999,999,999,990 HEA 'Sum|Buffer|Gets'; COL sum_disk_reads FOR 999,999,999,990 HEA 'Sum|Disk|Reads'; COL avg_duration_secs FOR 999,990 HEA 'Avg|Duration|Seconds'; COL avg_elapsed_secs FOR 999,990 HEA 'Avg|Elapsed|Seconds'; COL avg_cpu_secs FOR 999,990 HEA 'Avg|CPU|Seconds'; COL avg_buffer_gets FOR 999,999,999,990 HEA 'Avg|Buffer|Gets'; COL avg_disk_reads FOR 999,999,999,990 HEA 'Avg|Disk|Reads'; COL max_duration_secs FOR 999,990 HEA 'Max|Duration|Seconds'; COL max_elapsed_secs FOR 999,990 HEA 'Max|Elapsed|Seconds'; COL max_cpu_secs FOR 999,990 HEA 'Max|CPU|Seconds'; COL max_buffer_gets FOR 999,999,999,990 HEA 'Max|Buffer|Gets'; COL max_disk_reads FOR 999,999,999,990 HEA 'Max|Disk|Reads'; COL cnt FOR 999,990 HEA 'Count'; COL name_and_value FOR A200 HEA 'Bind Name and Value'; COL min_sql_exec_start HEA 'Min SQL|Exec Start'; COL max_last_refresh_time HEA 'Max Last|Refresh Time'; COL d1 FOR A1 HEA '|'; COL d2 FOR A1 HEA '|'; COL d3 FOR A1 HEA '|'; COL d4 FOR A1 HEA '|'; -- WITH mon AS ( SELECT s.key, s.con_id, s.sql_plan_hash_value, s.sql_exec_id, s.sql_exec_start, s.last_refresh_time, (s.last_refresh_time - s.sql_exec_start) * 24 * 3600 AS seconds, s.status, s.username, s.sid, s.session_serial# AS serial#, s.elapsed_time, s.cpu_time, s.buffer_gets, s.disk_reads, s.module, s.action, s.program, bv.pos, bv.name, bv.type, bv.maxlen, bv.len, bv.value FROM v$sql_monitor s, xmltable( '/binds/bind' passing xmltype(REPLACE(REPLACE(ASCIISTR(s.binds_xml), '\FFFF'), CHR(0))) COLUMNS name VARCHAR2( 30 ) path '@name' , pos NUMBER path '@pos', type VARCHAR2( 15 ) path '@dtystr' , maxlen NUMBER path '@maxlen', len NUMBER path '@len', value VARCHAR2( 4000 ) path '.' ) bv WHERE s.sql_id = '&&cs_sql_id.' AND s.status LIKE 'DONE%' AND s.binds_xml IS NOT NULL ), grp AS ( SELECT SUM(seconds) AS sum_duration_secs, SUM(elapsed_time) / POWER(10, 6) AS sum_elapsed_secs, SUM(cpu_time) / POWER(10, 6) AS sum_cpu_secs, SUM(buffer_gets) AS sum_buffer_gets, SUM(disk_reads) AS sum_disk_reads, AVG(seconds) AS avg_duration_secs, AVG(elapsed_time) / POWER(10, 6) AS avg_elapsed_secs, AVG(cpu_time) / POWER(10, 6) AS avg_cpu_secs, AVG(buffer_gets) AS avg_buffer_gets, AVG(disk_reads) AS avg_disk_reads, MAX(seconds) AS max_duration_secs, MAX(elapsed_time) / POWER(10, 6) AS max_elapsed_secs, MAX(cpu_time) / POWER(10, 6) AS max_cpu_secs, MAX(buffer_gets) AS max_buffer_gets, MAX(disk_reads) AS max_disk_reads, COUNT(*) AS cnt, MIN(sql_exec_start) AS min_sql_exec_start, MAX(last_refresh_time) AS max_last_refresh_time, name, value FROM mon GROUP BY name, value ) SELECT sum_duration_secs, sum_elapsed_secs, sum_cpu_secs, sum_buffer_gets, sum_disk_reads, '|' AS d1, avg_duration_secs, avg_elapsed_secs, avg_cpu_secs, avg_buffer_gets, avg_disk_reads, '|' AS d2, max_duration_secs, max_elapsed_secs, max_cpu_secs, max_buffer_gets, max_disk_reads, '|' AS d3, name||' = '||value AS name_and_value, '|' AS d4, cnt, min_sql_exec_start, max_last_refresh_time FROM grp ORDER BY sum_duration_secs DESC, name, value FETCH FIRST 100 ROWS ONLY /