查看: 418|回复: 5

不知道大伙有无定期检查自己数据库中硬解析SQL的情况?

[复制链接]
论坛徽章:
312
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
发表于 2021-3-31 14:39 | 显示全部楼层 |阅读模式
就是查看数据库中有多少没有使用绑定变量的写法,而引起硬解析的SQL?
找出这类SQL后,交给开发修改,以降低硬解析量。

若是,查找硬解析SQL的语句怎么写?































































我的思路:对 V$SQL.PLAN_HASH_VALUE 值做GROUP BY,从大到小排序,取前10行,处理了前10行后,再来一遍。


论坛徽章:
5
弗兰奇
日期:2019-06-14 14:49:0620周年集字徽章-20	
日期:2020-10-28 14:31:2120周年集字徽章-年	
日期:2020-10-28 14:35:0320周年集字徽章-周
日期:2020-10-28 14:51:04托尼托尼·乔巴
日期:2020-11-07 21:59:10
发表于 2021-3-31 16:31 | 显示全部楼层
本帖最后由 yueli33 于 2021-3-31 16:33 编辑

select a.*,substr(b.sql_text,1,99) sql_text
from
(select force_matching_signature,count(1) cnt,max(sql_id) sql_id
        from v$sql
        where force_matching_signature > 0
        and force_matching_signature != exact_matching_signature        and parsing_schema_name <> 'SYS'
        group by force_matching_signature
        having count(1) > 100
        order by 2
) a,v$sql b
where a.sql_id=b.sql_id;


之前看网上说force_matching_signature != exact_matching_signature
不匹配就是未使用绑定变量


历史信息在DBA_HIST_SQLSTAT里可查。

使用道具 举报

回复
论坛徽章:
312
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
 楼主| 发表于 2021-3-31 17:44 | 显示全部楼层
yueli33 发表于 2021-3-31 16:31
select a.*,substr(b.sql_text,1,99) sql_textfrom (select force_matching_signature,count(1) cnt,max(sq ...

如何理解这段过滤选项:

force_matching_signature > 0  and force_matching_signature != exact_matching_signature   

使用道具 举报

回复
论坛徽章:
5
弗兰奇
日期:2019-06-14 14:49:0620周年集字徽章-20	
日期:2020-10-28 14:31:2120周年集字徽章-年	
日期:2020-10-28 14:35:0320周年集字徽章-周
日期:2020-10-28 14:51:04托尼托尼·乔巴
日期:2020-11-07 21:59:10
发表于 2021-3-31 19:30 | 显示全部楼层
ZALBB 发表于 2021-3-31 17:44
如何理解这段过滤选项:force_matching_signature > 0  and force_matching_signature != exact_matching_s ...

参考:
《Oracle 利用FORCE_MATCHING_SIGNATURE捕获非绑定变量SQL》
https://blog.csdn.net/shiyu1157758655/article/details/78189379

不过硬解析高也有可能是其他原因。
比如开启了自适应哈希什么的。
FORCE_MATCHING_SIGNATURE只能是看未使用绑定变量的语句。

使用道具 举报

回复
论坛徽章:
192
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
发表于 2021-3-31 20:02 | 显示全部楼层
http://blog.itpub.net/267265/viewspace-744242/
WITH x1
     AS (  SELECT /*+ MATERIALIZE */  force_matching_signature, COUNT (*) cnt
             FROM gv$sql
            WHERE     parsing_schema_name = 'XXXX'
                  AND force_matching_signature <> 0
         GROUP BY force_matching_signature
           HAVING COUNT (*) >= 3)
SELECT *
  FROM v$sql
WHERE force_matching_signature IN (SELECT force_matching_signature
                                      FROM x1)

使用道具 举报

回复
论坛徽章:
5
弗兰奇
日期:2019-06-14 14:49:0620周年集字徽章-20	
日期:2020-10-28 14:31:2120周年集字徽章-年	
日期:2020-10-28 14:35:0320周年集字徽章-周
日期:2020-10-28 14:51:04托尼托尼·乔巴
日期:2020-11-07 21:59:10
发表于 2021-4-1 10:06 | 显示全部楼层
lfree 发表于 2021-3-31 20:02
http://blog.itpub.net/267265/viewspace-744242/WITH x1     AS (  SELECT /*+ MATERIALIZE */  force_mat ...

with这种临时表为什么在adg备库中也能用呢?而create temporary table临时表adg备库无法建立。是什么原理呢?能否给指点一下。谢谢!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表