****欧欧美毛片4,国产午夜精品视频,97视频在线观看免费视频,久久七国产精品

數(shù)據(jù)恢復(fù)咨詢熱線:400-666-3702??

歡迎訪問南京兆柏數(shù)據(jù)恢復(fù)公司,專業(yè)數(shù)據(jù)恢復(fù)15年

兆柏數(shù)據(jù)恢復(fù)公司

?常見問題

?當(dāng)前位置: 主頁 > 常見問題

詳解Oracle數(shù)據(jù)庫如何查找未使用綁定變量的SQL語句

瀏覽量: 次 發(fā)布日期:2023-10-15 12:38:53

詳解Oracle數(shù)據(jù)庫如何查找未使用綁定變量的SQL語句

Oracle在解析SQL語句的時候,如果在共享池中發(fā)現(xiàn)匹配的SQL語句,就可以避免掉解析的大部分開銷。在共享池中找到匹配的SQL語句所對應(yīng)的解析被稱為軟解析(soft parse)。如果沒有找到匹配的SQL語句,則必須進行硬解析(hard parse)。

硬解析不僅耗費CPU時間,在有大量會話想要同時緩存SQL語句到共享池時還會造成爭用。通過使用綁定變量,可以最小化解析的代價。

Oracle中有沒使用綁定變量對于是否需要多次解析的影響是很大的,很多時候我們都要求開發(fā)變量盡量都使用綁定變量,但畢竟是要求,有人不遵守的話,我們也沒轍,那么可以怎么去查找到這些未使用綁定變量的sql語句呢?

利用V$SQL 視圖的 FORCE_MATCHING_SIGNATURE 字段可以識別可能從綁定變量或CURSOR_SHARING獲益的SQL語句。

如果 SQL 已使用綁定變量或者 CURSOR_SHARING ,那么FORCE_MATCHING_SIGNATURE 在對其進行標(biāo)識時將給出同樣的簽名。換句話說,如果兩個SQL語句除了字面量的值之外都是相同的,它們將擁有相同的FORCE_MATCHING_SIGNATURE,這意味著如果為它們提供了綁定變量或者CURSOR_SHARING,它們就成了完全相同的語句。

所以,使用FORCE_MATCHING_SIGNATURE字段可以識別沒有使用綁定變來的SQL語句。

with force_mathces as

(select l.force_matching_signature,

max(l.sql_id || l.child_number) max_sql_child,

dense_rank() over(order by count(*) desc) ranking,

count(*) counts

from v$sql l

where l.force_matching_signature <> 0

and l.parsing_schema_name <> 'SYS'

group by l.force_matching_signature

having count(*) > 10)

select v.sql_id,

v.sql_text,

蘇州數(shù)據(jù)恢復(fù)

v.parsing_schema_name,

fm.force_matching_signature,

fm.ranking,

fm.counts

from force_mathces fm, v$sql v

where fm.max_sql_child = (v.sql_id || v.child_number)

and fm.ranking <= 50

order by fm.ranking;

1、通過執(zhí)行動態(tài)SQL語句,比較字面量和綁定參數(shù)對SQL解析的影響(注意用scott用戶)

set serveroutput on;

?

declare

v_ename emp.ename%type;

v_sal emp.sal%type;

v_sql clob;

begin

dbms_output.put_line('*********使用字面量************');

for vrt_emp in (select * from emp) loop

v_sql := 'select e.ename,e.sal from emp e where e.empno =' ||

vrt_emp.empno;

execute immediate v_sql

into v_ename, v_sql;

dbms_output.put_line(v_ename || ':' || v_sql);

end loop;

?

dbms_output.put_line('');

dbms_output.put_line('*********使用綁定變量************');

for vrt_emp in (select * from emp) loop

v_sql := 'select e.ename,e.sal from emp e where e.empno =:empno';

execute immediate v_sql

into v_ename, v_sql

using vrt_emp.empno;

dbms_output.put_line(v_ename || ':' || v_sql);

end loop;

end;

/

2、查詢v$sql視圖,比較執(zhí)行結(jié)果:

select v.sql_text, v.sql_id, v.force_matching_signature

from v$sql v

where v.sql_text like 'select e.ename,e.sal from emp e where e.empno %';

在v$sql視圖中,發(fā)現(xiàn)使用字面量的SQL語句有14條,而使用綁定變量的SQL語句只有一條。其中使用字面量的SQL語句除以了字面量值不同之外,其他部分都是相同。而FORCE_MATCHING_SIGNATURE的值是在假設(shè)該SQL語句使用綁定變量或者CURSOR_SHARING得到的,因此通過FORCE_MATCHING_SIGNATURE字段識別沒有綁定變量的SQL語句。

1、從10G開始可以通過如下方式查找未使用綁定變量的語句

