一个执行计划异常变更的案例 - 外传之SQL AWR

简介: 之前的几篇文章: 《一个执行计划异常变更的案例 - 前传》 《一个执行计划异常变更的案例 - 外传之绑定变量窥探》 《一个执行计划异常变更的案例 - 外传之查看绑定变量值的几种方法》 ...

之前的几篇文章:
《一个执行计划异常变更的案例 - 前传》
《一个执行计划异常变更的案例 - 外传之绑定变量窥探》
《一个执行计划异常变更的案例 - 外传之查看绑定变量值的几种方法》
《一个执行计划异常变更的案例 - 外传之rolling invalidation》
《一个执行计划异常变更的案例 - 外传之聚簇因子(Clustering Factor)》
《一个执行计划异常变更的案例 - 外传之查询执行计划的几种方法》
《一个执行计划异常变更的案例 - 外传之AWR》
《一个执行计划异常变更的案例 - 外传之ASH》

《一个执行计划异常变更的案例 - 外传之查询执行计划的几种方法》曾介绍过一些常用的查看执行计划的方法,今儿再说说如何通过AWR查看执行计划。

创建SQL AWR的前提是SQL要被采集至AWR中,才能使用awrsqrpt.sql脚本利用sql_id创建SQL AWR报告,创建过程和AWR类似,需要先选择报告格式、实例序号、创建的天数、快照起始和结束ID,
这里写图片描述

这里写图片描述

这里写图片描述

最重要的一步就是输入sql_id,其中sql_id可以从AWR报告,或者dba_hist_sqltext等视图中获取。
这里写图片描述

当前路径下就会产生这份SQL AWR报告。
这里写图片描述

SQL AWR报告中会有一些数据库和SQL基本信息,
这里写图片描述

针对SQL,包含一些基本的统计信息,
这里写图片描述
补充:这篇文章《How to get execution statistics and history for a SQL (文档 ID 1371778.1)》介绍了另外一种从内存或AWR查询SQL执行统计信息的方法。

还会包含执行计划,
这里写图片描述

这里要说的是我在测试的过程中,曾经想执行一个普通的SQL,然后能创建出SQL AWR报告,却碰见了一个问题:该SQL未被AWR捕获,执行awrsqrpt.sql脚本输入sql_id会提示未找到。

解决方法:
方法1:
修改AWR采集默认的topnsql参数,默认值是DEFAULT,可以改为1000或MAXIMUM,用于测试,生产环境采集越多,消耗的系统资源越大,需要权衡。
参考《How to Control the Set of Top SQLs Captured During AWR Snapshot Generation (文档 ID 554831.1)》

It is possible to set the value for this setting to a very high number to capture the complete set of SQL in the cursor cache. Since the TOPNSQL setting affects the number of Top SQL to flush for each SQL criteria (Elapsed Time, CPU Time, Parse Calls, Shareable Memory, and Version Count) this may lead to space and performance issues since there will be more data to collect and store. The value for this setting is not affected by the statistics/flush level and will override the system default behavior for the AWR SQL collection.

exec dbms_workload_repository.modify_snapshot_settings(topnsql => '参数值');

此处参数可以设置为整数或字符型两种。
(a) 设置为整型,则代表刷新SQL至AWR的top条数,最小值是30,最大值时50000,空值表示使用当前参数值。
(b) 设置为字符型,
DEFAULT-若statistics参数值是TYPICAL,则选择前30条SQL,若statistics参数值是ALL,则选择前100条SQL。
MAXIMUM-捕获cursor cache中所有SQL。
N-等同于(a)的设置。
这里写图片描述

方法2:还可以使用add_colored_sql将指定SQL采集至AWR中,

采集sql_id为fv6c79ub89g75的SQL,
exec dbms_workload_repository.add_colored_sql('fv6c79ub89g75');
查询执行手工采集的SQL,
select * from sys.wrm$_colored_sql;
删除采集到的sql_id为fv6c79ub89g75的SQL,
exec dbms_workload_repository.remove_colored_sql('fv6c79ub89g75');

方法3:
确保设置了statistics_level参数值为ALL或TYPICAL。
control_management_pack_access参数值为DIAGNOSTIC+TUNING。

方法4:
手工创建快照时设置flush_level参数为ALL,

