如何查看sql sql执行计划划的历史变更

问题:如何知道一个session都执行过哪些SQL语句(查看当前比较容易,历史的呢怎么复原sql的执行场景——事务关系、执行序列、单SQL还是存储过程)

#对v$sqltext、v$sqlarea查看的是shared pool中的SQL,其时间索引是其解析历史因为共享的问题这个查询可能并不能完整地反映出执行的历史。

#v$sqlstats反应的是实例启动起来的sql执行统计sql语句本身比v$sqltext/area完整,因为后者有可能失效换出缓存

#v$active_session_history 这个表只是个取样数据,按秒进行只有在那一秒采样点处于on cpu或非idle等待的session统计在内。所以可能会不全囿些执行很短的SQL会忽略。这个视图无法还原完整的session历史

#v$sqlarea中有执行过的SQL语句,但并无到session的关联信息v$session中只关联了当前的sql,所以也不行

从v$sqlstat鈳以查看到数据库启动起来的所有SQL信息,但是没有时间顺序关系、没有执行用户信息只有执行次数与资源统计。

查看v$sqlarea只能查看粗略的历史因为很多SQL是共享的。

查看ASH也不全因为这是采样数据,测试的时候基本没有把SQL查询出来

查看V$SQLSTATS能看到所有执行过的sql,以及其执行统计但是没有时序、没有用户信息。

查看TRACE应该是最完整的但需要在执行SQL前开启。

查看logminer不能查看select语句而且默认的系统没有开启supplementing log,所以能查看的内容有限

或许还有审计的方法可用,我没测试每种方法都有各自的缺陷,看来很难有一种完备的查看SQL执行历史的方法

}

如果查看当前数据库运行的SQL

对某個sql查看其查询计划

这样在当前执行的目录下就会产生一个.out文件

}

我要回帖

更多关于 sql执行计划 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信