在缺乏的可视化工具来监控数据库性能的情形下,常用的脚本就派上用场了,下面提供几个关于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;
  16. 转:http://blog.csdn.net/leshami/article/details/8904804

Oracle 性能相关常用脚本(SQL)的更多相关文章

  1. SqlServer和Oracle中一些常用的sql语句9 SQL优化

    --SQL查询优化 尽量避免使用or,not,distinct运算符,简化连接条件 /*Or运算符*/ use db_business go select * from 仓库 where 城市='北京 ...

  2. SqlServer和Oracle中一些常用的sql语句10 特殊应用

    --482, ORACLE / SQL SERVER --订购数量超过平均值的书籍 WITH Orders_Book AS ( SELECT Book_Name, SUM(Qty) Book_Qty ...

  3. SqlServer和Oracle中一些常用的sql语句3 行列转换

    --217, SQL SERVER SELECT Cust_Name , MAX(CASE WHEN Order_Date ='2009-08-01' THEN AR END) "2009- ...

  4. SqlServer和Oracle中一些常用的sql语句5 流程控制语句

    --在sql语句中 begin...end 用来设定一个程序块 相关于c#中的{} declare @yz real,@w int --声明变量 set @w=120 --为变量赋值 if @w< ...

  5. 常用脚本--SQL Server获取OS日志

    --=================================================== --SQL Server获取OS日志: ), ), ), ) select @start_d ...

  6. SqlServer和Oracle中一些常用的sql语句6 存储过程

    --不带参数的存储过程 CREATE procedure proc_sql1 as begin declare @i int set @i=0 while @i<26 begin print c ...

  7. SqlServer和Oracle中一些常用的sql语句7 游标

    declare db_cursor4 scroll cursor for select * from 供应商 --声明游标 open db_cursor4 --打开游标 fetch first fro ...

  8. SqlServer和Oracle中一些常用的sql语句8 触发器和事务

    --创建和执行事后触发器 --更新仓库备份表中记录时自动创建数据表且插入三条记录 create trigger db_trigger1 on 仓库备份 for update as begin if E ...

  9. SqlServer和Oracle中一些常用的sql语句4 局部/全局变量

    --把wh1仓库号中姓名含有"平"字的职工工资在原来的基础上加288 update 职工备份 set 工资=工资+288 where 仓库号='wh1' and 姓名 like ' ...

随机推荐

  1. 妙味课堂——HTML+CSS(第四课)(一)

    这一课学的东西真是太多了,还不赶快记下来,留待以后慢慢回味! 首先我们回顾一下inline-block的特性: 使块元素在一行显示 使内嵌支持宽高 换行被解析了(问题) 不设置宽度的时候,宽度由内容撑 ...

  2. 二分图点染色 BestCoder 1st Anniversary($) 1004 Bipartite Graph

    题目传送门 /* 二分图点染色:这题就是将点分成两个集合就可以了,点染色用dfs做, 剩下的点放到点少的集合里去 官方解答:首先二分图可以分成两类点X和Y, 完全二分图的边数就是|X|*|Y|.我们的 ...

  3. iOS 开发--转场动画

    "用过格瓦拉电影,或者其他app可能都知道,一种点击按钮用放大效果实现转场的动画现在很流行,效果大致如下:" 本文主讲SWIFT版,OC版在后面会留下Demo下载 在iOS中,在同 ...

  4. 移动设备中导入gdb调试工具

    (1)概述 接ADB调试桥安装(方式一),ADB调试桥安装好了后一般的移动设备内都不含有gdb工具, 要想使用gdb工具可以借助adb的push参数进行上传. gdb分为gdb客户端和服务端,文件可以 ...

  5. Data Flow ->> Pivot

    这个组件和SQL Server的Pivot基本就是一回事.不过我观察到SSIS的Pivot只支持SUM这种聚合类型,并没有找到哪个选择可以设置聚合类型,而T-SQL语法的Pivot则支持多种聚合类型, ...

  6. JSP列表形式显示数据库中的数据 OracleCachedRowSet 实例

    现在数据库中有一张用户表,希望用户在jsp页面中输入用户名和密码以及 用户类型,在servlet中插入数据库后,在另一个jsp页面中把数据库中所有的用户名和类型都以列表的形式列出来    可以用Ora ...

  7. 《Java编程那点事儿》读书笔记(六)——异常处理

    1.抛出异常:throw 异常对象; 下面的代码是一个进制转换代码,可以转换为2进制和8进制,如果输入其他参数,则抛出异常. public static String transform(int va ...

  8. 使用git建立本地仓储管理代码【转】

    转自:http://blog.csdn.net/airk000/article/details/7738231 Git是Linus大神的代码管理工具,简直说是开发者的超级福音,而作为屌丝的个人开发者, ...

  9. Oracle —— 表结构相关的SQL

    1.表基本信息(Table) select * from user_tables t, user_tab_comments c where c.table_name = t.table_name an ...

  10. Eclipse下运行Maven项目提示缺少maven-resources-plugin:2.4.3

    将一个手动创建的Maven项目(命令行下可正常运行)导入到Eclipse中,运行时提示这样的错误信息:[ERROR] Plugin org.apache.maven.plugins:maven-res ...