exec dbms_workload_repository.create_snapshot(flush_level=>'ALL');

我用的11.2.0.4的库,其中方法三是前提,使用方法一、二和四,均可以使用awrsqrpt.sql脚本创建SQL AWR,只是还是有一个问题未解决,就是SQL执行计划未被捕获,提示的是No data exists for this section of the report.,如果局部出现这个错误,属于正常现象,表示因为未达到标准,所以未被采集。
这里写图片描述
由于该SQL只执行了一次,可能并未是TOP N的SQL,通过上面的方法可以采集SQL,却尚未找出执行计划未被采集的条件和方法,如果有朋友了解或使用过,还请来指点迷经,谢谢。

总结:
使用awrsqrpt.sql可以来创建SQL AWR,查看SQL执行的统计信息、执行计划等,但前提是要被AWR采集,介绍了几种手工采集SQL至AWR的方法。
尚未解决的问题就是如何采集指定的执行计划。

目录
相关文章
|
6月前
|
SQL 数据库 数据安全/隐私保护
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
|
8月前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(07) 她气鼓鼓递来一条SQL | 怎么看执行计划、SQL怎么优化?
在日常研发工作当中,系统性能优化,从大的方面来看主要涉及基础平台优化、业务系统性能优化、数据库优化。面对数据库优化,除了DBA在集群性能、服务器调优需要投入精力,我们研发需要负责业务SQL执行优化。当业务数据量达到一定规模后,SQL执行效率可能就会出现瓶颈,影响系统业务响应。掌握如何判断SQL执行慢、以及如何分析SQL执行计划、优化SQL的技能,在工作中解决SQL性能问题显得非常关键。
|
5月前
|
存储 SQL 数据库连接
C#程序调用Sql Server存储过程异常处理:调用存储过程后不返回、不抛异常的解决方案
本文分析了C#程序操作Sql Server数据库时偶发的不返回、不抛异常问题,并提出了解决思路。首先解析了一个执行存储过程的函数`ExecuteProcedure`,其功能是调用存储过程并返回影响行数。针对代码执行被阻塞但无异常的情况,文章总结了可能原因,如死锁、无限循环或网络问题等。随后提供了多种解决方案:1) 增加日志定位问题;2) 使用异步操作提升响应性;3) 设置超时机制避免阻塞;4) 利用线程池分离主线程;5) 通过信号量同步线程;6) 监控数据库连接状态确保可用性。这些方法可有效应对数据库操作中的潜在问题,保障程序稳定性。
390 11
|
6月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
7月前
|
SQL
【YashanDB知识库】使用leading hint调整SQL执行计划后报错YAS-04522 invalid hint leading
【YashanDB知识库】使用leading hint调整SQL执行计划后报错YAS-04522 invalid hint leading
【YashanDB知识库】使用leading hint调整SQL执行计划后报错YAS-04522 invalid hint leading
|
8月前
|
SQL 数据库
数据库数据恢复—SQL Server报错“错误 823”的数据恢复案例
SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”,附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份,备份时间太久,或者其他原因导致备份不可用,那么就需要通过专业手段对数据库进行数据恢复。
|
8月前
|
SQL
【YashanDB 知识库】使用 leading hint 调整 SQL 执行计划后报错 YAS-04522 invalid hint leading
在 YashanDB 的所有版本中,使用 leading hint 调整 SQL 执行计划时可能出现“YAS-04522 invalid hint leading”错误,导致 SQL 无法正常执行。原因是 YashanDB 优化器的 Bug。解决方法为避免使用 leading hint。可通过创建测试表 a、b、c 并执行特定 SQL 语句来验证问题是否存在。
|
7月前
|
SQL 存储 关系型数据库
【YashanDB知识库】如何从内存中获取SQL语句的执行计划
【YashanDB知识库】如何从内存中获取SQL语句的执行计划
|
7月前
|
SQL
【YashanDB知识库】过期统计信息导致SQL执行计划变差
【YashanDB知识库】过期统计信息导致SQL执行计划变差
|
7月前
|
SQL
【YashanDB知识库】收集分区表统计信息采样率小于1导致SQL执行计划走偏
【YashanDB知识库】收集分区表统计信息采样率小于1导致SQL执行计划走偏

热门文章

最新文章