【OPTIMIZATION】Oracle影響優化器選擇的相關技術
在資料庫優化中,除了針對業務架構、邏輯及sql調整之外,資料庫本身也有很多影響優化器的一些技術,主要有資料庫引數、sql計劃管理器、hint等。 如下圖所示:
下面我們具體看下這幾個技術
1.初始化引數
控制優化器行為的主要引數為:
初始化引數 | 描述 |
---|---|
CURSOR_INVALIDATION |
為 DDL 語句提供預設的遊標失效級別。
您可以在
|
|
將 SQL 語句中的文字值轉換為繫結變數。 轉換這些值可以改善遊標共享,並且會影響 SQL 語句的執行計劃。 優化器根據繫結變數的存在而不是實際的文字值生成執行計劃。
設定為
|
|
指定在全表掃描或索引快速全掃描期間在單個 I/O 中讀取的塊數。 優化器使用這個引數的值來計算全表掃描和索引快速全掃描的開銷。 較大的值會降低全表掃描的成本,這可能會導致優化器選擇全表掃描而不是索引掃描。 此引數的預設值對應於資料庫可以有效執行的最大 I/O 大小。 此值取決於平臺,對於大多數平臺為 1 MB。 因為該引數以塊表示,所以它被設定為等於可以有效執行的最大 I/O 大小除以標準塊大小的值。 如果會話數非常大,則多塊讀取計數值會降低,以避免緩衝區快取被過多的表掃描緩衝區淹沒。 |
|
控制適應性計劃。 適應性計劃有替代選擇。 優化器根據在查詢執行時收集的統計資訊在執行時決定計劃。
預設情況下,此引數為
請參閱 “ ” 。 |
|
控制自動重新優化和自適應計劃的報告模式(請參閱
“
”
)。
預設情況下,報告模式為關閉 (
如果設定為
|
|
控制自適應統計。 當查詢謂詞過於複雜而無法單獨依賴基表統計資訊時,優化器可以使用自適應統計資訊。
預設情況下,
請參閱 “ ” 。 |
|
在資料庫例項啟動時設定優化器模式。
可能的值是
|
|
使用巢狀迴圈控制索引探測的成本分析。
值的範圍
|
|
調整索引探測的成本。
該值的範圍是
|
|
此引數啟用 (
|
|
當
|
OPTIMIZER_SESSION_TYPE |
確定資料庫在自動索引驗證期間是否驗證語句。
預設是
通過
在會話中
設定
|
|
啟用或禁用 SQL 隔離配置的自動建立。要啟用 SQL 隔離在資源管理器終止查詢後自動建立配置,請將
OPTIMIZER_CAPTURE_SQL_QUARANTINE
初始化引數
設定
為
TRUE
(預設為
FALSE
)。 |
|
啟用或禁用不可見索引的使用。 |
|
啟用或禁用優化器的查詢重寫功能。
|
|
確定優化器在為 SQL 語句選擇執行計劃時是否考慮 SQL 隔離配置。
要禁用現有 SQL 隔離配置的使用,請設定
|
|
確定強制執行查詢重寫的程度。
預設情況下,完整性級別設定為
要在約束處於
|
|
控制資料庫是將 SQL 查詢結果快取用於所有查詢,還是僅用於使用結果快取提示註釋的查詢。
當設定為
設定此引數時,請考慮結果快取如何處理 PL/SQL 函式。
資料庫使用跟蹤 PL/SQL 函式的資料依賴性的相同機制使結果快取中的查詢結果無效,但允許快取包含 PL/SQL 函式的查詢。
由於 PL/SQL 函式結果快取失效不會跟蹤所有型別的依賴關係(例如對序列、
|
|
指定結果快取可以使用的最大 SGA 記憶體量(以位元組為單位)。
預設是從的值匯出
|
|
指定
|
|
指定一個快取查詢可以消耗的臨時表空間記憶體的最大百分比。
預設值為
|
|
指定結果快取可以在 PDB 中消耗的最大臨時表空間記憶體量。 此引數只能在系統級別修改。
預設值為 的預設值或初始化值的 10 倍
|
|
指定依賴於遠端資料庫物件的結果保持有效的分鐘數。
預設值為
|
|
使優化器能夠為星型查詢(如果
|
2. 提示
提示主要是在語句上加入相關提示,以強制資料庫按照提示方式執行。部分示例如下:
SELECT /*+ FULL (hr_emp) CACHE(hr_emp) */ last_name FROM employees hr_emp; --單表 SELECT /*+ INDEX (employees emp_department_ix)*/ employee_id, department_id FROM employees WHERE department_id > 50; --多表 SELECT /*+ LEADING(e j) */ * FROM employees e, departments d, job_history j WHERE e.department_id = d.department_id AND e.hire_date = j.start_date;
3.DBMS_STATS
主要定期收集統計資訊,以供Oracle優化器選擇最優路徑。詳細資訊,後續部落格錄入。
4.SQL配置檔案
SQL 配置檔案是查詢的輔助統計資訊的集合,包括查詢中引用的所有表和列。
配置檔案以內部格式儲存在資料字典中。使用者介面是DBA_SQL_PROFILES字典檢視。優化程式在優化期間使用此資訊來確定最佳計劃。 實現sql配置檔案示例:
DECLARE my_sqlprofile_name VARCHAR2(30); BEGIN my_sqlprofile_name := DBMS_SQLTUNE.ACCEPT_SQL_PROFILE ( task_name => 'STA_SPECIFIC_EMP_TASK' , name => 'my_sql_profile' , profile_type => DBMS_SQLTUNE.PX_PROFILE , force_match => true ); END; / --列出已有的配置檔案 COLUMN category FORMAT a10 COLUMN sql_text FORMAT a20 SELECT NAME, SQL_TEXT, CATEGORY, STATUS FROM DBA_SQL_PROFILES; --更改配置檔案 VARIABLE pname my_sql_profile BEGIN DBMS_SQLTUNE.ALTER_SQL_PROFILE ( name => :pname , attribute_name => 'CATEGORY' , value => 'DEFAULT' ); END; --刪除配置檔案 BEGIN DBMS_SQLTUNE.DROP_SQL_PROFILE ( name => 'my_sql_profile' ); END; /
5.sql計劃管理
SQL 計劃管理使用一種稱為 SQL 計劃基線 的機制 ,這是一組允許優化器用於 SQL 語句的可接受計劃。
其主要目的是--SQL 計劃管理可防止由計劃更改引起的效能迴歸。
SQL 配置檔案和 SQL 計劃基線都通過確保優化器僅使用最佳計劃來幫助提高 SQL 語句的效能。
配置檔案和基線都是使用提示在內部實現的。但是,這些機制存在顯著差異,包括:
-
通常,SQL 計劃基線是主動的,而 SQL 配置檔案是被動的。
-
SQL 計劃基線再現特定計劃,而 SQL 配置檔案則更正優化器成本估算。
也可參考:
http://blog.itpub.net/29487349/viewspace-2765000/
詳細情況可參考Oracle官方文件:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29487349/viewspace-2837594/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 影響ORACLE優化器的相關因素Oracle優化
- Oracle主鍵選擇對插入的影響Oracle
- MySQL學習之影響優化器選擇索引因素MySql優化索引
- Oracle查詢優化器的相關引數Oracle優化
- CSS 選擇器效能優化CSS優化
- 影響rest api版本選擇的因素RESTAPI
- HINT篇---優化器相關優化
- Oracle Lob型別相關引數以及效能影響Oracle型別
- druid相關的時間序列資料庫——也用到了倒排相關的優化技術UI資料庫優化
- 表資料量影響MySQL索引選擇MySql索引
- 遊戲伺服器相關技術遊戲伺服器
- 選擇優化選項的方案優化
- mysql相關的jar影響了tomcatMySqlJARTomcat
- 盤點近期重大技術成就及其將帶給你的影響,與你我息息相關!
- css屬性的選擇對動畫效能的影響CSS動畫
- SQL SERVER 日期相關性優化選項SQLServer優化
- 報告:擴大技術的影響
- .選用適合的ORACLE優化器Oracle優化
- IT優化級別的選擇優化
- 前端效能JQuery篇之選擇器優化前端jQuery優化
- Oracle優化相關的一些引數Oracle優化
- 如何打造個人技術影響力
- SQL最佳化-關於ORDERED-HASH中錯誤選擇連線欄位對效能的影響SQL
- Weex技術相關
- 雲技術的戰略選擇
- sql優化相關SQL優化
- 前端優化系列 – 初始化的效能影響分析前端優化
- 前端優化系列 - 初始化的效能影響分析前端優化
- 關於 mysql相關的jar影響了tomcat 的問題MySqlJARTomcat
- ORACLE SQL語句優化技術分析OracleSQL優化
- Oracle優化案例-統計資訊對執行計劃的影響(十三)Oracle優化
- 「性別選擇」在遊戲中產生了哪些影響?遊戲
- 特徵選擇技術總結特徵
- 分支對程式碼效能的影響和優化優化
- 聊聊創業初期的技術選擇創業
- 技術學習選擇的困難
- 初創團隊的技術選擇
- 『現學現忘』Docker相關概念 — 8、虛擬化技術和容器技術的關係Docker