CPU: select * from (select v.sql_id, v.child_number, v.sql_text, v.elapsed_time, v.cpu_time, v.disk_reads, rank() over(order by v.cpu_time desc) elapsed_rank from v$sql v) a where elapsed_rank <= 10; 磁盤: select * from (select v.sql_id, v.child_number, v.sql_text, v.elapsed_time, v.cpu_time, v.disk_reads, rank() over(order by v.disk_reads desc) elapsed_rank from v$sql v) a where elapsed_rank <= 10; 數據庫管理員可以執行下述語句來查看SQL語句的解析情況: SELECT * FROM V$SYSSTAT WHERE NAME IN ('parse_time_cpu','parse_time_elapsed','parse_count_ hard'); 這里: ①parse_time_cpu:是系統服務時間。 ②parse_time_elapsed:是響應時間。 而用戶等待時間為: waite_time = parse_time_elapsed – parse_time_cpu (2) 數據庫管理員還可以通過下述語句,查看低效率的SQL語句: SELECT BUFFER_GETS,EXECUTIONS,SQL_TEXT FROM V$SQLAREA; 優化這些低效率的SQL語句也有助於提高CPU的利用率。 --- 查詢每天執行慢的SQL: SELECT S.SQL_TEXT, S.SQL_FULLTEXT, S.SQL_ID, ROUND(ELAPSED_TIME / 1000000 / (CASE WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN 1 ELSE EXECUTIONS END), 2) "執行時間'S'", S.EXECUTIONS "執行次數", S.OPTIMIZER_COST "COST", S.SORTS, S.MODULE, --連接模式(JDBC THIN CLIENT:程序) -- S.LOCKED_TOTAL, S.PHYSICAL_READ_BYTES "物理讀", -- S.PHYSICAL_READ_REQUESTS "物理讀請求", S.PHYSICAL_WRITE_REQUESTS "物理寫", -- S.PHYSICAL_WRITE_BYTES "物理寫請求", S.ROWS_PROCESSED "返回行數", S.DISK_READS "磁盤讀", S.DIRECT_WRITES "直接路徑寫", S.PARSING_SCHEMA_NAME, S.LAST_ACTIVE_TIME FROM GV$SQLAREA S WHERE ROUND(ELAPSED_TIME / 1000000 / (CASE WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN 1 ELSE EXECUTIONS END), 2) > 5 --100 0000微秒=1S AND S.PARSING_SCHEMA_NAME = USER AND TO_CHAR(S.LAST_LOAD_TIME, 'YYYY-MM-DD') = TO_CHAR( SYSDATE, 'YYYY-MM-DD' ) AND S.COMMAND_TYPE IN (2 , 3, 5, 6 , 189) ORDER BY "執行時間'S'" DESC; /* SQL中 COMMAND_TYPE意義: 2:INSERT 3:SELECT 6:UPDATE 7:DELETE 189:MERGE 詳情可通過查找V$SQLCOMMAND視圖 */ V$SQLAREA 官網解釋:http://docs.oracle.com/cd/E11882_01/server.112/e40402/dynviews_3064.htm#REFRN30259 V$SQLCOMMAND 官網解釋:http://docs.oracle.com/cd/E11882_01/server.112/e40402/dynviews_3066.htm#REFRN30632