oracle11g中SQL優化(SQL TUNING)新特性之SQL Plan Management(SPM)

1.?? 簡介

Oracle Database11gR1引進了SQL PlanManagement(簡稱SPM),一套允許DBA捕獲和保持任意SQL語句執行計劃最優的新工具,這樣,限制了刷新優化器統計數據,已有應用改變,甚至數據庫版本升級帶來的影響。本文幫助對SPM原理基本了解,并對其性能優化能力進行簡要的說明。

2.?? SPM原理和機制

Oracle 11g通過一個簡單而優雅的方法實施了解決SQL計劃意外惡化的一套稱為SQL Plan Management(SPM)的新特點。只要用戶會話開啟了自動SQL Plan Baseline捕獲,CBO就會在SQL Management Base(SMB)內記錄該會話內執行的任何SQL,把SQL語句文本,梗概(Outline),綁定變量,及其編譯環境等存儲為一個SQL Plan Baseline。

由于這是語句第一次執行,Oracle11g會把當時的執行計劃當成最優的。正是在相同SQL語句第二次執行時,SPM的優雅才體現的更加明顯。在語句的第二次執行期間,CBO會比較語句的執行計劃和存儲在SMB中的計劃,新計劃被評估看它是否比SMB中的計劃更高效。

如果新計劃會改善語句的性能,那么,SPM會把新計劃標記為該語句最好的計劃。只要DBA沒修改OPTIMIZER_USE_SQL_PLAN_BASELINES參數的默認設置(true),那么,CBO就會在當前的語句執行中采用新的計劃。否則,如果新計劃降低了語句的性能,那么,CBO會從SMB中所有可接受計劃中選擇一個成本最低的計劃,并且,SPM會把那個新計劃存儲到SMB中,因為在不久的未來,該新計劃也許成為不錯的選擇。

2.1.? 捕獲SQL Plan Basebline

Oracle11g中,捕獲SQLPlan Baseline并存儲到SMB中是非常容易的事情。首先,OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES參數控制SQL Plan Baselines自動捕獲是否開啟,該參數的默認設置為FALSE,這意味著SQL Plan Baselines默認不會被自動捕獲。然而,DBA在會話或系統級將它設置為TRUE,SPM就開始記錄SQL語句的執行,當一條SQL語句被執行多于一次時,該SQL語句就被認為SQL Plan Baselines捕獲的候選。?

其次,Oracle11g有個新的包DBMS_SPM,通過從以下幾個來源手工“種植”計劃,可以預先捕獲和引進大量SQL語句:

??數據庫Library Cache中一個或多個SQL語句能被用來創建SQL PlanBaselines。過程LOAD_PLANS_FROM_CURSOR_CACHE能被用來在Library Cache中捕獲任何語句的子集作為潛在SMB的候選。?

??存儲于SQL Tuning Set或一個AWR快照中的SQL語句能被過程LOAD_PLANS_FROM_SQLSET捕獲和被轉換進SQL Plan Baselines。

??最后,SQL Plan Baselines能來自一個導入存儲表。這意味著可以從不同的數據庫捕獲語句。

3.??查看SQL Plan Baseline信息

被捕獲和存儲在SMB中的SQL Plan Baseline元數據包含SPM和CBO用來控制計劃的屬性。當新計劃進入SMB時,它被標為ENABLED,但還不能標記ACCEPTED,直到:

1)?? CBO已經評估了該計劃并判斷它為最好的計劃;

2)?? 計劃已被演化為ACCEPTED模式。在CBO考慮采用一個計劃前,該計劃必須被標記為ENABLED和ACCEPTED。

查看這些元數據最簡單的方法就是查詢DBA_SQL_PLAN_BASELINES字典視圖。下面是一個控制執行計劃的最有價值信息的總結:?

Table 1.1. SQL Plan Baseline Plan Control Metadata

Attribute

Description

SQL_HANDLE

A unique SQL identifier in?string form; it can be used as a?search key

PLAN_NAME

A unique SQL plan identifier in?string form; it can be used as a?search key

SQL_TEXT

The SQL statement’s?unnormalized, actual text

ORIGIN

Tells if the SQL Plan was either:

  • AUTO-CAPTURE: Automatically captured
  • MANUAL-LOAD: Manually evolved
  • MANUAL-SQLTUNE: Automatically evolved by SQL Tuning Advisor
  • AUTO-SQLTUNE: Automatically evolved by Automatic SQL Tuning

ENABLED

Indicates that the SQL Plan is enabled (YES) for CBO utilization or not (NO). Disabled plans are ignored by the CBO

