首页 运维知识 有关Oracle 性能相关常用脚本(SQL)

有关Oracle 性能相关常用脚本(SQL)

在缺乏的可视化工具来监控数据库性能的情形下,常用的脚本就派上用场了,下面提供几个关于Oracle性能相关的脚本供大家参考。以下脚本均在Oracle 10g测试通过,Oracle 1…

在缺乏的可视化工具来监控数据库性能的情形下,常用的脚本就派上用场了,下面提供几个关于Oracle性能相关的脚本供大家参考。以下脚本均在Oracle 10g测试通过,Oracle 11g可能要做相应调整。

1、寻找最多BUFFER_GETS开销的SQL 语句

  1. –filename: top_sql_by_buffer_gets.sql  
  2. –Identify heavy SQL (Get the SQL with heavy BUFFER_GETS)  
  3. SET LINESIZE 190  
  4. COL sql_text FORMAT a100 WRAP
  5. SET PAGESIZE 100  
  6. SELECT *  
  7.   FROM (  SELECT sql_text,  
  8.                  sql_id,
  9.                  executions,
  10.                  disk_reads,
  11.                  buffer_gets
  12.             FROM v$sqlarea  
  13.            WHERE DECODE (executions, 0, buffer_gets, buffer_gets / executions) >  
  14.                     (SELECT AVG (DECODE (executions, 0, buffer_gets, buffer_gets / executions))  
  15.                             + STDDEV (DECODE (executions, 0, buffer_gets, buffer_gets / executions))
  16.                        FROM v$sqlarea)  
  17.                  AND parsing_user_id != 3D  
  18.         ORDER BY 5 DESC) x  /*更正@20140613,原来为order by 4,感谢网友lmalds指正*/  
  19.  WHERE ROWNUM <= 10;  

2、寻找最多DISK_READS开销的SQL 语句

  1. –filename:top_sql_disk_reads.sql  
  2. –Identify heavy SQL (Get the SQL with heavy DISK_READS)  
  3. SET LINESIZE 190  
  4. COL sql_text FORMAT a100 WRAP
  5. SET PAGESIZE 100  
  6. SELECT *  
  7.   FROM (  SELECT sql_text,  
  8.                  sql_id,
  9.                  executions,
  10.                  disk_reads,
  11.                  buffer_gets
  12.             FROM v$sqlarea  
  13.            WHERE DECODE (executions, 0, disk_reads, disk_reads / executions) >  
  14.                     (SELECT AVG (DECODE (executions, 0, disk_reads, disk_reads / executions))  
  15.                             + STDDEV (DECODE (executions, 0, disk_reads, disk_reads / executions))
  16.                        FROM v$sqlarea)  
  17.                  AND parsing_user_id != 3D  
  18.         ORDER BY 4 DESC) x  /* 更正@20140613,原来为order by 3,谢谢网友lmalds指正*/  
  19.  WHERE ROWNUM <= 10;  

3、寻找最近30分钟导致资源过高开销的事件

  1. –filename:top_event_in_30_min.sql  
  2. –Last 30 minutes result those resources that are in high demand on your system.  
  3. SET LINESIZE 180  
  4. COL event FORMAT a60
  5. COL total_wait_time FORMAT 999999999999999999
  6.   SELECT active_session_history.event,  
  7.          SUM (  
  8.             active_session_history.wait_time
  9.             + active_session_history.time_waited)
  10.             total_wait_time
  11.     FROM v$active_session_history active_session_history  
  12.    WHERE active_session_history.sample_time BETWEEN SYSDATE – 60 / 2880  
  13.                                                 AND SYSDATE  
  14.          AND active_session_history.event IS NOT NULL  
  15. GROUP BY active_session_history.event  
  16. ORDER BY 2 DESC;  

4、查找最近30分钟内等待最多的用户

  1. –filename:top_wait_by_user.sql  
  2. –What user is waiting the most?  
  3. SET LINESIZE 180  
  4. COL event FORMAT a60
  5. COL total_wait_time FORMAT 999999999999999999
  6.   SELECT ss.sid,  
  7.          NVL (ss.username, ‘oracle’) AS username,  
  8.          SUM (ash.wait_time + ash.time_waited) total_wait_time  
  9.     FROM v$active_session_history ash, v$session ss  
  10.    WHERE ash.sample_time BETWEEN SYSDATE – 60 / 2880 AND SYSDATE AND ash.session_id = ss.sid  
  11. GROUP BY ss.sid, ss.username  
  12. ORDER BY 3 DESC;  

