查找没有使用绑定变量SQL语句

select * from v$latchname where name like 'library cache%'
在分析系统性能时,如果看到有library cache这样的Latch争用,就可以断定是共享池中出现了问题,这种问题基本上是由SQL语句导致的,比如没有绑定变量或者一些存储过程被反复分析。

SQL> select * from v$latchname where name like 'library cache%';

LATCH# NAME
---------- ----------------------------------------------------------------
157 library cache
158 library cache pin
159 library cache pin allocation
160 library cache load lock


首先创建一个表,用于存放整理过的数据:
create table t1 as select sql_text,hash_value from v$sqlarea;
alter table t1 add sql_text_wo_constants varchar2(4000);

创建函数remove_constants:
create or replace function
remove_constants( p_query in varchar2 ) return varchar2
as
l_query long;
l_char varchar2(10);
l_in_quotes boolean default FALSE;
begin
for i in 1 .. length( p_query )
loop
l_char := substr(p_query,i,1);
if ( l_char = '''' and l_in_quotes )
then
l_in_quotes := FALSE;
elsif ( l_char = '''' and NOT l_in_quotes )
then
l_in_quotes := TRUE;
l_query := l_query || '''#';
end if;
if ( NOT l_in_quotes ) then
l_query := l_query || l_char;
end if;
end loop;
l_query := translate( l_query, '0123456789', '@@@@@@@@@@' );
for i in 0 .. 8 loop
l_query := replace( l_query, lpad('@',10-i,'@'), '@' );
l_query := replace( l_query, lpad(' ',10-i,' '), ' ' );
end loop;
return upper(l_query);
end;
/


将v$sql视图中的数据用remove_constants处理后,更新到t1表中:
update t1 set sql_text_wo_constants = remove_constants(sql_text);

查出除了谓词条件不同的SQL语句和它们的执行次数,在这里是查询SQL没有被重用超过100次的SQL语句:
select sql_text_wo_constants, count(*) from t1 group by sql_text_wo_ constants having count(*) > 100 order by 2
/

select sql_text_wo_constants, count(*)
from t1
group by sql_text_wo_constants
having count(*) > 100

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22934571/viewspace-1047296/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22934571/viewspace-1047296/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值