ACCEPTED

Indicates that the SQL Plan is?validated as a good plan, either because Oracle 11g has:

  • Automatically accepted it, or
  • The DBA has forced its manual acceptance by changing its status to ACCEPTED via procedure DBMS_SPM.ALTER_SQL_PLAN_BASELINE()

FIXED

SQL Plans whose FIXED attribute is set to YES will be considered by the CBO. If multiple plans are marked as FIXED, the CBO will only select the best execution plan from those so marked

OPTIMIZER_COST

The total cost estimated by the CBO to execute the SQL statement using this execution plan

查看已存在SQL Plan Baselines中,對一條SQL語句執行有潛在影響的另一個方法是通過DBMS_XPLAN的新過程DISPLAY_SQL_PLAN_BASELINE。例如:能用這個過程來查看SMB中和SQL語句柄匹配的所有SQLPlan Baselines;如果提供了SQL語句的計劃名,也可以顯示該語句的執行計劃等。

4.?? 自動捕獲的實現和過程

下面,我們分析自動捕獲SQL Plan Baselines的過程。首先,我們設置OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES參數為TRUE(默認為FALSE)以開啟SQL Plan Baselines自動捕獲;我們還需要把OPTIMIZER_USE_SQL_PLAN_BASELINES參數設置為TRUE?(默認值)。該參數控制CBO是否檢查SQL語句重復執行產生的計劃是否將被評估為一個好的計劃。

接著,我們執行同樣的一個SQL兩次。第一次執行時,SQL語句被記錄,第二次執行時,計劃自動被捕獲進SMB并被標記為該語句ACCEPTED的SQLPlan Baseline。

當今后該SQL語句再次被執行,并產生了一個不同的新的計劃時,該計劃也會被自動捕獲進SMB,但并不被標為ACCEPTED,所以,SPM只會把第一個計劃標記為ENABLED和ACCEPTED。

5.??SQL Plan Baseline的演化

SPB中未被標示為ACCEPTED的SQL Plan Baselines,需要進一步被演化為標示ACCEPTED狀態,才可以被今后再次執行的SQL語句采用,對SPB進行演化的方法,主要有如下兩種:

5.1.? 手工方法

??調用dbms_spm包的evolve_sql_plan_baseline()函數

SQL> var report clob;

SQL> exec :report := dbms_spm.evolve_sql_plan_baseline();

SQL> print :report

SQL> select sql_text, plan_name, enabled, accepted fromdba_sql_plan_baselines;

??調用SQL Tuning Advisor工具包

SQL> var tname varchar2(30);

SQL> exec :tname :=dbms_sqltune.create_tuning_task(sql_id => 'bfbr3zrg9d5cc');

SQL> execdbms_sqltune.execute_tuning_task(task_name => :tname);

SQL> selectdbms_sqltune.report_tuning_task(:tname, 'TEXT', 'BASIC') FROM dual;

SQL> exec dbms_sqltune.accept_sql_profile(task_name=> :tname);

SQL> select sql_text, plan_name, enabled,accepted from dba_sql_plan_baselines;

5.2.? 自動方法

?? 定期調度dbms_spm包的evolve_sql_plan_baseline()

?? 配置SQL TUNING ADVISOR,使其在自動任務窗口自動運行

6.?? 具體操作命令

?? 開啟自動捕獲和采用SPM

ALTER SESSION SET optimizer_capture_sql_plan_baselines=TRUE;

ALTER SESSION SET optimizer_use_sql_plan_baselines=TRUE;

?? 查看SPM元數據

COL creator???????? FORMAT A08????? HEADING 'Creator'
COL hndle?????????? FORMAT A08????? HEADING 'SQL|Handle'
COL plnme?????????? FORMAT A08????? HEADING 'Plan|Name'
COL sql_hdr???????? FORMAT A25????? HEADING 'SQL Text' WRAP
COL origin????????? FORMAT A12????? HEADING 'Origin'
COL optimizer_cost? FORMAT 9999999? HEADING 'CBO|Cost'
COL enabled???????? FORMAT A04????? HEADING 'Ena-|bled'
COL accepted??????? FORMAT A04????? HEADING 'Acpt'
COL fixed?????????? FORMAT A04????? HEADING 'Fixd'
COL autopurge?????? FORMAT A04????? HEADING 'Auto|Purg'
COL create_dt?????? FORMAT A11????? HEADING 'Created|On' WRAP
COL lst_exc_dt????? FORMAT A11????? HEADING 'Last|Executed' WRAP
SELECT 
?????creator
??? ,SUBSTR(sql_handle, -8, 8) hndle
??? ,SUBSTR(plan_name, -8, 8)? plnme
??? ,SUBSTR(sql_text, 1, 75) sql_hdr
??? ,origin
??? ,optimizer_cost
??? ,enabled
??? ,accepted
??? ,fixed
??? ,autopurge
??? ,TO_CHAR(created, 'yyyy-mm-dd hh24:mi:ss') create_dt
??? ,TO_CHAR(last_executed, 'yyyy-mm-dd hh24:mi:ss') lst_exc_dt
? FROM dba_sql_plan_baselines
? WHERE (sql_text LIKE '%SPM%')
 ORDER BY 1,2,3;

