SELECT t.name task_name, p.TASK_ID,
exec_name EXECUTION_NAME, exec_type EXECUTION_TYPE,
OBJECT_ID, p.plan_id, p.sql_id,
p.PLAN_HASH as plan_hash_value,
p.spare_n1 as attr1,
-- the time stats in the old version are in milliseconds. In the
-- new code, we used a bit in "flags" to indicate that if the
-- time stats are in microseconds in the new code. So if
-- the flags are not set or NULL, we will need to convert them
-- into microseconds.
decode(bitand(nvl(s.flags, 0),2), 2, parse_time, parse_time*1000)
as PARSE_TIME,
decode(bitand(nvl(s.flags, 0),2), 2, exec_time, exec_time*1000)
as ELAPSED_TIME,
decode(bitand(nvl(s.flags, 0),2), 2, cpu_time, cpu_time*1000)
as CPU_TIME,
decode(bitand(nvl(s.flags, 0),2), 2, user_io_time, user_io_time*1000)
as USER_IO_TIME,
BUFFER_GETS, DISK_READS, DIRECT_WRITES,
s.spare_n1 PHYSICAL_READ_REQUESTS, s.spare_n2 PHYSICAL_WRITE_REQUESTS,
s.spare_n3 PHYSICAL_READ_BYTES, s.spare_n4 PHYSICAL_WRITE_BYTES,
ROWS_PROCESSED, FETCHES, EXECUTIONS,
END_OF_FETCH_COUNT, OPTIMIZER_COST, OTHER, TESTEXEC_TOTAL_EXECS,
io_interconnect_bytes,
decode(bitand(s.flags,1), 1, 'Y', 'N') as TESTEXEC_FIRST_EXEC_IGNORED,
p.con_dbid
FROM wri$_adv_sqlt_plan_hash p,
wri$_adv_sqlt_plan_stats s,
wri$_adv_executions e,
wri$_adv_tasks t
WHERE p.plan_id = s.plan_id AND
p.exec_name = e.name AND
p.task_id = e.task_id AND
p.task_id = t.id AND
t.owner# = SYS_CONTEXT('USERENV', 'CURRENT_USERID') AND
(p.attribute < power (2,16) OR
p.attribute >= 3*power (2, 16)) /* hide special plans */
SELECT T.NAME TASK_NAME
, P.TASK_ID
,
EXEC_NAME EXECUTION_NAME
, EXEC_TYPE EXECUTION_TYPE
,
OBJECT_ID
, P.PLAN_ID
, P.SQL_ID
,
P.PLAN_HASH AS PLAN_HASH_VALUE
,
P.SPARE_N1 AS ATTR1
,
-- THE TIME STATS IN THE OLD VERSION ARE IN MILLISECONDS. IN THE
-- NEW CODE
, WE USED A BIT IN "FLAGS" TO INDICATE THAT IF THE
-- TIME STATS ARE IN MICROSECONDS IN THE NEW CODE. SO IF
-- THE FLAGS ARE NOT SET OR NULL
, WE WILL NEED TO CONVERT THEM
-- INTO MICROSECONDS.
DECODE(BITAND(NVL(S.FLAGS
, 0)
, 2)
, 2
, PARSE_TIME
, PARSE_TIME*1000)
AS PARSE_TIME
,
DECODE(BITAND(NVL(S.FLAGS
, 0)
, 2)
, 2
, EXEC_TIME
, EXEC_TIME*1000)
AS ELAPSED_TIME
,
DECODE(BITAND(NVL(S.FLAGS
, 0)
, 2)
, 2
, CPU_TIME
, CPU_TIME*1000)
AS CPU_TIME
,
DECODE(BITAND(NVL(S.FLAGS
, 0)
, 2)
, 2
, USER_IO_TIME
, USER_IO_TIME*1000)
AS USER_IO_TIME
,
BUFFER_GETS
, DISK_READS
, DIRECT_WRITES
,
S.SPARE_N1 PHYSICAL_READ_REQUESTS
, S.SPARE_N2 PHYSICAL_WRITE_REQUESTS
,
S.SPARE_N3 PHYSICAL_READ_BYTES
, S.SPARE_N4 PHYSICAL_WRITE_BYTES
,
ROWS_PROCESSED
, FETCHES
, EXECUTIONS
,
END_OF_FETCH_COUNT
, OPTIMIZER_COST
, OTHER
, TESTEXEC_TOTAL_EXECS
,
IO_INTERCONNECT_BYTES
,
DECODE(BITAND(S.FLAGS
, 1)
, 1
, 'Y'
, 'N') AS TESTEXEC_FIRST_EXEC_IGNORED
,
P.CON_DBID
FROM WRI$_ADV_SQLT_PLAN_HASH P
,
WRI$_ADV_SQLT_PLAN_STATS S
,
WRI$_ADV_EXECUTIONS E
,
WRI$_ADV_TASKS T
WHERE P.PLAN_ID = S.PLAN_ID AND
P.EXEC_NAME = E.NAME AND
P.TASK_ID = E.TASK_ID AND
P.TASK_ID = T.ID AND
T.OWNER# = SYS_CONTEXT('USERENV'
, 'CURRENT_USERID') AND
(P.ATTRIBUTE < POWER (2
, 16) OR
P.ATTRIBUTE >= 3*POWER (2
, 16)) /* HIDE SPECIAL PLANS */
|
|
|