5、查找30分钟消耗最多资源的SQL语句

  1. –filename:top_sql_by_wait.sql  
  2. — What SQL is currently using the most resources?  
  3. SET LINESIZE 180  
  4. COL sql_text FORMAT a90 WRAP
  5. COL username FORMAT a20 WRAP
  6. SET PAGESIZE 200  
  7. SELECT *  
  8.   FROM (  SELECT sqlarea.sql_text,  
  9.                  dba_users.username,
  10.                  sqlarea.sql_id,
  11.                  SUM (active_session_history.wait_time + active_session_history.time_waited)  
  12.                     total_wait_time
  13.             FROM v$active_session_history active_session_history, v$sqlarea sqlarea, dba_users  
  14.            WHERE     active_session_history.sample_time BETWEEN SYSDATE – 60 / 2880 AND SYSDATE  
  15.                  AND active_session_history.sql_id = sqlarea.sql_id  
  16.                  AND active_session_history.user_id = dba_users.user_id  
  17.         GROUP BY active_session_history.user_id,  
  18.                  sqlarea.sql_text,
  19.                  sqlarea.sql_id,
  20.                  dba_users.username
  21.         ORDER BY 4 DESC) x  
  22.  WHERE ROWNUM <= 11;  

6、等待最多的对象

  1. –filename:top_object_by_wait.sql  
  2. –What object is currently causing the highest resource waits?  
  3. SET LINESIZE 180  
  4. COLUMN OBJECT_NAME FORMAT a30  
  5. COLUMN EVENT FORMAT a30  
  6.   SELECT dba_objects.object_name,  
  7.          dba_objects.object_type,
  8.          active_session_history.event,
  9.          SUM (active_session_history.wait_time + active_session_history.time_waited) ttl_wait_time  
  10.     FROM v$active_session_history active_session_history, dba_objects  
  11.    WHERE active_session_history.sample_time BETWEEN SYSDATE – 60 / 2880 AND SYSDATE  
  12.          AND active_session_history.current_obj# = dba_objects.object_id  
  13. GROUP BY dba_objects.object_name, dba_objects.object_type, active_session_history.event  
  14. ORDER BY 4 DESC;  

7、寻找基于指定时间范围内的历史SQL语句

  1. –注该查询受到awr快照相关参数的影响  
  2. — filename:top_sql_in_spec_time.sql  
  3. –Top SQLs Elaps time and CPU time in a given time range..  
  4. –X.ELAPSED_TIME/1000000 => From Micro second to second  
  5. –X.ELAPSED_TIME/1000000/X.EXECUTIONS_DELTA => How many times the sql ran  
  6. SET PAUSE ON  
  7. SET PAUSE ‘Press Return To Continue’  
  8. SET LINESIZE 180  
  9. COL sql_text FORMAT a80 WRAP
  10.   SELECT sql_text,  
  11.          dhst.sql_id,
  12.          ROUND (x.elapsed_time / 1000000 / x.executions_delta, 3) elapsed_time_sec,
  13.          ROUND (x.cpu_time / 1000000 / x.executions_delta, 3) cpu_time_sec,
  14.          x.elapsed_time,
  15.          x.cpu_time,
  16.          executions_delta AS exec_delta  
  17.     FROM dba_hist_sqltext dhst,  
  18.          (  SELECT dhss.sql_id sql_id,  
  19.                    SUM (dhss.cpu_time_delta) cpu_time,  
  20.                    SUM (dhss.elapsed_time_delta) elapsed_time,  
  21.                    CASE SUM (dhss.executions_delta) WHEN 0 THEN 1 ELSE SUM (dhss.executions_delta) END  
  22.                       AS executions_delta  
  23.               FROM dba_hist_sqlstat dhss  
  24.              WHERE dhss.snap_id IN  
  25.                       (SELECT snap_id  
  26.                          FROM dba_hist_snapshot  
  27.                         WHERE begin_interval_time >= TO_DATE (‘&input_start_date’, ‘YYYYMMDD HH24:MI’)  
  28.                               AND end_interval_time <= TO_DATE (‘&input_end_date’, ‘YYYYMMDD HH24:MI’))  
  29.           GROUP BY dhss.sql_id) x  
  30.    WHERE x.sql_id = dhst.sql_id  
  31. ORDER BY elapsed_time_sec DESC;  