?? 通過DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE顯示已保留的包含特定文本的SQL Plan Baselines

SET LINESIZE 150
SET PAGESIZE 2000
SELECT PT.*
?? FROM (SELECT 
?????????????DISTINCT sql_handle 
???????????FROM dba_sql_plan_baselines
????????? WHERE sql_text like '%SPM%') SPB,
??????? TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(SPB.sql_handle, NULL,'TYPICAL +NOTE')) PT;

轉載于:https://www.cnblogs.com/lhdz_bj/p/8874496.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/452932.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452932.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452932.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux基本命令+Makefile

1.linux下查看進程占用cpu的情況(top); 格式 top [-] [d delay] [q] [c] [S] [s] [i] [n] 主要參數 d:指定更新的間隔,以秒計算。q:沒有任何延遲的更新。如果使用者有超級用戶,則top命令將會以最高的優先…

數據結構與算法--2.數組的定位排序

問題: 給定一個數組A以及下標i,將數組元素進行調整,使得所有比A[i]小的元素排在前邊,接著是所有等于A[i]的元素,最后排列的是比A[i]大的元素 思路: 第一步:將數組分成兩部分,一部…

mysql語法題_mysql數據庫題語法練習

一、練習。導入下面sql執行語句/*數據導入:Navicat Premium Data TransferSource Server : localhostSource Server Type : MySQLSource Server Version : 50624Source Host : localhostSource Database : sqlexamTarget Server Type : MySQLTarget Server Version …

ipv4的不足

v地址基本耗盡,這是當前最棘手的問題v路由表越來越大v功能不足,缺少對多媒體信息傳輸的支持v缺少對高速傳輸的支持v缺少對安全的支持v缺少對主機漫游的支持

OpenGL開發庫的詳細介紹

OpenGL開發庫的組成 開發基于OpenGL的應用程序&#xff0c;必須先了解OpenGL的庫函數。它采用C語言風格&#xff0c;提供大量的函數來進行圖形的處理和顯示。OpenGL庫函數的命名方式非常有規律。所有OpenGL函數采用了以下格式<庫前綴><根命令><可選的參數個數&g…

thinkphp5運行原理_ThinkPHP5.1~5.2全版本遠程代碼執行高危漏洞預警

漏洞綜述關于ThinkPHPThinkPHP是一個快速、兼容而且簡單的輕量級國產PHP開發框架&#xff0c;其借鑒了國外很多優秀的框架和模式&#xff0c;包括使用面向對象的開發結構和MVC模式&#xff0c;融合了Struts的思想和TagLib(標簽庫)、RoR的ORM映射和ActiveRecord模式等。該框架常…

ASP.NET MVC中controller和view相互傳值的方式

ASP.NET MVC中Controller向view傳值的方式&#xff1a; ViewBag、ViewData、TempData單個值的傳遞Json匿名類型ExpandoObjectCookieViewModel(向普通View頁面傳個Model對象、向強類型頁面傳一個Model對象、用一個ViewModel對象解決所有問題)ASP.NET MVC中view向Controller傳值的…

自定義SeekBar 實時顯示百分比進度

進度下方實時顯示百分比進度禁止掉了SeekBar的滑動事件 詳情 githus地址

數據結構與算法--3.字符串的旋轉

題目&#xff1a; A是含有n個元素的數組&#xff0c;如果可以申請到最大內存&#xff0c;那么把A從位置i開始旋轉是比較簡單的。例如&#xff1a;A:a,b,c,d,e.其中i3,旋轉后的字符串A為&#xff1a;d,e,a,b,c要求設計一個時間復雜度為O(n),空間復雜度為O(1)的算法&#xff0c;…

三網融合情況下,實時語音通信技術解決之道

隨著技術和標準的不斷成熟,伴隨著“三網合一”的大潮,VoIP可望成為下一代電信基礎設施結構的楊心,使未來各電信業務綜合統一在IP網絡上成為可能,導致數據的融合和未來電信市場的重組,并帶來新的經濟模式和價值鏈。 Internet在全世界范圍內的快速發展和語音信號處理技術的進步,促…

ipv6相對于ipv4的改進

v更大的地址空間&#xff1a;16字節&#xff0c;128位v首部的簡化&#xff1a;只有7個固定域&#xff0c;撤消了有關分段的域和校驗和域&#xff0c;以便更快地處理分組&#xff0c;提高路由器的吞吐量縮短延時。v更好地支持選項&#xff1a;選項是有次序的&#xff0c;以便路由…

輕量高效的開源JavaScript插件和庫 【轉】

圖片布局輪播圖彈出層音頻視頻編輯器字符串表單存儲動畫時間其它加載器構建工具測試包管理器CDN圖片 baguetteBox.js - 是一個簡單易用的響應式圖像燈箱效果腳本。demoLightgallery.js - 是一個功能齊全的JavaScript圖像燈箱插件。demoviewerjs - 是一個圖像預覽插件。democrop…

Linux內核中的常用宏container_of其實很簡單【轉】

轉自&#xff1a;http://blog.csdn.net/npy_lp/article/details/7010752 開發平臺&#xff1a;Ubuntu11.04 編 譯器&#xff1a;gcc version 4.5.2 (Ubuntu/Linaro4.5.2-8ubuntu4) Container_of在Linux內核中是一個常用的宏&#xff0c;用于從包含在某個結構中的指針獲得結構本…

mysql concat例子_MYSQL中CONCAT詳解

concat()函數1. 功能&#xff1a;返回結果為連接參數產生的字符串。如有任何一個參數為NULL &#xff0c;則返回值為 NULL。2. 語法concat(str1, str2,...)3. 例子案例一&#xff1a;mysql> select concat(蘋果,香蕉,梨子);------------------------------| CONCAT(蘋果,香蕉…

常見的狀態響應碼

200&#xff1a;請求正常&#xff0c;服務器正常的返回數據 301&#xff1a;永久重定向。比如在訪問www.jingdong.com的時候&#xff0c;會重定向到www.jd.com。 302&#xff1a;臨時重定向。比如在訪問一個需要登錄的界面時&#xff0c;而此時沒有登錄&#xff0c;那么就會重定…

軟件行業為什么那么多項目經理

記得聽誰說過&#xff0c;軟件行業的項目經理太濫了&#xff0c;二十幾歲的毛頭小伙子&#xff0c;動不動就是項目經理&#xff0c;手下沒幾個人&#xff0c;管的也沒幾個事&#xff0c;在其他行業&#xff0c;項目經理一般都是四五十歲的老頭子做&#xff0c;要聯系這&#xf…

ipv6的表示方法

v冒分十六進制表示法X:X:X:X:X:X:X:X 其中X表示地址中16位二進制數的十六進制值 例&#xff1a;FEDC:BA98:7654:3210:FEDC:BA98:7654:3210 v零壓縮法如其中有多個連續的零&#xff0c;則可用零壓縮法 如 &#xff1a;1080:0000:0000:0000:0008:0800:200C:417A 可寫成&am…

mysql php7安裝配置_centos7無網絡下安裝部署php7.1.33+mysql5.7.28+apache2.4.6-Go語言中文社區...

centos7無網絡下安裝部署php7.1.33mysql5.7.28apache2.4.6一、1、先ping www.baidu.com&#xff0c;root賬戶下&#xff0c;如果未聯網&#xff0c;創建目錄&#xff0c;把提前下載好的rpm包拷貝到rpm目錄下如圖&#xff1a;(如果沒有安裝包請查看我的另一篇教程下載這些安裝包…

webkit渲染

2019獨角獸企業重金招聘Python工程師標準>>> 參考鏈接 理解WebKit和Chromium 簡明魔法學院 Chrome軟件渲染 WebKit渲染基礎 Webkit 渲染基礎 Webkit不是瀏覽器,它是一個渲染引擎 軟件渲染 硬件渲染(GPU加速) 會觸發GPU加速的屬性 CSS3 3D transformation, trans…

element ui中dialog相關問題

一&#xff0c;今天需要在dialog里面引入另一個頁面&#xff0c;就是打開dialog顯示該頁面&#xff08;把頁面放到dialog中&#xff09;&#xff0c;引入的語句如下&#xff1a; <iframe src"view?pathrkdj_b" ></iframe> 二&#xff0c;使用table組件時…