1.从v$sqlarea中找出最多的物理读的sql
- select b.username,
- a.DISK_READS,
- a.EXECUTIONS,
- a.DISK_READS / decode(a.EXECUTIONS, 0, 1, a.EXECUTIONS) ratio,
- a.SQL_TEXT
- from v$sqlarea a, dba_users b
- where a.PARSING_USER_ID = b.user_id
- and a.DISK_READS > 10000
- and b.username not in ('SYS', 'SYSTEM')
- order by a.DISK_READS desc;
2.从v$sqlarea中找出最多的逻辑读的sql
- select b.username,
- a.BUFFER_GETS,
- a.EXECUTIONS,
- a.BUFFER_GETS / decode(a.EXECUTIONS, 0, 1, a.EXECUTIONS) ratio,
- a.SQL_TEXT
- from v$sqlarea a, dba_users b
- where a.PARSING_USER_ID = b.user_id
- and a.BUFFER_GETS > 10000
- and b.username not in ('SYS', 'SYSTEM')
- order by a.DISK_READS desc;
3.从v$sql中选出最占用资源的sql
- select *
- from (select a.ADDRESS,
- a.SQL_TEXT,
- rank() over(order by a.BUFFER_GETS desc) as rank_bufgets,
- to_char(100 * ratio_to_report(a.BUFFER_GETS) over(), '999.99') as pct_bufgets
- from v$sql a
- where a.PARSING_SCHEMA_NAME = 'PMIS')
- where rank_bufgets < 11
4.在第3个sql中可能存在sqltext是一样的,但是是不同的子cursor的语句,那么可以查询v$sql_shared_cursor来查询为什么同一个sqltext的sql会有不同的执行计划
- select * from v$sql_shared_cursor c where c.ADDRESS='&address'