儲存提綱與SQL計畫基線

2022-09-22 19:18:08 字數 3070 閱讀 4044

儲存提綱與sql計畫基線

儲存提綱

儲存提綱被設計用來提供穩定的執行計畫,以消除執行環境或者物件統計資訊的改變造成的影響。因此,這個特性也被稱作計畫穩定性。具體的講,儲存提綱是乙個提示的集合,更精確地說,所有這些提示強制查詢優化器為乙個給定的sql語句,穩定地產生乙個特殊的執行計畫。但實踐中,遺憾的是,即使使用儲存提綱,還是可能觀察到執行計畫的改變。儲存提綱不是總能提供乙個穩定的執行計畫,oracle 11g自身就證實了這一點,從這個版本起,不再贊成使用儲存提綱,而是推薦sql計畫基線。

www.2cto.com  

儲存綱要的主要使用的情況:

stored outline 就是把乙個sql語句的執行計畫固定下來。比如說你sql執行計畫在測試庫里執行很好,但是在生產庫走了另外乙個執行計畫,可以把測試庫的stored outline匯出放到正式庫中!讓正式庫的sql語句按照測試庫的執行計畫來走!

1.為避免在公升級後某些sql出現嚴重效能下降而且在短時間內不能優化的情況,我們可以使用outline的功能將原生產庫中的sql執行計畫實施在新的資料庫上。 

2.為避免sql的執行計畫在統計資料不準確的情況(如未能及時收集表或索引的統計資訊)下導致變化從而引起的效能降低。 

3.避免大規模分布實施的應用出現資料庫版本、配置等區別引起的優化器產生不同的執行計畫。 

4.某些bug引起優化器生成較差的執行計畫。在bug修復前我們可以使用outline來強制sql的執行計畫的正確。outline的機制是將所需要的執行計畫的hint儲存在outline的表中。 當執行sql時,oracle會與outline中的sql比較,如果該sql有儲存的outline,則通過儲存的hint生成執行計畫。 

outline的使用注意事項 

1.outln使用者是乙個非常重要的系統使用者,其重要性跟sys,system一樣。在任何情況下都不建議使用者刪除outln,否則會引起資料庫錯誤。 

2.優化器通過outline生成執行計畫前提是outline內所有hint都有效的。如:索引沒有建立的前提下,索引的hint是失效的,導致該sql的outline計畫不會被使用。 

3.引數cursor_sharing=force時不能使用outline。 

4.literial sql的共享程度不高,outline針對繫結變數的sql較好。針對literial sql的情況,需要每條sql都生成outline。 

5.建立outline需要有create any outline的許可權。 

6.要注意從cbo的角度來看,資料庫表和索引的統計資訊是隨著資料量的變化而不斷改變的。固定的執行計畫在某些時段並不一定是最優的執行計畫。所以outline的使用是要根據具體情況來決定的。

outline維護 

停止db使用outline功能: 

alter system set use_stored_outlines=false; 

disable/enable具體outline: 

alter outline ol_name disable; 

alter outline ol_name enable; 

刪除:outline category: 

outline相關檢視: 

dba_outlines 

dba_outline_hints  該檢視列出outline的hints內容  

檢查outline是否存在:

select  name, category, owner from dba_outlines;

sql計畫基線

可以認為sql計畫基線是儲存提綱的乙個改進版本,事實上,sql 計畫基線不僅和儲存提綱有許多相同的特性,而且也和儲存提綱一樣被設計用來提供穩定的執行計畫,以防執行環境和物件統計資訊的改變對執行計畫產生影響。此外,和儲存提綱類似,『臼也可以在不修改語句的情況下調優應用程式。注意在orade 文件中,維持執行計畫的穩定性是sql 計畫基線唯一被提及的用途.由於某些未知的原因,對於也可以在不修改應用程式的情況下使用它來更改當前執行計畫(涉及一條給定sql 語句)的用法,並未提及。

sql 計畫基線是什麼

