暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 用sqltrpt.SQL调优不在v $ sql中的sql

askTom 2016-08-10
1246

问题描述

嗨,汤姆,

我在性能调整方面没有太多,但是由于学习,我也从用户端进行了与性能相关的查询。

为了进行调整,我已经生成了awr报告并获得了前10个查询,并制定了执行计划并生成了

@?/rdbms/admin/sqltrpt.sql; -并给出该sql_id并获得建议,但是昨天最终用户提供了查询,例如-

更新NVT_VEHICLE set v2 = nvl(: “SYS_B_0”,v2),其中车辆 _ no =: “SYS_B_1” 和公司 _ id =: “SYS_B_2”

1. Hoq获得建议,例如我有sql_id,然后传入sqltrpt.sql。
2.如何从sql_text获取sql_id,如果我将获取sql_id,那么我将从sqltrpt.sql生成相同的建议。

因为我试图从

从v $ sqlara中选择sql_id,其中sql_text如 “% 更新NVT_VEHICLE set %”;

但是没有返回行。

请帮我找出这个。

谢谢

专家解答

如果查询不在v $ sql/v $ sqlarea中,则不再缓存。如果它被AWR捕获,你可以通过查询dba_hist_sqltext找到它的SQL_ID:

select sql_id, sql_text from SYS.DBA_HIST_SQLTEXT
where  sql_text like '%UPDATE NVT_VEHICLE set%';


但是AWR只捕获了一些陈述!所以有可能它不在那里。在这种情况下,你被困住了。

如果这是一个重复的问题,你可以告诉Oracle给SQL “上色”。这确保它将在AWR中,即使它不是 “顶部” 语句。

你用DBMS_WORKLOAD_REPOSITORY.ADD_COLORED_SQL做这个:

http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_wkrpos.htm#sthref9966

您仍然需要SQL id来做到这一点!所以你需要用户一有问题就告诉你,这样你就可以从v $ sql中获得身份。或者在测试中运行,这样你就可以在那里捕获SQL_ID。

一旦你有了SQL_ID,你可以把它传递给sqltrpt脚本,让顾问做它的事情。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论