读书人

找到未使用绑定变量的SQL

发布时间: 2012-08-25 10:06:20 作者: rapoo

找出未使用绑定变量的SQL

关于使用绑定变量的好处,这里不做任何说明。

作为DBA,如何监控并找出系统中存在的大量的未使用绑定变量的SQL呢?利用TOM大师写的一段脚本,我们可以这样来找。

?

1.测试环境:10G R2,Windows XP SP2

?

2.登陆Oracle,先刷新下共享池。清除出共享池内的SQL。

sys@ORCL>conn scott/tiger已连接。scott@ORCL>update t1 set sql_text_wo_constants = remove_constants(sql_text);已更新159行。scott@ORCL>select sql_text_wo_constants, count(*)  2    from t1  3   group by sql_text_wo_constants  4  having count(*) > 5  5   order by 2;SQL_TEXT_WO_CONSTANTS---------------------------------------------------------------------------------------  COUNT(*)----------INSERT INTO T@ VALUES (@)         9scott@ORCL>col SQL_TEXT_WO_CONSTANTS format a30;scott@ORCL>/SQL_TEXT_WO_CONSTANTS            COUNT(*)------------------------------ ----------INSERT INTO T@ VALUES (@)               9scott@ORCL>

?

?

7.问题SQL被找出来了!可见insert into?... values....(刚才发出的那些恶劣的sql),被反复拼凑后共执行了9次。每次都是不一样的SQL。共享池就这样被消耗了。这些拼出来的SQL将会很快被清除共享池,接下来再次运行的时候还要被硬解析。性能消耗之大。

关于硬解析在SQL整个执行阶段产生多少开销?以后的文章中,小弟将举一个现实的例子来证明这个开销会有多大。

?

读书人网 >SQL Server

热点推荐