sql性能查询语句

查询系统中最耗时的 SQL

select * from (
	select * from V$SQLSTATS
	
	-- 最耗时的 SQL
	-- ELAPSED_TIME 指的是总耗时(毫秒),平均耗时 = ELAPSED_TIME/EXECUTIONS
	-- order by ELAPSED_TIME DESC
	
	-- 查询执行次数最多的 SQL
	-- order by EXECUTIONS DESC
	
	-- 读硬盘最多的 SQL
	-- order by DISK_READS DESC
	
	-- 最费 CPU 的 SQL
	-- order by BUFFER_GETS DESC
) where rownum <=50;

查询次数最多:

select *

from (select s.SQL_TEXT,

s.EXECUTIONS "执行次数",

s.PARSING_USER_ID "用户名",

rank() over(order by EXECUTIONS desc) EXEC_RANK

from v$sql s

left join all_users u

on u.USER_ID = s.PARSING_USER_ID) t

where exec_rank <= 100;

注:rank() over是的作用是查出指定条件后进行一个排名

查询执行最慢:

select *

from (select sa.SQL_TEXT,

sa.SQL_FULLTEXT,

sa.EXECUTIONS "执行次数",

round(sa.ELAPSED_TIME / 1000000, 2) "总执行时间",

round(sa.ELAPSED_TIME / 1000000 / sa.EXECUTIONS, 2) "平均执行时间",

sa.COMMAND_TYPE,

sa.PARSING_USER_ID "用户ID",

u.username "用户名",

sa.HASH_VALUE

from v$sqlarea sa

left join all_users u

on sa.PARSING_USER_ID = u.user_id

where sa.EXECUTIONS > 0

order by (sa.ELAPSED_TIME / sa.EXECUTIONS) desc)

where rownum <= 50;

查询表锁:

    SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#,
    l.os_user_name,s.machine, s.terminal,a.sql_text, a.action
    FROM v$sqlarea a,v$session s, v$locked_object l
    WHERE l.session_id = s.sid
    AND s.prev_sql_addr = a.address
    ORDER BY sid, s.serial#;

查询session

select distinct a.sid,b.SERIAL#,b.PROCESS,b.STATUS from v$session_wait a,v$session b
where a.SID=b.SID

猜你喜欢

转载自blog.csdn.net/qq_32169593/article/details/82491673