sql查找未使用綁定變量的語句

本篇內(nèi)容主要講解“sql查找未使用綁定變量的語句”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“sql查找未使用綁定變量的語句”吧!

10年積累的成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有固始免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

一、查找方法:

從ORACLE10G開始,V$SQL視圖中增加列FORCE_MATCHING_SIGNATURESignature used when the CURSOR_SHARING parameter is set to FORCE;(當(dāng)CURSOR_SHARING參數(shù)設(shè)置成FORCE時(shí),產(chǎn)生的執(zhí)行計(jì)劃是一樣的)

測(cè)試1:cursor_sharing值為EXACT

SQL>  show parameter cursor_sharing;

 

NAME                           TYPE           VALUE

------------------------------------ ----------- ---------------------

cursor_sharing                    string           EXACT

SQL>SELECT /*john*/* from bas.john  where name='曹定芳';

 

SQL>SELECT /*john*/* from bas.john  where name='張杰雄';

    

SQL>SELECT /*john*/* from bas.john  where name='練為斌';

select sql_text,FORCE_MATCHING_SIGNATURE,EXACT_MATCHING_SIGNATURE from v$sql twhere sql_text like'%john%';

 

SQL_TEXT                                              FORCE_MATCHING_SIGNATURE     EXACT_MATCHING_SIGNATURE    

----------------------------------------------------   ---------------------      -----------------------------

SELECT /*john*/* from bas.john  where name='曹定芳'    1.58728914732591E19         8.65016113461197E18

SELECT /*john*/* from bas.john  where name='張杰雄'    1.58728914732591E19         1.55664749687513E19

SELECT /*john*/* from bas.john  where name='練為斌'    1.58728914732591E19         6.34382341893161E18        

測(cè)試1說明:當(dāng)name值不一樣的時(shí)候FORCE_MATCHING_SIGNATURE的值相同,而EXACT_MATCHING_SIGNATURE值不同,說明在cursor_sharing=force時(shí),執(zhí)行計(jì)劃可共用;cursor_sharing=exact時(shí),執(zhí)行計(jì)劃不可共用;我們使用綁定變量后,同樣也可以達(dá)到執(zhí)行計(jì)劃共用的效果;

測(cè)試2:cursor_sharing值為FORCE

1、執(zhí)行語句:alter system set cursor_sharing=force;

SQL> alter system set cursor_sharing=force;

 

System altered.

 

SQL> show parameter cursor_sharing;

 

NAME                           TYPE          VALUE

---------------------------       ---------    -----------

cursor_sharing                 string          FORCE

 

SQL> alter system flush shared_pool;

 

System altered.

2、同樣執(zhí)行三條查詢語句

SQL>SELECT /*john*/* from bas.john  where name='曹定芳';

 

SQL>SELECT /*john*/* from bas.john  where name='張杰雄';

 

SQL>SELECT /*john*/* from bas.john  where name='練為斌';

3、查找V$SQL的語句情況

select sql_text,FORCE_MATCHING_SIGNATURE,EXACT_MATCHING_SIGNATURE from v$sql t where sql_text like '%john%';

SQL_TEXT                                              FORCE_MATCHING_SIGNATURE     EXACT_MATCHING_SIGNATURE    

----------------------------------------------------   ---------------------      -----------------------------

SELECT /*john*/* from bas.john  where name=:"SYS_B_0"    1.58728914732591E19         1.58728914732591E19      

測(cè)試2說明:當(dāng)我們把cursor_sharing設(shè)置為force后,發(fā)現(xiàn)語句執(zhí)行計(jì)劃共用了,并且自動(dòng)使用綁定變量(此時(shí)v$sql視圖中只查詢到一條與之相關(guān)的語句)。

測(cè)試3、cursor_sharing值為EXACT,但使用綁定變量

1、執(zhí)行語句:alter system set cursor_sharing=EXACT;

SQL> alter system set cursor_sharing=force;

 

System altered.

 

SQL> show parameter cursor_sharing;

 

NAME                           TYPE          VALUE

---------------------------       ---------    -----------

cursor_sharing                 string          EXACT

 

SQL> alter system flush shared_pool;

 

System altered.

2、使用綁定變量查詢

SQL>SELECT /*john*/* from bas.john  where name=:a;    

3、查找V$SQL的語句情況

select sql_text,FORCE_MATCHING_SIGNATURE,EXACT_MATCHING_SIGNATURE from v$sql twhere sql_text like'%john%';

 

SQL_TEXT                                              FORCE_MATCHING_SIGNATURE     EXACT_MATCHING_SIGNATURE    

----------------------------------------------------   ---------------------      -----------------------------

SELECT /*john*/* from bas.john  where name=:a           1.4513622515145E19        1.4513622515145E19

測(cè)試3總結(jié):當(dāng)我們把cursor_sharing設(shè)置為EXACT后,并通過綁定變量查詢,發(fā)現(xiàn)語句執(zhí)行計(jì)劃共用了;

二、解決方法

通過以上測(cè)試已經(jīng)了解:如果V$SQL里面的FORCE_MATCHING_SIGNATURE值一樣的SQL語句,那么就可以通過綁定變量來進(jìn)行相應(yīng)的優(yōu)化了。

select to_char(FORCE_MATCHING_SIGNATURE) as FORCE_MATCHING_SIGNATURE, count(1) as counts

from v$sql

where FORCE_MATCHING_SIGNATURE>0 and FORCE_MATCHING_SIGNATURE <> EXACT_MATCHING_SIGNATURE

group by FORCE_MATCHING_SIGNATURE

having count(1) > &a

order by 2 desc;

到此,相信大家對(duì)“sql查找未使用綁定變量的語句”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

當(dāng)前文章:sql查找未使用綁定變量的語句
網(wǎng)頁鏈接:http://muchs.cn/article46/iioghg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站策劃、電子商務(wù)軟件開發(fā)、品牌網(wǎng)站制作、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)