sql計畫基線是乙個與sql語句相關聯的物件,它被設計用來影響查詢優化器產生執行計畫時的決定。具體地講,sql計畫基線主要是乙個提示的集合。基本上,sql計畫基線就是用來迫使查詢優化器為一條給定的sql語句產生個特定的、穩定的執行計畫。

sql計畫基線的優點之一是它應用到一條特定的sql語句,但在使用它的時候,sql語句自身不需要進行修改。事實上,sql計畫基線儲存在資料字典中,並且查詢優化器會自動選擇它們.首先,sql語句以傳統的方法執行換句話說,就是要杳詢優化器在沒有sql計畫基線支援的條件下產生執行計畫。然後,對sql語句進行標準化,使其不區分大小寫而且不受空白的影響。為標準化後的sql語句計算生成乙個簽名。然後,基於此簽名查詢資料字典。只要發現可接受的(信任的)並且又有相同簽名的sql計畫基線可用,就檢查它以確定要優化的sql語句和此sql計畫基線所指的sql語句是否一致。這一步十分必要,因為簽名是乙個雜湊值,因此,有可能會發生雜湊衝突。如果檢測是成功的,sql計畫基線中的提示將被放入執行計畫的生成過程裡。注意:如果有多個可用的sql計畫基線,查詢優化器會選擇代價最小的那個。

www.2cto.com  

捕獲sql計畫基線

有多種方法可用來捕獲sql計畫基線。基本上,它們都是由資料庫引擎自動建立或資料庫管理員手動建立。下面的3 小節將分別介紹這3 種主要方法。

自動捕獲

當動態初始化引數optlmlzer_capture_sql_plan_baselines設定為true的時候,查詢優化器將自動建立乙個新的sql計畫基線。這個初始化引數被預設設定為false,可以在系統級和會話級修改它。當自動捕獲開啟後,查詢優化器為每條重複執行過(就是至少執行過兩次)的sql 語句儲存乙個新的sql 計畫基線。為此.它會將每條sql 語句的簽名插入乙個日誌中,以便於管理。

這意味著當一條sql語句第一次執行的時候,僅把它的簽名插入日誌。然後,當第二次執行相同的語句的時候,如果不存在與此語句相對應的sql計畫基線,就新建乙個並儲存起來。如果與sql語句相對應的sql計畫基線已經存在,查詢優化器仍然會對比當前的執行計畫和基於此sql計畫基線的執行計畫。如果它們不匹配,那麼這個描述當前執行計畫的新的sql計畫基線將被儲存。然而就像你在前面見到的,不能直接使用當前的執行計畫。查詢優化器被強制使用在sql 計畫基線的輔助下產生的執行計畫。

sql儲存過程與webMethods

今天嘗試著做之前用webmethods沒做出來的sql儲存過程的使用,因為本來對於資料庫的儲存過程也是一知半解,所以先在上學習了一下。先在sql中寫好有輸入輸出的儲存過程,典型一點好做實驗。在webmethods中需要先做好的準備有 安裝好sql與webmehtods,在is伺服器上配置好sql的j...

儲存過程與SQL語句對比

優勢 1 提高效能 sql語句在建立過程時進行分析和編譯。儲存過程是預編譯的,在首次執行乙個儲存過程時,查詢優化器對其進行分析 優化,並給出最終被存在系統表中的儲存計畫,這樣,在執行過程時便可節省此開銷。2 降低網路開銷 儲存過程呼叫時只需用提供儲存過程名和必要的引數資訊,從而可降低網路的流量。3 ...

儲存過程與SQL的對比?

優勢 1 提高效能 sql語句在建立過程時進行分析和編譯。儲存過程是預編譯的,在首次執行乙個儲存過程時,查詢優化器對其進行分析 優化,並給出最終被存在系統表中的儲存計畫,這樣,在執行過程時便可節省此開銷。2 降低網路開銷 儲存過程呼叫時只需用提供儲存過程名和必要的引數資訊,從而可降低網路的流量。3 ...