The document contains examples of SQL queries and scripts for analyzing database time model statistics in an Oracle database. It shows how to query the V$SYS_TIME_MODEL, V$SESSION_TIME_MODEL, and other views to see overall database time statistics and time spent on different operations. It also provides examples of saving time model stats to a table over time and scripts for measuring system performance and scalability by tracking database time, CPU, and wait times.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
72 views4 pages
Time Model Query's
The document contains examples of SQL queries and scripts for analyzing database time model statistics in an Oracle database. It shows how to query the V$SYS_TIME_MODEL, V$SESSION_TIME_MODEL, and other views to see overall database time statistics and time spent on different operations. It also provides examples of saving time model stats to a table over time and scripts for measuring system performance and scalability by tracking database time, CPU, and wait times.
FROM V$SYS_TIME_MODEL WHERE VALUE <>0 AND STAT_NAME NOT IN ('background elapsed time', 'background cpu time') ORDER BY VALUE DESC
COL STAT_NAME FORMAT A43
SELECT STAT_NAME, TO_CHAR(VALUE,'999,999,999,999') TIME_MICRO_S , ROUND(VALUE/(SELECT VALUE FROM V$SYS_TIME_MODEL WHERE STAT_NAME='DB time')*100,2) PCT FROM V$SYS_TIME_MODEL WHERE VALUE <>0 AND STAT_NAME NOT IN ('background elapsed time', 'background cpu time') ORDER BY VALUE DESC FETCH FIRST 7 ROWS ONLY;
---Database Time Model Tree
col STAT_NAME format a60
SELECT LPAD(' ', 2*level-1)||STAT_NAME STAT_NAME, TRUNC(VALUE/1000000,2) SECONDS FROM ( SELECT 0 id, 9 pid, null STAT_NAME, null value FROM dual union SELECT DECODE(STAT_NAME,'DB time',10) ID, DECODE(STAT_NAME,'DB time',0) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'DB time' union SELECT DECODE(STAT_NAME,'DB CPU',20) ID, DECODE(STAT_NAME,'DB CPU',10) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'DB CPU' union SELECT DECODE(STAT_NAME,'connection management call elapsed time',21) ID, DECODE(STAT_NAME,'connection management call elapsed time',10) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'connection management call elapsed time' union SELECT DECODE(STAT_NAME,'sequence load elapsed time',22) ID, DECODE(STAT_NAME,'sequence load elapsed time',10) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'sequence load elapsed time' union SELECT DECODE(STAT_NAME,'sql execute elapsed time',23) ID, DECODE(STAT_NAME,'sql execute elapsed time',10) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'sql execute elapsed time' union SELECT DECODE(STAT_NAME,'parse time elapsed',24) ID, DECODE(STAT_NAME,'parse time elapsed',10) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'parse time elapsed' union SELECT DECODE(STAT_NAME,'hard parse elapsed time',30) ID, DECODE(STAT_NAME,'hard parse elapsed time',24) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'hard parse elapsed time' union SELECT DECODE(STAT_NAME,'hard parse (sharing criteria) elapsed time',40) ID, DECODE(STAT_NAME,'hard parse (sharing criteria) elapsed time',30) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'hard parse (sharing criteria) elapsed time' union SELECT DECODE(STAT_NAME,'hard parse (bind mismatch) elapsed time',50) ID, DECODE(STAT_NAME,'hard parse (bind mismatch) elapsed time',40) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'hard parse (bind mismatch) elapsed time' union SELECT DECODE(STAT_NAME,'failed parse elapsed time',31) ID, DECODE(STAT_NAME,'failed parse elapsed time',24) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'failed parse elapsed time' union SELECT DECODE(STAT_NAME,'failed parse (out of shared memory) elapsed time',41) ID, DECODE(STAT_NAME,'failed parse (out of shared memory) elapsed time',31) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'failed parse (out of shared memory) elapsed time' union SELECT DECODE(STAT_NAME,'PL/SQL execution elapsed time',25) ID, DECODE(STAT_NAME,'PL/SQL execution elapsed time',10) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'PL/SQL execution elapsed time' union SELECT DECODE(STAT_NAME,'inbound PL/SQL rpc elapsed time',26) ID, DECODE(STAT_NAME,'inbound PL/SQL rpc elapsed time',10) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'inbound PL/SQL rpc elapsed time' union SELECT DECODE(STAT_NAME,'PL/SQL compilation elapsed time',27) ID, DECODE(STAT_NAME,'PL/SQL compilation elapsed time',10) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'PL/SQL compilation elapsed time' union SELECT DECODE(STAT_NAME,'Java execution elapsed time',28) ID, DECODE(STAT_NAME,'Java execution elapsed time',10) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'Java execution elapsed time' union SELECT DECODE(STAT_NAME,'repeated bind elapsed time',29) ID, DECODE(STAT_NAME,'repeated bind elapsed time',10) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'repeated bind elapsed time' union SELECT DECODE(STAT_NAME,'background elapsed time',60) ID, DECODE(STAT_NAME,'background elapsed time',0) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'background elapsed time' union SELECT DECODE(STAT_NAME,'background cpu time',61) ID, DECODE(STAT_NAME,'background cpu time',60) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'background cpu time' union SELECT DECODE(STAT_NAME,'RMAN cpu time (backup/restore)',62) ID, DECODE(STAT_NAME,'RMAN cpu time (backup/restore)',61) PID , STAT_NAME, VALUE FROM v$sys_time_model WHERE STAT_NAME = 'RMAN cpu time (backup/restore)') CONNECT BY PRIOR id = pid START WITH id = 0;
--Sessions Time Model Query Example
SELECT S.SID, S.USERNAME, T.STAT_NAME,
ROUND(T.VALUE/1000000,2) "TIME (SEC)" FROM V$SESS_TIME_MODEL T, V$SESSION S WHERE T.SID = S.SID AND T.STAT_NAME IN ('DB time','DB CPU') AND S.USERNAME IS NOT NULL ORDER BY T.VALUE DESC
TO_CHAR(DBCPU.VALUE/1000000,'999,999') DBCPU, TO_CHAR((DBTIME.VALUE-DBCPU.VALUE)/1000000,'999,999') WAIT_TIME, TO_CHAR((DBTIME.VALUE-DBCPU.VALUE)/DBTIME.VALUE*100,'99.99') || '%' WAIT_PCT, (SELECT COUNT(*) FROM V$SESSION WHERE USERNAME IS NOT NULL) USERS_CNT FROM V$SYS_TIME_MODEL DBTIME, V$SYS_TIME_MODEL DBCPU WHERE DBTIME.STAT_NAME = 'DB time' AND DBCPU.STAT_NAME = 'DB CPU';
-- create table to save DBTIME, DB CPU, and total waits in it
cat > $SD/create_tm_history.sql <<EOL
DROP TABLE TM_HISTORY; DROP SEQUENCE S; CREATE SEQUENCE S; CREATE TABLE TM_HISTORY AS SELECT S.NEXTVAL AS SNAP_ID, DBTIME.VALUE/1000000 DBTIME, DBCPU.VALUE/1000000 DBCPU, (DBTIME.VALUE-DBCPU.VALUE)/1000000 WAIT_TIME, (SELECT COUNT(*) FROM V\$SESSION WHERE USERNAME IS NOT NULL) USERS_CNT FROM V\ $SYS_TIME_MODEL DBTIME, V\$SYS_TIME_MODEL DBCPU WHERE DBTIME.STAT_NAME = 'DB time' AND DBCPU.STAT_NAME = 'DB CPU'; EOL
-- retrieve data from TM_HISTORY
cat > $SD/display_tm_history.sql << EOL set linesize 180 SELECT TO_CHAR(DBTIME,'999,999,999') DBTIME, TO_CHAR(DBCPU,'999,999,999') DBCPU, ROUND(DBCPU - LAG(DBCPU, 1, 0) OVER (ORDER BY DBCPU)) AS DBCPU_DIFF, TO_CHAR(WAIT_TIME,'999,999,999,999') WAIT_TIME, ROUND(WAIT_TIME - LAG(WAIT_TIME, 1, 0) OVER (ORDER BY WAIT_TIME)) AS WAIT_TIME_DIFF, TO_CHAR((DBTIME-DBCPU)/DBTIME*100,'99.99') || '%' WAIT_PCT, USERS_CNT, ROUND((DBTIME-DBCPU)/USERS_CNT) WAIT_USER_SHARE FROM TM_HISTORY ORDER BY SNAP_ID; EOL
-- save the current time model basic statistics into the TM_HISTORY table
cat > $SD/take_tm_snapshot.sql <<EOL
INSERT INTO TM_HISTORY SELECT S.NEXTVAL AS SNAP_ID, DBTIME.VALUE/1000000 DBTIME, DBCPU.VALUE/1000000 DBCPU, (DBTIME.VALUE-DBCPU.VALUE)/1000000 WAIT_TIME, (SELECT COUNT(*) FROM V\$SESSION WHERE USERNAME IS NOT NULL) USERS_CNT FROM V\ $SYS_TIME_MODEL DBTIME, V\$SYS_TIME_MODEL DBCPU WHERE DBTIME.STAT_NAME = 'DB time' AND DBCPU.STAT_NAME = 'DB CPU'; COMMIT; EOL ---following query to retrieve the sessions with top total wait times.
col SID format 999999
col USERNAME format a10 col DBTIME format 9999999999999 col WAITTIME format 9999999999999 col WAITPCT format 99999.99 col ONCPUPCT format 99999.99 SELECT M.SID, S.USERNAME ,VALUE DBTIME ,WAITTIME WAITTIME ,ROUND((WAITTIME/VALUE)*100,2) WAITPCT ,ROUND(((VALUE-WAITTIME)/VALUE)*100,2) ONCPU_PCT FROM(SELECT SID, STAT_ID, STAT_NAME ,VALUE ,VALUE - (LEAD(VALUE,1) OVER(PARTITION BY SID ORDER BY SID,STAT_NAME DESC)) WAITTIME FROM V$SESS_TIME_MODEL WHERE STAT_NAME IN ('DB time','DB CPU')) M, V$SESSION S WHERE M.SID = S.SID AND STAT_NAME='DB time' AND WAITTIME>0 ORDER BY WAITPCT DESC;