golang sql绑定变量_不绑定变量SQL查询定位

在前面的文章动态SQL不绑定变量的影响中已经说明了不绑定变量SQL的负面影响,这篇文章中,我们将介绍如何查找出ORACLE数据库中的那些不绑定变量的SQL。

1. 非绑定变量的SQL语句查询

SELECT to_char(FORCE_MATCHING_SIGNATURE), COUNT (1)

FROM v$sql

WHERE FORCE_MATCHING_SIGNATURE > 0

AND FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE

GROUP BY FORCE_MATCHING_SIGNATURE

HAVING (COUNT (1) > &a) --FORCE_MATCHING_SIGNATURE的计数,20

ORDER BY 2 desc;

一般变量a可以输入20,如果查不到就说明数据库没有严重的不绑定变量SQL。

查询结果里计数值越大,说明相应SQL出现的频率越高,问题越严重。

20d5bfa1fd686290c2d0f69306599ac9.png

比如上图中第一条,FORCE_MATCHING_SIGNATURE为7688923598894398991,数量达到了16597。

2. 根据FORCE_MATCHING_SIGNATURE查看SQL

select sql_id,sql_fulltext

from v$sqlarea

where force_matching_signature = &FORCE_MATCHING_SIGNATURE;--参数在上一步查出

1ec9fce989bd0cfd4fdc9cdeb059114d.png

然后点开结果中的SQL_FULLTEXT就可以看到有问题的SQL,一般会看如下SQL,SQL内容基本都一样,只是参数不一样:

SELECT REPORT_NUMBER FROM REPORT_HEADERS R WHERE HEADER_ID = 1178851

SELECT REPORT_NUMBER FROM REPORT_HEADERS R WHERE HEADER_ID = 1178852

这就是需要优化的SQL了,需要使用绑定变量的方法来进行调用。一般这时就要进一步定位这些SQL是在java代码里,还是存储过程或者包里的。

3.1根据SQL内容在包里查找

select * from user_source

where type='PACKAGE BODY'

AND lower(text) like'%'||lower('&SQL_PART')||'%' ;

查找时SQL_PART参数可以输入“REPORT_HEADERS R”

91f3b6b48d8c7172728f4e96643b2ceb.png

3.2根据SQL内容在存储过程中查找

select * from user_source

where type='PROCEDURE'

AND lower(text) like'%'||lower('&SQL_PART')||'%' ;

3.3根据SQL内容在JAVA代码中查找

这个就直接使用java代码的搜索功能去查找了。

不绑定变量的SQL定位到以后,就可以根据具体情况进行分析优化解决了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值