Oracle 11g系統調優之dbms_sqltune包的使用
前沿:隨著資料庫版本的提升,Oracle也提供了越來越多的效能診斷工具,針對SQL的調優,DBMS_SQLTUNE就是其中一個比較優秀的包。
DBMS_SQLTUNE最開始是在10G裡面出現,11G裡面則對其進行了加強,使得其更加符合實際需求。
1.查詢系統可能存在問題的SQL
一般什麼樣的SQL可能會存在效能問題呢?
我們第一時間能想到的肯定是執行時間很長的SQL、其次是IO很高的SQL,這裡就針對執行時間很長的SQL來做測試。
獲取類似的SQL有多種方法,AWR、ADDR、動態檢視等,這裡我們就透過動態檢視v$session_longops來獲取,因為這個檢視裡面的語句是最近執行的,有比較強的及時性。
以下語句可查詢最近資料庫中執行時間比較長的SQL,包括執行時間。
點選(此處)摺疊或開啟
-
select tt1.sql_text,tt1.sql_fulltext,tt2.sql_id,tt2.sums
-
from v$sqlarea tt1,
-
(select sql_id,sum(elapsed_seconds) as sums
-
from v$session_longops where opname=\'Table Scan\'
-
group by sql_id
-
) tt2
-
where tt1.sql_id=tt2.sql_id
- order by tt2.sums desc;
執行結果如下:
其中SUMS列為此SQL執行的總時間,上面我主要選取了‘Table Scan’這個型別的操作作為主要的時間損耗,從實際上來看也是如此,表掃描的方式直接關係SQL執行的效率,
表掃描佔整個SQL執行時間的比重最大。
從上面,我們選取一條SQL,ID為“3c3ch9a4xdwn1”作為需要最佳化的SQL。
2.DBMS_SQLTUNE包
DBMS_SQLTUNE包提供了很多的子程式來對SQL進行診斷和對執行計劃進行處理,這裡我們只是簡單的測試一下DBMS_SQLTUNE的調優功能,主要涉及到3個子過程。
DBMS_SQLTUNE.CREATE_TUNING_TASK #建立一個SQL調優任務
DBMS_SQLTUNE.CREATE_TUNING_TASK(
sql_id IN VARCHAR2, ---------->SQL ID,必填項
plan_hash_value IN NUMBER := NULL, ----------->執行計劃的HASN值(選填)
scope IN VARCHAR2 := SCOPE_COMPREHENSIVE, ----------->任務型別,有limited和comprehensive兩種
time_limit IN NUMBER := TIME_LIMIT_DEFAULT, ----------->此任務最長的執行時間
task_name IN VARCHAR2 := NULL, ----------->任務名
description IN VARCHAR2 := NULL) ----------->任務描述
RETURN VARCHAR2;
EXECUTE_TUNING_TASK #執行一個SQL調優任務
DBMS_SQLTUNE.EXECUTE_TUNING_TASK(
task_name IN VARCHAR2, ------------>任務名
execution_name IN VARCHAR2 := NULL, ------------>執行時的名稱,可為空
execution_params IN dbms_advisor.argList := NULL, ------------>執行引數,預設可為空
execution_desc IN VARCHAR2 := NULL); ------------>執行描述
DROP_TUNING_TASK #刪除一個SQL調優任務
DBMS_SQLTUNE.DROP_TUNING_TASK(
task_name IN VARCHAR2); ------------->任務名
ACCEPT_SQL_PROFILE #接受及應用一個SQL_PROFILE執行計劃給某條SQL
DBMS_SQLTUNE.ACCEPT_SQL_PROFILE (
task_name IN VARCHAR2, -------------->執行最佳化的任務名
object_id IN NUMBER := NULL, -------------->物件編號,一般不填
name IN VARCHAR2 := NULL, -------------->制定的sql_profile名稱,如果不填則由系統指派
description IN VARCHAR2 := NULL, -------------->該執行計劃的描述資訊
category IN VARCHAR2 := NULL); ------------->需要與該SESSION的sqltune_category引數相匹配
task_owner IN VARCHAR2 := NULL, ------------->任務的所有者
replace IN BOOLEAN := FALSE, ------------->如果此sql_profile已存在,則決定是否替換,預設值為不替換
force_match IN BOOLEAN := FALSE,
------------->是否強制匹配此執行計劃與所有HASH值相同的SQL,類似CURSOR_SHARING引數的FORCE
profile_type IN VARCHAR2 := REGULAR_PROFILE);
------------->sql_profile的型別,預設為REGULAR_PROFILE,可修改為PX_PROFILE,表示此執行計劃變更為並行執行
DROP_SQL_PROFILE #刪除一個SQL_PROFILE的應用,讓系統自動選擇
DBMS_SQLTUNE.DROP_SQL_PROFILE (
name IN VARCHAR2,
ignore IN BOOLEAN := FALSE);
3.具體演示過程
SQL Profile是10g中的新特性,作為自動SQL調整過程的一部分,由Oracle企業管理器來管理。除了OEM,SQL Profile可以透過DBMS_SQLTUNE包來進行管理。
查詢最佳化器有時候會因為缺乏足夠的資訊,而對一條SQL語句做出錯誤的估計,生成糟糕的執行計劃。而自動SQL調整透過SQL概要分析來解決這個問題,自動調整最佳化器會生成這條SQL語句的一個概要,稱作SQL Profile。它由針對這條語句的一些輔助統計資訊組成,透過取樣和區域性執行技術來確認,必要的話,會調整執行計劃中的估計值。在SQL概要分析中,自 動調整最佳化器還可以透過一條SQL語句的執行歷史資訊來設定合適的最佳化器引數,比如將OPTIMIZER_MODE引數由ALL_ROWS改為 FIRST_ROWS。
換句話說,SQL概要是一個物件,它包含了可以幫助查詢最佳化器為一個特定的SQL語句找到高效執行計劃的資訊。這些資訊包括執行環境、物件統計和對查詢優 化器所做評估的修正資訊。它的最大優點之一就是在不修改SQL語句和會話執行環境的情況下影響查詢最佳化器的決定。(《Oracle效能診斷藝術》)
SQL Profile中包含的並非單個執行計劃的資訊,必須注意的是,SQL Profile不會固定一個SQL語句的執行計劃。當表的資料增長或者索引建立、刪除,使用同一個SQL Profile的執行計劃可能會改變,而儲存在SQL Profile中的資訊會繼續起作用。然而,經過一段很長的時間之後,它的資訊有可能會過時,需要重新生成。
SQL Profile的作用範圍由CATEGORY屬性來控制,這個屬性決定了哪些使用者會話可以應用這個概要。你可以從DBA_SQL_PROFILES中的 CATEGORY欄位來檢視這個屬性。預設情況下,所有概要檔案都建立為DEFAULT範疇,這意味著所有SQLTUNE_CATEGORY初始化引數為 DEFAULT的使用者會話都可以使用這個概要。你可以修改這個屬性,比如將其改為DEV,則SQLTUNE_GATEGORY引數為DEV的使用者會話才能 使用它,利用這個功能,你可以在一個受限制的環境中來測試一個SQL Profile。
簡單來說,Sql_Profile是用來影響資料庫執行計劃生成的一組資訊檔案的集合,可以在不改變原有SQL語句的前提下,達到類似HINTS改變其執行計劃的目的。
建立一個sqltune的調優任務(即建立sql_profile的相關資訊)
點選(此處)摺疊或開啟
-
DECLARE
-
my_task_name VARCHAR2(30);
-
BEGIN
-
my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
-
sql_id => \'c7py7dtaxnsjm\',
-
scope => \'COMPREHENSIVE\',
-
time_limit => 3600,
-
task_name => \'test_falist_tuning_task1\',
-
description => \'Task to tune a query\');
-
DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name => \'test_falist_tuning_task1\');
- END;
記住,DBMS_SQLTUNE.CREATE_TUNING_TASK是一個函式,必須要有返回值。
上面在定義了一個TASK後,可透過DBMS_SQLTUNE.EXECUTE_TUNING_TASK來執行此調優過程。
獲取調優任務的詳細資訊
點選(此處)摺疊或開啟
- select dbms_sqltune.report_tuning_task(\'test_falist_tuning_task1\') from dual;
可透過dbms_sqltune.report_tuning_task,輸入任務名,及可獲取調優的相關資訊,如下:
點選(此處)摺疊或開啟
- GENERAL INFORMATION SECTION
- -------------------------------------------------------------------------------
- Tuning Task Name : test_falist_tuning_task1
- Tuning Task Owner : BOLAN
- Workload Type : Single SQL Statement
- Scope : COMPREHENSIVE
- Time Limit(seconds): 3600
- Completion Status : COMPLETED
- Started at : 03/16/2015 21:03:11
- Completed at : 03/16/2015 21:04:04
-
- -------------------------------------------------------------------------------
- Schema Name: BOLAN
- SQL ID : b950haw425cq7
- SQL Text : SELECT C.*,D.CONTENT FROM (SELECT OBJECTID, TITLE, EDITTIME,
- SUBSTR(INTRO, :\"SYS_B_0\", :\"SYS_B_1\") || :\"SYS_B_2\" AS INTRO,
- KEYNAME, R
- FROM (SELECT FIE_FINANCECONTENT.OBJECTID,
- FIE_FINANCECONTENT.TITLE,
- TO_CHAR(FIE_FINANCECONTENT.DISPLAYTIME,
- :\"SYS_B_3\") AS EDITTIME,
- FIE_FINANCECONTENT.INTRO,
- BASE_OBJKEY.KEYNAME,
- ROW_NUMBER() OVER(PARTITION BY
- BASE_OBJKEY.KEYNAME ORDER BY FIE_FINANCECONTENT.DISPLAYTIME
- DESC) R
- FROM FIE_FINANCECONTENT
- INNER JOIN BASE_OBJ
- ON FIE_FINANCECONTENT.OBJECTID = BASE_OBJ.OBJECTID
- INNER JOIN BASE_OBJKEY
- ON BASE_OBJ.OBJECTID = BASE_OBJKEY.OBJECTID
- left join base_cateobj
- on base_cateobj.objectid = BASE_OBJKEY.OBJECTID
- WHERE BASE_OBJ.STATUS = :\"SYS_B_4\"
- AND (base_cateobj.CATEGORYID LIKE :\"SYS_B_5\" OR
- base_cateobj.CATEGORYID LIKE :\"SYS_B_6\")
- AND BASE_OBJKEY.SECURITYID IS NOT NULL
- ORDER BY FIE_FINANCECONTENT.DISPLAYTIME DESC) B
- WHERE R < :\"SYS_B_7\")C
- INNER JOIN FIE_OBJCONTENT D
- ON C.OBJECTID =D.OBJECTID
- Bind Variables :
- 5 - (VARCHAR2(32)):4
- 6 - (VARCHAR2(32)):000200010022%
- 7 - (VARCHAR2(32)):000100020008%
- 8 - (NUMBER):11
-
- -------------------------------------------------------------------------------
- FINDINGS SECTION (1 finding)
- -------------------------------------------------------------------------------
-
- 1- SQL Profile Finding (see explain plans section below)
- --------------------------------------------------------
- 為此語句找到了效能更好的執行計劃 2。選擇以下 SQL 概要檔案之一進行實施。
-
- Recommendation (estimated benefit: 75.32%)
- ------------------------------------------
- - 考慮接受推薦的 SQL 概要檔案。
- execute dbms_sqltune.accept_sql_profile(task_name =>
- \'test_falist_tuning_task1\', task_owner => \'BOLAN\', replace =>
- TRUE);
-
- Recommendation (estimated benefit: 99.89%)
- ------------------------------------------
- - 考慮接受建議的 SQL 概要檔案, 以便對此語句使用並行執行。
- execute dbms_sqltune.accept_sql_profile(task_name =>
- \'test_falist_tuning_task1\', task_owner => \'BOLAN\', replace =>
- TRUE, profile_type => DBMS_SQLTUNE.PX_PROFILE);
-
- 與 DOP 64 並行執行此查詢會使 SQL 概要檔案計劃上的響應時間縮短 99.56%。但是, 啟用並行執行時要付出一些代價。它將增加語句的資源消耗
- (預計為 72.07%), 這會導致系統吞吐量降低。此外, 由於在非常短的持續時間內消耗了這些資源, 因此如果沒有足夠可用的硬體容量,
- 併發語句的響應時間將受到負面影響。
-
- The following data shows some sampled statistics for this SQL from the past
- week and projected weekly values when parallel execution is enabled.
-
- Past week sampled statistics for this SQL
- -----------------------------------------
- Number of executions 0
- Percent of total activity 0
- Percent of samples with #Active Sessions > 2*CPU 0
- Weekly DB time (in sec) 0
-
- Projected statistics with Parallel Execution
- --------------------------------------------
- Weekly DB time (in sec) 0
-
- -------------------------------------------------------------------------------
- ADDITIONAL INFORMATION SECTION
- -------------------------------------------------------------------------------
- - 最佳化程式不能合併位於執行計劃的行 ID 2 處的檢視。. 最佳化程式不能合併包含視窗函式的檢視。.
-
- -------------------------------------------------------------------------------
- EXPLAIN PLANS SECTION
- -------------------------------------------------------------------------------
-
- 1- Original With Adjusted Cost
- ------------------------------
- Plan hash value: 3849921461
-
- -----------------------------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
- -----------------------------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 19M| 29G| | 4732K (1)| 15:46:36 |
- |* 1 | HASH JOIN | | 19M| 29G| 17G| 4732K (1)| 15:46:36 |
- |* 2 | VIEW | | 19M| 17G| | 3591K (1)| 11:58:18 |
- | 3 | SORT ORDER BY | | 19M| 6717M| 7046M| 3591K (1)| 11:58:18 |
- |* 4 | WINDOW SORT PUSHED RANK | | 19M| 6717M| 7046M| 3591K (1)| 11:58:18 |
- |* 5 | HASH JOIN | | 19M| 6717M| 3462M| 583K (1)| 01:56:43 |
- |* 6 | HASH JOIN | | 20M| 3223M| 3186M| 356K (1)| 01:11:22 |
- |* 7 | FILTER | | | | | | |
- |* 8 | HASH JOIN OUTER | | 24M| 2903M| 61M| 136K (2)| 00:27:24 |
- |* 9 | TABLE ACCESS FULL | BASE_OBJKEY | 1049K| 49M| | 21955 (1)| 00:04:24 |
- | 10 | INDEX FAST FULL SCAN| PK_BASE_CATEOBJ | 14M| 1048M| | 49157 (1)| 00:09:50 |
- |* 11 | TABLE ACCESS FULL | BASE_OBJ | 2650K| 98M| | 55175 (1)| 00:11:03 |
- | 12 | TABLE ACCESS FULL | FIE_FINANCECONTENT | 2345K| 431M| | 32203 (1)| 00:06:27 |
- | 13 | TABLE ACCESS FULL | FIE_OBJCONTENT | 4208K| 2600M| | 134K (1)| 00:26:57 |
- -----------------------------------------------------------------------------------------------------------
-
- Predicate Information (identified by operation id):
- ---------------------------------------------------
-
- 1 - access(\"OBJECTID\"=\"D\".\"OBJECTID\")
- 2 - filter(\"R\"<:SYS_B_7)
- 4 - filter(ROW_NUMBER() OVER ( PARTITION BY \"BASE_OBJKEY\".\"KEYNAME\" ORDER BY
- INTERNAL_FUNCTION(\"FIE_FINANCECONTENT\".\"DISPLAYTIME\") DESC )<:SYS_B_7)
- 5 - access(\"FIE_FINANCECONTENT\".\"OBJECTID\"=\"BASE_OBJ\".\"OBJECTID\")
- 6 - access(\"BASE_OBJ\".\"OBJECTID\"=\"BASE_OBJKEY\".\"OBJECTID\")
- 7 - filter(\"BASE_CATEOBJ\".\"CATEGORYID\" LIKE :SYS_B_5 OR \"BASE_CATEOBJ\".\"CATEGORYID\" LIKE
- :SYS_B_6)
- 8 - access(\"BASE_CATEOBJ\".\"OBJECTID\"(+)=\"BASE_OBJKEY\".\"OBJECTID\")
- 9 - filter(\"BASE_OBJKEY\".\"SECURITYID\" IS NOT NULL)
- 11 - filter(\"BASE_OBJ\".\"STATUS\"=:SYS_B_4)
-
- 2- Using SQL Profile
- --------------------
- Plan hash value: 770845823
-
- ----------------------------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
- ----------------------------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 2998K| 4486M| | 1167K (1)| 03:53:33 |
- |* 1 | HASH JOIN | | 2998K| 4486M| 2648M| 1167K (1)| 03:53:33 |
- | 2 | TABLE ACCESS FULL | FIE_OBJCONTENT | 4208K| 2600M| | 134K (1)| 00:26:57 |
- |* 3 | VIEW | | 2997K| 2632M| | 769K (1)| 02:33:53 |
- | 4 | SORT ORDER BY | | 2997K| 1014M| | 769K (1)| 02:33:53 |
- |* 5 | WINDOW SORT PUSHED RANK | | 2997K| 1014M| | 769K (1)| 02:33:53 |
- | 6 | CONCATENATION | | | | | | |
- |* 7 | FILTER | | | | | | |
- |* 8 | HASH JOIN OUTER | | 119K| 40M| 278M| 270K (1)| 00:54:01 |
- |* 9 | HASH JOIN | | 997K| 267M| 100M| 146K (1)| 00:29:19 |
- |* 10 | HASH JOIN | | 1049K| 88M| 61M| 86580 (1)| 00:17:19 |
- |* 11 | TABLE ACCESS FULL | BASE_OBJKEY | 1049K| 49M| | 21955 (1)| 00:04:24 |
- |* 12 | TABLE ACCESS FULL | BASE_OBJ | 2650K| 98M| | 55175 (1)| 00:11:03 |
- | 13 | TABLE ACCESS FULL | FIE_FINANCECONTENT | 2345K| 431M| | 32203 (1)| 00:06:27 |
- | 14 | INDEX FAST FULL SCAN| PK_BASE_CATEOBJ | 14M| 1048M| | 49157 (1)| 00:09:50 |
- |* 15 | FILTER | | | | | | |
- |* 16 | HASH JOIN OUTER | | 2878K| 974M| 278M| 270K (1)| 00:54:01 |
- |* 17 | HASH JOIN | | 997K| 267M| 100M| 146K (1)| 00:29:19 |
- |* 18 | HASH JOIN | | 1049K| 88M| 61M| 86580 (1)| 00:17:19 |
- |* 19 | TABLE ACCESS FULL | BASE_OBJKEY | 1049K| 49M| | 21955 (1)| 00:04:24 |
- |* 20 | TABLE ACCESS FULL | BASE_OBJ | 2650K| 98M| | 55175 (1)| 00:11:03 |
- | 21 | TABLE ACCESS FULL | FIE_FINANCECONTENT | 2345K| 431M| | 32203 (1)| 00:06:27 |
- | 22 | INDEX FAST FULL SCAN| PK_BASE_CATEOBJ | 14M| 1048M| | 49157 (1)| 00:09:50 |
- ----------------------------------------------------------------------------------------------------------
-
- Predicate Information (identified by operation id):
- ---------------------------------------------------
-
- 1 - access(\"OBJECTID\"=\"D\".\"OBJECTID\")
- 3 - filter(\"R\"<:SYS_B_7)
- 5 - filter(ROW_NUMBER() OVER ( PARTITION BY \"BASE_OBJKEY\".\"KEYNAME\" ORDER BY
- INTERNAL_FUNCTION(\"FIE_FINANCECONTENT\".\"DISPLAYTIME\") DESC )<:SYS_B_7)
- 7 - filter(\"BASE_CATEOBJ\".\"CATEGORYID\" LIKE :SYS_B_6)
- 8 - access(\"BASE_CATEOBJ\".\"OBJECTID\"(+)=\"BASE_OBJKEY\".\"OBJECTID\")
- 9 - access(\"FIE_FINANCECONTENT\".\"OBJECTID\"=\"BASE_OBJ\".\"OBJECTID\")
- 10 - access(\"BASE_OBJ\".\"OBJECTID\"=\"BASE_OBJKEY\".\"OBJECTID\")
- 11 - filter(\"BASE_OBJKEY\".\"SECURITYID\" IS NOT NULL)
- 12 - filter(\"BASE_OBJ\".\"STATUS\"=:SYS_B_4)
- 15 - filter(\"BASE_CATEOBJ\".\"CATEGORYID\" LIKE :SYS_B_5 AND LNNVL(\"BASE_CATEOBJ\".\"CATEGORYID\"
- LIKE :SYS_B_6))
- 16 - access(\"BASE_CATEOBJ\".\"OBJECTID\"(+)=\"BASE_OBJKEY\".\"OBJECTID\")
- 17 - access(\"FIE_FINANCECONTENT\".\"OBJECTID\"=\"BASE_OBJ\".\"OBJECTID\")
- 18 - access(\"BASE_OBJ\".\"OBJECTID\"=\"BASE_OBJKEY\".\"OBJECTID\")
- 19 - filter(\"BASE_OBJKEY\".\"SECURITYID\" IS NOT NULL)
- 20 - filter(\"BASE_OBJ\".\"STATUS\"=:SYS_B_4)
-
- 3- Using Parallel Execution
- ---------------------------
- Plan hash value: 89272180
-
- --------------------------------------------------------------------------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
- --------------------------------------------------------------------------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 146K| 219M| | 5095 (1)| 00:01:02 | | | |
- | 1 | PX COORDINATOR | | | | | | | | | |
- | 2 | PX SEND QC (RANDOM) | :TQ10010 | 146K| 219M| | 5095 (1)| 00:01:02 | Q1,10 | P->S | QC (RAND) |
- |* 3 | HASH JOIN BUFFERED | | 146K| 219M| | 5095 (1)| 00:01:02 | Q1,10 | PCWP | |
- | 4 | JOIN FILTER CREATE | :BF0000 | 146K| 128M| | 2758 (1)| 00:00:34 | Q1,10 | PCWP | |
- | 5 | PX RECEIVE | | 146K| 128M| | 2758 (1)| 00:00:34 | Q1,10 | PCWP | |
- | 6 | PX SEND HASH | :TQ10008 | 146K| 128M| | 2758 (1)| 00:00:34 | Q1,08 | P->P | HASH |
- |* 7 | VIEW | | 146K| 128M| | 2758 (1)| 00:00:34 | Q1,08 | PCWP | |
- | 8 | SORT ORDER BY | | 146K| 49M| 1022M| 2758 (1)| 00:00:34 | Q1,08 | PCWP | |
- | 9 | PX RECEIVE | | 146K| 49M| | 2758 (1)| 00:00:34 | Q1,08 | PCWP | |
- | 10 | PX SEND RANGE | :TQ10007 | 146K| 49M| | 2758 (1)| 00:00:34 | Q1,07 | P->P | RANGE |
- |* 11 | WINDOW SORT | | 146K| 49M| 1022M| 2758 (1)| 00:00:34 | Q1,07 | PCWP | |
- | 12 | PX RECEIVE | | 146K| 49M| | 2758 (1)| 00:00:34 | Q1,07 | PCWP | |
- | 13 | PX SEND HASH | :TQ10006 | 146K| 49M| | 2758 (1)| 00:00:34 | Q1,06 | P->P | HASH |
- |* 14 | WINDOW CHILD PUSHED RANK | | 146K| 49M| | 2758 (1)| 00:00:34 | Q1,06 | PCWP | |
- |* 15 | FILTER | | | | | | | Q1,06 | PCWC | |
- |* 16 | HASH JOIN OUTER | | 146K| 49M| | 2753 (1)| 00:00:34 | Q1,06 | PCWP | |
- | 17 | PX RECEIVE | | 997K| 267M| | 1897 (1)| 00:00:23 | Q1,06 | PCWP | |
- | 18 | PX SEND HASH | :TQ10004 | 997K| 267M| | 1897 (1)| 00:00:23 | Q1,04 | P->P | HASH |
- |* 19 | HASH JOIN BUFFERED | | 997K| 267M| | 1897 (1)| 00:00:23 | Q1,04 | PCWP | |
- | 20 | JOIN FILTER CREATE | :BF0001 | 1049K| 88M| | 1338 (1)| 00:00:17 | Q1,04 | PCWP | |
- | 21 | PX RECEIVE | | 1049K| 88M| | 1338 (1)| 00:00:17 | Q1,04 | PCWP | |
- | 22 | PX SEND HASH | :TQ10002 | 1049K| 88M| | 1338 (1)| 00:00:17 | Q1,02 | P->P | HASH |
- |* 23 | HASH JOIN BUFFERED | | 1049K| 88M| | 1338 (1)| 00:00:17 | Q1,02 | PCWP | |
- | 24 | JOIN FILTER CREATE | :BF0002 | 1049K| 49M| | 381 (1)| 00:00:05 | Q1,02 | PCWP | |
- | 25 | PX RECEIVE | | 1049K| 49M| | 381 (1)| 00:00:05 | Q1,02 | PCWP | |
- | 26 | PX SEND HASH | :TQ10000 | 1049K| 49M| | 381 (1)| 00:00:05 | Q1,00 | P->P | HASH |
- | 27 | PX BLOCK ITERATOR | | 1049K| 49M| | 381 (1)| 00:00:05 | Q1,00 | PCWC | |
- |* 28 | TABLE ACCESS FULL| BASE_OBJKEY | 1049K| 49M| | 381 (1)| 00:00:05 | Q1,00 | PCWP | |
- | 29 | PX RECEIVE | | 2650K| 98M| | 957 (1)| 00:00:12 | Q1,02 | PCWP | |
- | 30 | PX SEND HASH | :TQ10001 | 2650K| 98M| | 957 (1)| 00:00:12 | Q1,01 | P->P | HASH |
- | 31 | JOIN FILTER USE | :BF0002 | 2650K| 98M| | 957 (1)| 00:00:12 | Q1,01 | PCWP | |
- | 32 | PX BLOCK ITERATOR | | 2650K| 98M| | 957 (1)| 00:00:12 | Q1,01 | PCWC | |
- |* 33 | TABLE ACCESS FULL| BASE_OBJ | 2650K| 98M| | 957 (1)| 00:00:12 | Q1,01 | PCWP | |
- | 34 | PX RECEIVE | | 2345K| 431M| | 558 (1)| 00:00:07 | Q1,04 | PCWP | |
- | 35 | PX SEND HASH | :TQ10003 | 2345K| 431M| | 558 (1)| 00:00:07 | Q1,03 | P->P | HASH |
- | 36 | JOIN FILTER USE | :BF0001 | 2345K| 431M| | 558 (1)| 00:00:07 | Q1,03 | PCWP | |
- | 37 | PX BLOCK ITERATOR | | 2345K| 431M| | 558 (1)| 00:00:07 | Q1,03 | PCWC | |
- |* 38 | TABLE ACCESS FULL | FIE_FINANCECONTENT | 2345K| 431M| | 558 (1)| 00:00:07 | Q1,03 | PCWP | |
- | 39 | PX RECEIVE | | 14M| 1048M| | 853 (1)| 00:00:11 | Q1,06 | PCWP | |
- | 40 | PX SEND HASH | :TQ10005 | 14M| 1048M| | 853 (1)| 00:00:11 | Q1,05 | P->P | HASH |
- | 41 | PX BLOCK ITERATOR | | 14M| 1048M| | 853 (1)| 00:00:11 | Q1,05 | PCWC | |
- | 42 | INDEX FAST FULL SCAN | PK_BASE_CATEOBJ | 14M| 1048M| | 853 (1)| 00:00:11 | Q1,05 | PCWP | |
- | 43 | PX RECEIVE | | 4208K| 2600M| | 2336 (1)| 00:00:29 | Q1,10 | PCWP | |
- | 44 | PX SEND HASH | :TQ10009 | 4208K| 2600M| | 2336 (1)| 00:00:29 | Q1,09 | P->P | HASH |
- | 45 | JOIN FILTER USE | :BF0000 | 4208K| 2600M| | 2336 (1)| 00:00:29 | Q1,09 | PCWP | |
- | 46 | PX BLOCK ITERATOR | | 4208K| 2600M| | 2336 (1)| 00:00:29 | Q1,09 | PCWC | |
- |* 47 | TABLE ACCESS FULL | FIE_OBJCONTENT | 4208K| 2600M| | 2336 (1)| 00:00:29 | Q1,09 | PCWP | |
- --------------------------------------------------------------------------------------------------------------------------------------------------------
-
- Predicate Information (identified by operation id):
- ---------------------------------------------------
-
- 3 - access(\"OBJECTID\"=\"D\".\"OBJECTID\")
- 7 - filter(\"R\"<:SYS_B_7)
- 11 - filter(ROW_NUMBER() OVER ( PARTITION BY \"BASE_OBJKEY\".\"KEYNAME\" ORDER BY INTERNAL_FUNCTION(\"FIE_FINANCECONTENT\".\"DISPLAYTIME\") DESC
- )<:SYS_B_7)
- 14 - filter(ROW_NUMBER() OVER ( PARTITION BY \"BASE_OBJKEY\".\"KEYNAME\" ORDER BY INTERNAL_FUNCTION(\"FIE_FINANCECONTENT\".\"DISPLAYTIME\") DESC
- )<:SYS_B_7)
- 15 - filter(\"BASE_CATEOBJ\".\"CATEGORYID\" LIKE :SYS_B_5 OR \"BASE_CATEOBJ\".\"CATEGORYID\" LIKE :SYS_B_6)
- 16 - access(\"BASE_CATEOBJ\".\"OBJECTID\"(+)=\"BASE_OBJKEY\".\"OBJECTID\")
- 19 - access(\"FIE_FINANCECONTENT\".\"OBJECTID\"=\"BASE_OBJ\".\"OBJECTID\")
- 23 - access(\"BASE_OBJ\".\"OBJECTID\"=\"BASE_OBJKEY\".\"OBJECTID\")
- 28 - filter(\"BASE_OBJKEY\".\"SECURITYID\" IS NOT NULL)
- 33 - filter(\"BASE_OBJ\".\"STATUS\"=:SYS_B_4 AND SYS_OP_BLOOM_FILTER(:BF0002,\"BASE_OBJ\".\"OBJECTID\"))
- 38 - filter(SYS_OP_BLOOM_FILTER(:BF0001,\"FIE_FINANCECONTENT\".\"OBJECTID\"))
- 47 - filter(SYS_OP_BLOOM_FILTER(:BF0000,\"D\".\"OBJECTID\"))
-
- -------------------------------------------------------------------------------
重點關注紅字部分,即為SQL_TUNE任務給出的調優建議,我們看到對於上面的語句,ORACLE建議其並行執行,下面也列出來了當前的執行計劃和調整後的執行計劃。
對上面的SQL_PROFILE進行應用
點選(此處)摺疊或開啟
-
begin
-
dbms_sqltune.accept_sql_profile(task_name =>
-
\'test_falist_tuning_task1\', task_owner => \'BOLAN\', replace =>
-
TRUE, profile_type => DBMS_SQLTUNE.PX_PROFILE);
- end;
查詢已存在的SQL_PROFILE
select * from DBA_SQL_PROFILES;
DBA_SQL_PROFILES檢視可檢視當前系統中所有的SQL_PROFILES資訊。
查詢已存在的SQLTUNING TASK
select * from USER_ADVISOR_TASKS
USER_ADVISOR_TASKS檢視可用來檢視當前使用者下所建立的調優任務
刪除已應用的SQL_PROFILE
點選(此處)摺疊或開啟
-
begin
-
dbms_sqltune.drop_sql_profile(name => \'SYS_SQLPROF_014c22dc852c0004\');
- end;
刪除當前使用者建立的SQLTUNING TASK
點選(此處)摺疊或開啟
-
begin
-
DBMS_SQLTUNE.drop_tuning_task(task_name => \'test_falist_tuning_task6\');
- end;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29209863/viewspace-2126821/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL調優工具包DBMS_SQLTUNE的使用方法SQL
- oracle 11g DBMS_SQLTUNE 包的使用方法介紹OracleSQL
- 使用dbms_sqltune調優sql的步驟SQL
- dbms_sqltune包的使用SQL
- Linux系統效能調優之效能分析Linux
- 生產系統調優之_毫秒級的改進
- 使用dbms_sqltune獲得SQL調整建議SQL
- 使用dbms_sqltune進行SQL優化SQL優化
- Oracle 11g DBMS_FGA包的使用Oracle
- ORACLE 系統包Oracle
- 生產系統調優之_敢於質疑
- Linux優化之IO子系統監控與調優Linux優化
- Linux系統調優Linux
- 馬司系統調優
- MOSES翻譯系統的訓練,調優和使用
- 【sql調優】系統資訊統計SQL
- DBMS_SQLTUNE優化SQLSQL優化
- Oracle調優之看懂Oracle執行計劃Oracle
- Oracle 11g UTL_FILE 包的使用方法Oracle
- [轉載]Oracle資料庫應用系統調優方法Oracle資料庫
- (3)Linux效能調優之Linux檔案系統Linux
- oracle的調優(轉)Oracle
- Oracle效能調優之FreeList和HWMOracle
- Oracle效能調優 之FreeList和HWMOracle
- 利用DBMS_SQLTUNE優化SQLSQL優化
- oracle筆記整理13——效能調優之SQL優化Oracle筆記SQL優化
- Linux系統調優介紹Linux
- Linux系統效能調優技巧Linux
- ORACLE SQL調優之統計資訊缺失導致的邏輯讀暴增OracleSQL
- oracle效能調優:管理oracle日誌之調整線上日誌檔案Oracle
- Oracle系統包dbms_randomOraclerandom
- Oracle SQL調優系列之SQL Monitor ReportOracleSQL
- ORACLE SQL調優之'PLAN_TABLE' is old versionOracleSQL
- Linux之我做系統效能調優時常用的一些命令Linux
- ORACLE調優方法Oracle
- oracle sql調優OracleSQL
- oracle效能調優Oracle
- 非常經典的UNIX系統調優的文章(轉)