基于dba_hist_sqlstat查看sql语句的性能历史

简介: 在生产环境中,如果系统已经稳定,调优的空间就会越来越小,但是不代表没有调优的余地,可能工作的重心就会更加求稳,sql调优就是一项不间断的工作,很多工作还是需要前瞻的,如果等到问题严重的时候再紧急处理,提前的分析这些潜在问题就会让你不会总是心跳加快,两手冒汗。
在生产环境中,如果系统已经稳定,调优的空间就会越来越小,但是不代表没有调优的余地,可能工作的重心就会更加求稳,sql调优就是一项不间断的工作,很多工作还是需要前瞻的,如果等到问题严重的时候再紧急处理,提前的分析这些潜在问题就会让你不会总是心跳加快,两手冒汗。
dba_hist_sqlstat是一个宝库,很多的sql执行统计信息都会在其中,可以基于这个数据字典分析很多的特性,比如查看某条sql语句的性能历史,分析执行计划是否稳定等等,这些功能在分析sql语句的时候是相当实用的,毕竟一个awr报告中的sql问题可能只是一个表象,如果结合历史来看就会分析出更多的因素来。
这个脚本在>中提到,而且可以通过网站找到相关的脚本内容,如果明白了思路,大家想自己定制一下也不错。
大多数的脚本可以通过链接找到http://kerryosborne.oracle-guy.com/2009/06/oracle-11g-adaptive-cursor-sharing-acs/
分析某一条sql语句的性能历史脚本
set lines 155
col execs for 999,999,999
col avg_etime for 999,999.999
col avg_lio for 999,999,999.9
col begin_interval_time for a30
col node for 99999
break on plan_hash_value on startup_time skip 1
select ss.snap_id, ss.instance_number node, begin_interval_time, sql_id, plan_hash_value,
nvl(executions_delta,0) execs,
(elapsed_time_delta/decode(nvl(executions_delta,0),0,1,executions_delta))/1000000 avg_etime,
(buffer_gets_delta/decode(nvl(buffer_gets_delta,0),0,1,executions_delta)) avg_lio
from DBA_HIST_SQLSTAT S, DBA_HIST_SNAPSHOT SS
where sql_id = nvl('&sql_id','4dqs2k5tynk61')
and ss.snap_id = S.snap_id
and ss.instance_number = S.instance_number
and executions_delta > 0
order by 1, 2, 3
/

脚本运行情况如下:
   SNAP_ID   NODE BEGIN_INTERVAL_TIME            SQL_ID        PLAN_HASH_VALUE        EXECS    AVG_ETIME        AVG_LIO
