91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么理解v$sql的exact_matching_signature與force_matching_signature.txt

發布時間:2021-11-05 10:41:31 來源:億速云 閱讀:120 作者:柒染 欄目:建站服務器

本篇文章為大家展示了怎么理解v$sql的exact_matching_signature與force_matching_signature.txt,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

[20120918]理解v$sql的exact_matching_signature與force_matching_signature.txt
    理解v$sql的exact_matching_signature與force_matching_signature,對于使用sql profile以及SPM有重要意義,自己對于這個一直沒有很好的理解,
今天做一個測試看看,可能不全面^_^.
SQL> select * from v$version ;
BANNER


Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production


1.建立測試例子:
create table t as  select rownum id1,trunc((rownum-1)/10)+1 id2,'test' name from dual connect by level<=100;
create index  i_t_id1 on t(id1);
alter system flush shared_pool;
select /*+ findme */ name from t where id1=42;
select /*+ findme1 */ name from t where id1=42;
select /*+ findme */  Name from t where id1=42;
SELECT /*+ findme */ nAme FROM t WHERE id1 = 42;
SELECT /*+ Findme */ nAme FROM T WHERE id1 = 42 ;
SELECT /*+ Findme test */ nAme FROM T WHERE id1 = 42 ;
SELECT /*+ full(t) Findme */ nAme FROM T WHERE id1 = 42 ;
SELECT /*+ index(t) Findme */ nAme FROM T WHERE id1 = 42 ;
column format r 99
column sql_text format a60
column force_matching_signature format 99999999999999999999
column exact_matching_signature format 99999999999999999999
select rownum r,x.* from (
select sql_id,plan_hash_value,sql_text,exact_matching_signature,force_matching_signature
from v$sql where lower(sql_text) like '%/*%findme%' and sql_text not like '%v$sql%' order by exact_matching_signature) x;
  R SQL_ID        PLAN_HASH_VALUE SQL_TEXT                                                     EXACT_MATCHING_SIGNATURE FORCE_MATCHING_SIGNATURE


  1 0m8m91zz80rvh      1183254286 SELECT /*+ index(t) Findme */ nAme FROM T WHERE id1 = 42          1611223796141114091     11078870919385499790
  2 f7aadcsrf2kkp      1601196873 SELECT /*+ full(t) Findme */ nAme FROM T WHERE id1 = 42           2823236535463672246     17243933052976400209
  3 dhfmwm002g4z4      1183254286 SELECT /*+ Findme */ nAme FROM T WHERE id1 = 42                   4375557158775460903       698688741679991361
  4 85t7vsqqgjpst      1183254286 select /*+ findme */ name from t where id1=42                     4375557158775460903       698688741679991361
  5 5bcck0z12q1g6      1183254286 SELECT /*+ findme */ nAme FROM t WHERE id1 = 42                   4375557158775460903       698688741679991361
  6 7vbndspk1kt83      1183254286 select /*+ findme */  Name from t where id1=42                    4375557158775460903       698688741679991361
  7 2d7cgsth617gy      1183254286 SELECT /*+ Findme test */ nAme FROM T WHERE id1 = 42              6656879127321462824      2920394029241435021
  8 apv57y4bk2uqv      1183254286 select /*+ findme1 */ name from t where id1=42                   14445306118291341866     11192650436549747287
8 rows selected.
-- 仔細觀察,可以發現:
1.EXACT_MATCHING_SIGNATURE 一樣的,比如3,4,5,6 EXACT_MATCHING_SIGNATURE=4375557158775460903,其對應的FORCE_MATCHING_SIGNATURE也一樣(698688741679991361).
2.如果注解僅僅是大小寫的問題,其EXACT_MATCHING_SIGNATURE也是一樣的,其他空格大小寫也不受影響.
3.如果有注解不同,其EXACT_MATCHING_SIGNATURE就不同了.
我的感覺就是把語句換成大寫,注解部分也是換成大寫,去除多余的空格等字符,算出一個東西.
這個東西很容易聯想oracle的一個參數cursor_sharing.
exect=>表示精確匹配
force=>估計就是綁定以后匹配的.


alter system flush shared_pool;
select /*+ findme */ name from t where id1= 42;
select /*+ Findme */ name from t where id1= 43;
SQL> @a
  R SQL_ID        PLAN_HASH_VALUE SQL_TEXT                                                     EXACT_MATCHING_SIGNATURE FORCE_MATCHING_SIGNATURE


  1 373zfvx9h7xah      1183254286 select /*+ findme */ name from t where id1= 42                    4375557158775460903       698688741679991361
  2 5nyk32fjxxqkc      1183254286 select /*+ Findme */ name from t where id1= 43                    7094585129451441419       698688741679991361
--想象把常量換成了變量,這里的FORCE_MATCHING_SIGNATURE一樣.
SQL> alter system flush shared_pool;
SQL> variable v_id1 number ;
SQL> variable v_idx number ;
SQL> exec :v_id1 := 42 ;
SQL> exec :v_idx := 43 ;
SQL> select /*+ Findme */ name from t where id1= :v_id1 and id2=1;
SQL> select /*+ Findme */ name from t where id1= :v_id1 and id2=2;
SQL> @a
  R SQL_ID        PLAN_HASH_VALUE SQL_TEXT                                                     EXACT_MATCHING_SIGNATURE FORCE_MATCHING_SIGNATURE


  1 b3x2pcgkxaxft      1183254286 select /*+ Findme */ name from t where id1= :v_id1 and id2=2      7008393373276421720      7008393373276421720
  2 ckr7rh2zfrwcv      1183254286 select /*+ Findme */ name from t where id1= :v_id1 and id2=1     14799038700516685754     14799038700516685754
--但是如果語句中存在綁定變量,這個又不一樣.而且這個時候EXACT_MATCHING_SIGNATURE = FORCE_MATCHING_SIGNATURE.
--有點亂,google找到一篇文章,老熊總結的,轉抄如下.
http://www.laoxiong.net/sql-profiles-part.html
對SQL語句,去掉重復的空格(不包括字符常量),將大小寫轉換成相同,比如均為大寫(不包括字符常量)后,如果
SQL相同,那么SQL語句的exact_matching_signature就是相同的。對SQL語句,去掉重復的空格(不包括字符常量),將大小寫轉換成相同,
比如均為大寫(不包括字符常量),然后去掉SQL中的常量,如果SQL相同,那么SQL語句的force_matching_signature就是相同的。但是例
外的情況是:如果SQL中有綁定變量,force_matching_signature就會與exact_matching_signature一樣的生成標準。

上述內容就是怎么理解v$sql的exact_matching_signature與force_matching_signature.txt,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南郑县| 高台县| 安阳市| 阿克苏市| 兴安盟| 景泰县| 临汾市| 交口县| 民乐县| 乐平市| 正镶白旗| 罗甸县| 原阳县| 会理县| 娄烦县| 措美县| 清苑县| 龙川县| 富顺县| 枣强县| 沛县| 措勤县| 绵竹市| 台中县| 乌什县| 财经| 探索| 普兰县| 当阳市| 巫山县| 垦利县| 平阳县| 仙居县| 斗六市| 陇西县| 龙口市| 仁布县| 汝州市| 日喀则市| 宁陵县| 会理县|