select FORCE_MATCHING_SIGNATURE, count(1)

from v$sql

where FORCE_MATCHING_SIGNATURE > 0

and FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE

宿遷數(shù)據(jù)恢復(fù)

group by FORCE_MATCHING_SIGNATURE

having count(1) > &a

order by 2;

2、10G以上通過如下過程可以查找對未使用綁定變量的語句

create table shsnc.long_sql(sql_text clob, FORCE_MATCHING_SIGNATURE number,count number)

create or replace procedure query_sql is

cursor fms is select FORCE_MATCHING_SIGNATURE as fms, count(1) as count

from v$sql

where FORCE_MATCHING_SIGNATURE > 0

and FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE

group by FORCE_MATCHING_SIGNATURE

having count(1) > 100

order by 2;

v_fms number;

v_sql01 varchar2(3999);

v_sql02 varchar2(3999);

begin

for i in fms loop

v_sql01:='insert into shsnc.long_sql(FORCE_MATCHING_SIGNATURE,sql_text) select FORCE_MATCHING_SIGNATURE,sql_fulltext from (select FORCE_MATCHING_SIGNATURE,sql_fulltext from v$sql where FORCE_MATCHING_SIGNATURE='||i.fms||' and FORCE_MATCHING_SIGNATURE not in (select FORCE_MATCHING_SIGNATURE from shsnc.long_sql)) where rownum<2';

v_sql02:='update shsnc.long_sql set count='||i.count ||' where FORCE_MATCHING_SIGNATURE='||i.fms;

execute immediate v_sql01;

commit;

execute immediate v_sql02;

commit;

end loop;

end;

/

10g以后v$SQL動態(tài)性能視圖增加了FORCE_MATCHING_SIGNATURE列,其官方定義為”The signature used when the CURSOR_SHARING parameter is set to FORCE”,也就是Oracle通過將原SQL_TEXT轉(zhuǎn)換為可能的FORCE模式后計算得到的一個SIGNATURE值。

覺得有用的朋友多幫忙轉(zhuǎn)發(fā)哦!后面會分享更多devops和DBA方面的內(nèi)容,感興趣的朋友可以關(guān)注下~

相關(guān)推薦

. 達夢數(shù)據(jù)庫重啟,達夢數(shù)據(jù)庫重啟操作指南與注意事項

. 數(shù)據(jù)庫論文參考文獻,數(shù)據(jù)庫論文參考文獻綜述

. oracle11g修復(fù),Oracle 11g TNS-12545錯誤排查與修復(fù)指南

. 怎樣恢復(fù)刪除的硬盤數(shù)據(jù),詳解硬盤刪除數(shù)據(jù)恢復(fù)全攻略

. 內(nèi)存數(shù)據(jù)庫排行,揭秘行業(yè)領(lǐng)先者

. 達夢數(shù)據(jù)庫comment報錯,達夢數(shù)據(jù)庫comment錯誤解析與應(yīng)對策略

. 達夢數(shù)據(jù)庫啟動過程中會加載哪些文件,達夢數(shù)據(jù)庫啟動文件加載解析

. oracle數(shù)據(jù)庫數(shù)據(jù)恢復(fù),Oracle數(shù)據(jù)庫數(shù)據(jù)恢復(fù)策略與實戰(zhàn)指南

. sqlserver誤刪數(shù)據(jù)庫怎么恢復(fù),全面解析與實操步驟

. oracle數(shù)據(jù)文件損壞 怎么恢復(fù),全面解析與實操步驟

. 達夢數(shù)據(jù)庫dca證書含金量,國產(chǎn)數(shù)據(jù)庫領(lǐng)域職業(yè)發(fā)展的敲門磚與能力認證

. 達夢數(shù)據(jù)庫數(shù)據(jù)恢復(fù),達夢數(shù)據(jù)庫數(shù)據(jù)恢復(fù)策略與操作指南

. 達夢數(shù)據(jù)庫和mysql區(qū)別,特性對比與選擇指南

. 優(yōu)化數(shù)據(jù)庫的八種方法,高效優(yōu)化數(shù)據(jù)庫,輕松實現(xiàn)查詢加速與性能提升

. 蘋果硬盤數(shù)據(jù)恢復(fù)儀器,高效恢復(fù)解決方案詳解

. emc存儲更換硬盤,故障診斷與操作步驟詳解

. 達夢數(shù)據(jù)庫多少錢一套,一套多少錢,性能如何?

. oracle數(shù)據(jù)庫收費標(biāo)準,全面了解授權(quán)模式與費用構(gòu)成

. 國內(nèi)主流數(shù)據(jù)庫有哪些,國內(nèi)主流數(shù)據(jù)庫概覽

. sql2012還原備份的數(shù)據(jù)庫,sql2012怎么還原數(shù)據(jù)庫