---------- ------ ------------------------------ ------------- --------------- ------------ ------------ --------------
     38878      1 31-MAR-15 05.20.06.216 PM      0xtpfz5pj4prb      1880269335          104        5.702      327,280.7
     38879      1 31-MAR-15 05.30.06.754 PM      0xtpfz5pj4prb                          119        4.926      326,385.0
     38880      1 31-MAR-15 05.40.07.622 PM      0xtpfz5pj4prb                          125        4.713      328,324.9
     38881      1 31-MAR-15 05.50.08.418 PM      0xtpfz5pj4prb                            6        6.461      361,164.7
     38884      1 31-MAR-15 06.20.09.984 PM      0xtpfz5pj4prb                           21        5.324      321,935.6
     38885      1 31-MAR-15 06.30.10.720 PM      0xtpfz5pj4prb                          107        5.539      325,886.4
     38886      1 31-MAR-15 06.40.11.283 PM      0xtpfz5pj4prb                           64        5.432      329,591.9
     38887      1 31-MAR-15 06.50.11.900 PM      0xtpfz5pj4prb                          110        5.397      326,757.1
     38888      1 31-MAR-15 07.00.12.457 PM      0xtpfz5pj4prb                          103        5.792      329,023.0
     38889      1 31-MAR-15 07.10.13.355 PM      0xtpfz5pj4prb                          126        4.682      328,220.6
     38890      1 31-MAR-15 07.20.13.848 PM      0xtpfz5pj4prb                          128        4.601      326,872.7
     38891      1 31-MAR-15 07.30.14.326 PM      0xtpfz5pj4prb      1880269355          131        4.508      328,507.7
     38892      1 31-MAR-15 07.40.14.905 PM      0xtpfz5pj4prb                          129        4.571      326,210.3
     38893      1 31-MAR-15 07.50.15.372 PM      0xtpfz5pj4prb                          132        4.468      327,796.7
     38894      1 31-MAR-15 08.00.15.889 PM      0xtpfz5pj4prb                          113        5.176      328,226.4
     38895      1 31-MAR-15 08.10.16.442 PM      0xtpfz5pj4prb                           63        5.194      332,234.3
     38897      1 31-MAR-15 08.30.17.385 PM      0xtpfz5pj4prb                           37        6.175      326,039.1
     38898      1 31-MAR-15 08.40.17.922 PM      0xtpfz5pj4prb                           76        7.755      327,436.6
     38899      1 31-MAR-15 08.50.18.469 PM      0xtpfz5pj4prb                          113        5.245      327,478.5
     38900      1 31-MAR-15 09.00.18.950 PM      0xtpfz5pj4prb                          127        4.614      326,215.6
     38901      1 31-MAR-15 09.10.19.458 PM      0xtpfz5pj4prb                           74        4.316      332,214.9


如果某些指标突然发生了重大的变化,可以通过性能历史很清晰的看到,对于plan_hash_value做了断句处理,如果发生了执行计划的改变,就会很清楚什么时间点有了变动,哪些方面的变化等等。

目录
相关文章
|
5月前
|
SQL 数据库 开发者
MSSQL性能调优实战技巧:索引优化、SQL语句微调与并发控制策略
在Microsoft SQL Server(MSSQL)的管理与优化中,性能调优是一项复杂但至关重要的任务
|
2月前
|
SQL 存储 关系型数据库
如何巧用索引优化SQL语句性能?
本文从索引角度探讨了如何优化MySQL中的SQL语句性能。首先介绍了如何通过查看执行时间和执行计划定位慢SQL,并详细解析了EXPLAIN命令的各个字段含义。接着讲解了索引优化的关键点,包括聚簇索引、索引覆盖、联合索引及最左前缀原则等。最后,通过具体示例展示了索引如何提升查询速度,并提供了三层B+树的存储容量计算方法。通过这些技巧,可以帮助开发者有效提升数据库查询效率。
168 2
|
1月前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
97 10
|
1月前
|
SQL 关系型数据库 MySQL
惊呆:where 1=1 可能严重影响性能,差了10多倍,快去排查你的 sql
老架构师尼恩在读者交流群中分享了关于MySQL中“where 1=1”条件的性能影响及其解决方案。该条件在动态SQL中常用,但可能在无真实条件时导致全表扫描,严重影响性能。尼恩建议通过其他条件或SQL子句命中索引,或使用MyBatis的`<where>`标签来避免性能问题。他还提供了详细的执行计划分析和优化建议,帮助大家在面试中展示深厚的技术功底,赢得面试官的青睐。更多内容可参考《尼恩Java面试宝典PDF》。
|
2月前
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
2月前
|
SQL 关系型数据库 PostgreSQL
遇到SQL 子查询性能很差?其实可以这样优化
遇到SQL 子查询性能很差?其实可以这样优化
110 2
|
2月前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
63 1
|
2月前
|
SQL 存储 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
2月前
|
SQL 数据处理 数据库
SQL语句优化与查询结果优化:提升数据库性能的实战技巧
在数据库管理和应用中,SQL语句的编写和查询结果的优化是提升数据库性能的关键环节
|
2月前
|
SQL 存储 数据库
慢SQL对数据库写入性能的影响及优化策略
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生不利影响