SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,
COMMAND_TYPE,disK_READS,sql_text FROM v$sqlarea
order BY disk_reads DESC )where ROWNUM<10 ;
HASH_VALUE:sql语句的Hash值。
ADDRESS:sql语句在SGA中的地址。
这两列被用于鉴别sql语句,有时,两条不同的语句可能hash值相同。这时候,必须连同ADDRESS一同使用来确认sql语句。
HASH_VALUE:sql语句的Hash值。
ADDRESS:sql语句在SGA中的地址。
这两列被用于鉴别sql语句,有时,两条不同的语句可能hash值相同。这时候,必须连同ADDRESS一同使用来确认sql语句。
PARSING_USER_ID:为语句解析第一条CURSOR的用户
VERSION_COUNT:语句cursor的数量
KEPT_VERSIONS:
SHaraBLE_MEMORY:cursor使用的共享内存总数
PERSISTENT_MEMORY:cursor使用的常驻内存总数
RUNTIME_MEMORY:cursor使用的运行时内存总数。
sql_TEXT:sql语句的文本(最大只能保存该语句的前1000个字符)。
MODULE,ACTION:使用了DBMS_APPLICATION_INFO时session解析第一条cursor时的信息
SORTS: 表示排序的次数
ELAPSED_TIME: 语句被解析和执行的共用时间
EXECUTIONS: 表示同一条sql语句一共执行了多少次
INVALIDATIONS: 语句的cursor失效次数
LOADS: 语句载入(载出)数量
ROWS_PROCESSED: 语句返回的列总数
查看最消耗资源的sql
SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls
FROM V$sqlAREA
WHERE buffer_gets > 10000000 OR disk_reads > 1000000
ORDER BY buffer_gets + 100 * disk_reads DESC;
SELECT EXECUTIONS , disK_READS, BUFFER_GETS,
ROUND((BUFFER_GETS-disK_READS)/BUFFER_GETS,2) Hit_radio,
ROUND(disK_READS/EXECUTIONS,2) Reads_per_run,
sql_TEXT
FROM V$sqlAREA
WHERE EXECUTIONS>0
AND BUFFER_GETS >0
AND (BUFFER_GETS-disK_READS)/BUFFER_GETS < 0.8
--EXECUTIONS 所有子游标的执行这条语句次数
--disK_READS 所有子游标运行这条语句导致的读磁盘次数
--BUFFER_GETS 所有子游标运行这条语句导致的读内存次数
--Hit_radio 命中率
--Reads_per_run 每次执行读写磁盘数
笼统的说EXECUTIONS,BUFFER_GETS,Hit_radio越高表示读内存多,磁盘少是比较理想的状态,因此越高越好
另外两个越高读磁盘次数越多,因此低点好
select sql_text,executions
from (
select sql_text,executions,rank() over(order by executions desc) exec_rank
from v$sql
)
where exec_rank <=10;
select sql_id,sql_text,round(exec_time/1000000,0) exec_time
from(
select sql_id,sql_text,exec_time,rank() over (order by exec_time desc) exec_rank
from
(
select sql_id,sql_text,cpu_time,elapsed_time,executions,round(elapsed_time/executions,0) exec_time
from v$sql
where executions>1
)
)
where exec_rank <=10;
cpu和IO占用最多:
select sql_text,executions,buffer_gets,disk_reads from v$sql
where buffer_gets > 100000
or disk_reads > 100000
order by buffer_gets+100*disk_reads desc
前5个花费最多cpu和时间:
select sql_text,executions,
round(elapsed_time/1000000,2) elapsed_seconds,
round(cpu_time/1000000,2) cpu_secs from
(select * from v$sql order by elapsed_time desc)
where rownum<6
查看最耗费资源的会话
select to_char(m.END_TIME,'DD-MON-YYYY HH24:MI:SS') e_dttm, m.INTSIZE_CSEC/100 ints, s.USERNAME usr, m.SESSION_ID sid, m.SESSION_SERIAL_NUM ssn, ROUND (m.cpu) cpu100, m.PHYSICAL_READS prds, m.LOGICAL_READS lrds, m.PGA_MEMORY, m.HARD_PARSES hp, m.soFT_PARSES sp, m.PHYSICAL_READ_PCT prp, m.LOGICAL_READ_PCT lrp, s.sql_ID from v$sessmetric m,v$session s where (m.PHYSICAL_READS>100 or m.cpu>100 or m.LOGICAL_READS>100) and m.session_id=s.SID and m.SESSION_SERIAL_NUM=s.SERIAL# order by m.PHYSICAL_READS DESC,m.cpu desc,m.LOGICAL_READS desc;
select sql_text,executions from (select sql_text,executions, rank() over (order by executions desc) exec_rank from v$sql) where exec_rank <=5;
消耗磁盘读取最多的sql top5:
select disk_reads,sql_text from (select sql_text,disk_reads, dense_rank() over (order by disk_reads desc) disk_reads_rank from v$sql) where disk_reads_rank <=5;
找出需要大量缓冲读取(逻辑读)操作的查询:
select buffer_gets,sql_text from (select sql_text,buffer_gets, dense_rank() over (order by buffer_gets desc) buffer_gets_rank from v$sql) where buffer_gets_rank<=5;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。