oracle 中如何定位重要(消耗资源多)的SQL【转】

1、查看值得怀疑的SQL

select substr(to_char(s.pct,‘99.00‘),2)||‘%‘load,
       s.executions executes,
       p.sql_text
from(select address,
               disk_reads,
               executions,
               pct,
               rank()over(order by disk_reads desc) ranking
         from(select address,
                       disk_reads,
                       executions,
                      100*ratio_to_report(disk_reads)over() pct
                 from sys.v_$sql
                where command_type!=47)
        where disk_reads>50*executions) s,
       sys.v_$sqltext p
where s.ranking<=5
  and p.address=s.address
order by 1, s.address, p.piece;

2、查看消耗内存多的sql

select b.username,
       a. buffer_gets,
       a.executions,
       a.disk_reads / decode(a.executions, 0, 1, a.executions),
       a.sql_text SQL
  from v$sqlarea a, dba_users b
 where a.parsing_user_id = b.user_id
   and a.disk_reads > 10000
 order by disk_reads desc;

3、查看逻辑读多的SQL

select*
from(select buffer_gets, sql_text
         from v$sqlarea
        where buffer_gets>500000
        order by buffer_gets desc)
where rownum<=30;

4、查看执行次数多的SQL

select sql_text, executions
  from (select sql_text, executions from v$sqlarea order by executions desc)
 where rownum < 81;

5、查看读硬盘多的SQL

select sql_text, disk_reads
from(select sql_text, disk_reads from v$sqlarea order by disk_reads desc)
where rownum<21;

6、查看排序多的SQL

select sql_text, sorts
from(select sql_text, sorts from v$sqlarea order by sorts desc)
where rownum<21;

7、分析的次数太多,执行的次数太少,要用绑变量的方法来写sql

select substr(sql_text, 1, 80) "sql", count(*), sum(executions) "totexecs"
  from v$sqlarea
 where executions < 5
 group by substr(sql_text, 1, 80)
having count(*) > 30
 order by 2;
时间: 2024-08-24 20:41:23

oracle 中如何定位重要(消耗资源多)的SQL【转】的相关文章

oracle中scott用户下四个基本表SQL语句练习

--选择部门中30的雇员SELECT * from emp where DEPTNO=30;--列出所有办事员的姓名.部门.编号--采用内连接方式,也就是等值链接,也是最常用的链接SELECT ename,empno,dname from emp e INNER JOINdept d on e.deptno=d.deptno where job='CLERK';--找出佣金高于薪金的雇员select * from emp where comm>sal;--找出佣金高于薪金60%的雇员select

查看消耗资源最多的SQL

SELECT * FROM (  SELECT sqlarea.sql_text, dba_users.username, sqlarea.sql_id, SUM (active_session_history.wait_time + active_session_history.time_waited) total_wait_time FROM v$active_session_history active_session_history, v$sqlarea sqlarea, dba_use

跟踪oracle中sql语句执行过程及相关知识拓展

<pre name="code" class="sql">select * from v$sqlarea; select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00'; 这个方法查询结果每条记录显示一条查询语句,且只能查询sql_text小于1000字符的,多余的会被截断. 改进一下: select * from v$sqlarea where first_load_tim

ORACLE 如何定位消耗资源的SQL

在分析SQL性能的时候,经常需要确定资源消耗多的SQL,总结如下: 1 查看值得怀疑的SQLselect substr(to_char(s.pct, '99.00'), 2) || '%' load,       s.executions executes,       p.sql_text  from (select address,               disk_reads,               executions,               pct,          

sqlserver定位消耗资源比较高的sql

sqlserver查看消耗资源的sql ,具体如下: 可以使用SQL 快速定位数据库里CPU,IO 消耗比较高的SQL: 1. 定位消耗cpu,io 最高的进程信息 selectspid,dbid,cpu,physical_io,login_time,last_batch,status, hostname,program_name,hostprocess,cmd,nt_usernamefrom sysprocesses order by cpu,physical_io desc; 2. 定位该进

sqlserver定位消耗资源比較高的sql

sqlserver查看消耗资源的sql ,详细例如以下: 能够使用SQL 高速定位数据库里CPU,IO 消耗比較高的SQL: 1. 定位消耗cpu,io 最高的进程信息 selectspid,dbid,cpu,physical_io,login_time,last_batch,status, hostname,program_name,hostprocess,cmd,nt_usernamefrom sysprocesses order by cpu,physical_io desc; 2. 定位

Oracle中修改表名遇到“ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效”

Oracle中想修改表名: rename ASSETPORJECT to ASSETPROJECT; --结果提示:ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效. 看来有锁定该表的会话,于是,执行如下查询: SELECT sid, serial#, username, osuser FROM v$session where sid in(select session_id from v$locked_object); --kill掉相关的会话 ALTER

Oracle中B-TREE索引的深入理解(转载)

索引概述 索引与表一样,也属于段(segment)的一种.里面存放了用户的数据,跟表一样需要占用磁盘空间.只不过,在索引里的数据存放形式与表里的数据存放形式非常的不一样.在理解索引时,可以想象一本书,其中书的内容就相当于表里的数据,而书前面的目录就相当于该表的索引.同时,通常情况下,索引所占用的磁盘空间要比表要小的多,其主要作用是为了加快对数据的搜索速度,也可以用来保证数据的唯一性.但是,索引作为一种可选的数据结构,你可以选择为某个表里的创建索引,也可以不创建.这是因为一旦创建了索引,就意味着o

Oracle中HINT的30个用法

在SQL语句优化过程中,经常会用到hint, 以下是在SQL优化过程中常见Oracle中"HINT"的30个用法 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT'; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消