8、寻找基于指定时间范围内及指定用户的历史SQL语句

  1. –注该查询受到awr快照相关参数的影响  
  2. –Author : Robinson  
  3. –Blog   : http://blog.csdn.net/robinson_0612  
  4. SELECT DBMS_LOB.SUBSTR (sql_text, 4000, 1) AS sql,  
  5.          ROUND (x.elapsed_time / 1000000, 2) elapsed_time_sec,
  6.          ROUND (x.cpu_time / 1000000, 2) cpu_time_sec,
  7.          x.executions_delta AS exec_num,  
  8.          ROUND ( (x.elapsed_time / 1000000) / x.executions_delta, 2) AS exec_time_per_query_sec  
  9.     FROM dba_hist_sqltext dhst,  
  10.          (  SELECT dhss.sql_id sql_id,  
  11.                    SUM (dhss.cpu_time_delta) cpu_time,  
  12.                    SUM (dhss.elapsed_time_delta) elapsed_time,  
  13.                    CASE SUM (dhss.executions_delta) WHEN 0 THEN 1 ELSE SUM (dhss.executions_delta) END  
  14.                       AS executions_delta  
  15.               –DHSS.EXECUTIONS_DELTA = No of queries execution (per hour)  
  16.               FROM dba_hist_sqlstat dhss  
  17.              WHERE dhss.snap_id IN  
  18.                       (SELECT snap_id  
  19.                          FROM dba_hist_snapshot  
  20.                         WHERE begin_interval_time >= TO_DATE (‘&input_start_date’, ‘YYYYMMDD HH24:MI’)  
  21.                               AND end_interval_time <= TO_DATE (‘&input_end_date’, ‘YYYYMMDD HH24:MI’))  
  22.                    AND dhss.parsing_schema_name LIKE UPPER (‘%&input_username%’)  
  23.           GROUP BY dhss.sql_id) x  
  24.    WHERE x.sql_id = dhst.sql_id  
  25. ORDER BY elapsed_time_sec DESC;  

9、SQL语句被执行的次数

  1. –exe_delta表明在指定时间内增长的次数  
  2. — filename: sql_exec_num.sql  
  3. — How many Times a query executed?  
  4. SET LINESIZE 180  
  5. SET VERIFY OFF  
  6.   SELECT TO_CHAR (s.begin_interval_time, ‘yyyymmdd hh24:mi:ss’),  
  7.          sql.sql_id AS sql_id,  
  8.          sql.executions_delta AS exe_delta,  
  9.          sql.executions_total
  10.     FROM dba_hist_sqlstat sql, dba_hist_snapshot s  
  11.    WHERE     sql_id = ‘&input_sql_id’  
  12.          AND s.snap_id = sql.snap_id  
  13.          AND s.begin_interval_time > TO_DATE (‘&input_start_date’, ‘YYYYMMDD HH24:MI’)  
  14.          AND s.begin_interval_time < TO_DATE (‘&input_end_date’, ‘YYYYMMDD HH24:MI’)  
  15. ORDER BY s.begin_interval_time; 
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: 小小编

为您推荐

dell R710 更换raid卡后,raid卡信息没有了,处理方案

dell R710 更换raid卡后,raid卡信息没有了,处理方案

1.将一台服务器(A)的硬盘依次拔出,按相同顺序插入另一台同样配置的服务器(B) 2.启动服务器(B) 3.按提示键盘按...
PL SQL Developer 13连接Oracle数据库并导出数据详细操作教程方法

PL SQL Developer 13连接Oracle数据库并导出数据详细操作教程方法

下载 并安装 PL SQL Developer 13,默认支持中文语言 ========================...
关于一条sql语句在mysql中是如何执行的

关于一条sql语句在mysql中是如何执行的

最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在my...
关于sql注入姿势总结(mysql)

关于sql注入姿势总结(mysql)

前言 学习了sql注入很长时间,但是仍然没有系统的了解过,这次总结一波,用作学习的资料。 从注入方法分:基于报错、基于布...
关于Oracle SQL外连接

关于Oracle SQL外连接

SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。 连接...

发表回复

返回顶部