SQLT 使用指南

pxbibm發表於2020-03-16

主要方法

在使用  SQLT 提供的主要方法之前,須確保  SQLT 已經被正確 安裝,並且使用  SQLT 的使用者被賦予了  SQLT_USER_ROLE 角色。

假如 SQLT 安裝繞過了 SQL*Net (意味著您並沒有在安裝期間沒有指定連線符),那麼在從遠端客戶端執行任何 SQLT 主要方法前,您將需要手動設定連線符引數。即,假如您連線使用 sqlplus scott/tiger@myprod 那麼您需要執行: EXEC sqltxadmin.sqlt$a.set_sess_param('connect_identifier', '@myprod');

SQLT 為一個 SQL 語句提供了下面 7種主要方法來生成診斷詳細資訊  XTRACTXECUTEXTRXECXTRSBYXPLAINXPREXT 和  XPREXC。  XTRACTXECUTEXTRXECXTRSBYXPREXT 和  XPREXC 處理繫結變數和會做 bind peeking(繫結變數窺視),但是  XPLAIN 不會。這是因為  XPLAIN 是基於  EXPLAIN PLAN FOR 命令執行的,該命令不做 bind peeking。因此,如果可能請避免使用 XPLAIN.

除了  XPLAIN 的 bind peeking 限制外,所有這 7種主要方法都可以提供足夠的診斷詳細資訊,對效能較差或產生錯誤結果集的 SQL 進行初步評估。如果該 SQL 仍位於記憶體中或者 Automatic Workload Repository ( AWR) 中,請使用  XTRACT 或  XTRXEC,其他情況請使用  XECUTE。對於 Data Guard 或備用只讀資料庫,請使用  XTRSBY。僅當其他方法都不可行時,再考慮使用  XPLAINXPREXT 和  XPREXC 是類似於  XTRACT 和  XECUTE,但為了提高  SQLT 的效能它們禁了一些  SQLT 的特性。


XTRACT 方法

如果您知道待分析 SQL 的  SQL_ID 或  HASH_VALUE,請使用該方法,否則請使用  XECUTE。您可以在  AWR report 中找到  SQL_ID,在 SQL trace 中找到  HASH_VALUE(在 SQL 文字上面,透過 "hv=" 標記進行標識)。

如果該 SQL 仍位於記憶體中,或其已被  AWR 捕獲,那麼使用 XTRACT 可發現該 SQL 並提供一組診斷檔案,否則 XTRACT 將輸出錯誤。

如果對 SQL 進行硬分析時將引數  STATISTICS_LEVEL 設定為  ALL,將可以得到重要的效能統計資訊(如每步操作的實際行數)。您也可以透過在 SQL 中包括以下 CBO 提示來生成同樣有用的效能統計資訊: /*+ GATHER_PLAN_STATISTICS */。在 11g 中,您可以在 SQL 中包含以下 CBO 提示以獲得增強的診斷資訊: /*+ GATHER_PLAN_STATISTICS MONITOR */

使用此方法時,它會要求提供  SQLTXPLAIN 密碼,這個在匯出與該  XTRACT 執行所對應的  SQLT Repository 時會被使用。

該方法需要對執行  SQLT 的應用程式使用者授予  SQLT_USER_ROLE 角色。

要使用該  XTRACT 方法,首先確保已 安裝了  SQLT,然後以已執行待分析 SQL 的應用程式使用者身份連線到 SQL*Plus,並執行  sqlt/run/sqltxtract.sql 指令碼,傳遞  SQL_ID 或  HASH_VALUE

# cd sqlt/run
# sqlplus apps
SQL> START sqltxtract.sql [SQL_ID]|[HASH_VALUE] [sqltxplain_password]
SQL> START sqltxtract.sql 0w6uydn50g8cx sqltxplain_password
SQL> START sqltxtract.sql 2524255098 sqltxplain_password


XECUTE 方法

與  XTRACT方法相比,該方法提供的資訊更為詳細。正如名稱 XECUTE 所指示的,它將執行正在分析的 SQL,然後生成一組診斷檔案。它的主要缺點是如果正在分析的 SQL 需要很長時間來執行,那麼該方法也要花費很長的時間。

根據經驗法則,僅當 SQL 執行少於 1 小時的情況下,才考慮使用此方法,否則請使用  XTRACT

使用此 XECUTE 方法之前,必須建立一個包含 SQL 文字的文字檔案。如果 SQL 包括繫結變數,則您的檔案必須包含繫結變數宣告和賦值。以  sqlt/input/sample/script1.sql 為例。您的 SQL 應該包含標記  /* ^^unique_id */(強烈建議)。

如果您的 SQL 需要與 SQL*Plus 無法使用的資料型別繫結,或者它使用了集合,您可能需要將 SQL 嵌入到匿名 PL/SQL 塊中。在這種情況下,請使用  sqlt/input/sample/plsql1.sql 作為此方法的輸入示例。

對於修改資料的語句,例如 INSERT/UPDATE/DELETE,工具會在語句執行之前建立一個儲存點,這樣在會話結束時事務處理可以回退到該儲存點。關於 SAVEPOINT(儲存點)的更多資訊,請參閱《Oracle Concepts》參考手冊。

使用此方法時,它會要求提供  SQLTXPLAIN 密碼,這個在匯出與該 XECUTE 執行所對應的  SQLT Repository 時會被使用。

該方法需要對執行  SQLT 的應用程式使用者授予  SQLT_USER_ROLE 角色。

要使用該 XECUT 方法,首先確保已 安裝了  SQLT,然後以已執行待分析 SQL 的應用程式使用者身份連線到 SQL*Plus,並執行  sqlt/run/sqltxecute.sql 指令碼,傳遞包含 SQL 文字及其繫結變數的文字檔名稱。您需要將該檔案放置到  sqlt/input 目錄下,並在位於 sqlt 主目錄時執行 XECUTE,如下所示:

# cd sqlt
# sqlplus apps
SQL> START [path]sqltxecute.sql [path]scriptname [sqltxplain_password]
SQL> START run/sqltxecute.sql input/sample/script1.sql sqltxplain_password


XTRXEC 方法

該方法合併了  XTRACT 和  XECUTE 的功能。實際上,XTRXEC 連續執行了這兩種方法。針對所請求 SQL 語句找到的開銷較大的計劃, XTRACT 階段將生成一個包含提取的 SQL 以及繫結宣告和賦值的指令碼。然後,XTRXEC 使用第一階段建立的指令碼執行 XECUTE 階段。

SQLT 根據在記憶體中生成開銷最大的執行計劃時窺視到的值,建立指令碼的繫結變數的以供  XTRACT使用。判斷計劃的開銷大小的標準是基於這個計劃的平均執行時間。

如果 XTRXEC 僅執行了第一個階段( XTRACT) 後就輸出錯誤,您可能需要檢查在第二階段( XECUTE)使用的指令碼並相應調整繫結變數。使用不常用資料型別時尤其需要進行調整。

使用此方法時,它會要求提供  SQLTXPLAIN 密碼,這個在匯出與該 XTRXEC 執行所對應的  SQLT Repository 時會被使用。

該方法需要對執行  SQLT 的應用程式使用者授予  SQLT_USER_ROLE 角色。

要使用該 XTRXEC 方法,首先確保已 安裝了  SQLT,然後以執行待分析 SQL 的應用程式使用者身份連線到 SQL*Plus,並執行  sqlt/run/sqltxtrxec.sql 指令碼,傳遞  SQL_ID 或  HASH_VALUE

# cd sqlt/run
# sqlplus apps
SQL> START sqltxtrxec.sql [SQL_ID]|[HASH_VALUE] [sqltxplain_password]
SQL> START sqltxtrxec.sql 0w6uydn50g8cx sqltxplain_password
SQL> START sqltxtrxec.sql 2524255098 sqltxplain_password


XTRSBY 方法

如果需要分析在 Data Guard 或備用只讀資料庫上執行的 SQL,請使用該方法。您需要知道要分析的 SQL 的  SQL_ID 或  HASH_VALUE

在主庫上建立一個到備庫的database link,連線到的使用者需要有訪問資料字典的許可權,通常都是使用有 DBA 許可權的使用者。
CREATE PUBLIC DATABASE LINK V1123 CONNECT TO mydba IDENTIFIED by mydba_password
USING '(DESCRIPTION = (ADDRESS=(PROTOCOL=TCP)
(HOST=coesrv14.us.oracle.com)(PORT=1521))(CONNECT_DATA=(SID = V1123)))';

如果該 SQL 仍位於只讀資料庫中的記憶體中,那麼使用 XTRSBY 可發現該 SQL 並提供一組診斷檔案,否則 XTRSBY 將輸出錯誤。

如果對只讀資料庫中的 SQL 進行硬分析時將引數  STATISTICS_LEVEL 設定為  ALL,將可以得到重要的效能統計資訊(如每個執行計劃操作的實際行數)。您也可以透過在 SQL 中包括以下 CBO 提示來生成同樣有用的效能統計資訊: /*+ GATHER_PLAN_STATISTICS */。在 11g 中,您可以在 SQL 中包含以下 CBO 提示以獲得改進的診斷資訊: /*+ GATHER_PLAN_STATISTICS MONITOR */

使用此方法時,它會要求提供  SQLTXPLAIN 密碼,這個在匯出與該 XTRSBY 執行所對應的  SQLT Repository 時會被使用。

XTRSBY 需要 3 個引數: SQL id,DB_LINK的 ID,以及  SQLTXPLAIN 的密碼。

該方法需要對執行  SQLT 的應用程式使用者授予  SQLT_USER_ROLE 角色。

要使用該  XTRSBY 方法,首先確保在主資料庫上已安裝了  SQLT,並且已複製到該只讀資料庫中。然後連線到主要資料庫中的 SQL*Plus 並執行  sqlt/run/sqltxtrsby.sql 指令碼,傳遞  SQL_ID 或  HASH_VALUE,然後是 DB_LINK。

# cd sqlt/run
# sqlplus apps
SQL> START sqltxtrsby.sql [SQL_ID]|[HASH_VALUE] [sqltxplain_password] [DB_LINK]
SQL> START sqltxtrsby.sql 0w6uydn50g8cx sqltxplain_password V1123
SQL> START sqltxtrsby.sql 2524255098 sqltxplain_password v1123

除了 XTRSBY,還可以從只讀資料庫直接執行  sqlt/utl/sqlhc.sql 或  sqlt/utl/sqlhcxec.sql。這兩個只讀指令碼不在資料庫上安裝任何東西,也不執行 DML 命令。它們提供在 XTRSBY 中沒有的其他資訊。


XPLAIN 方法

該方法是基於  EXPLAIN PLAN FOR 命令執行的,因此它將無視您的 SQL 語句引用的繫結變數。僅當無法使用  XTRACT 或  XECUTE 時才使用該方法。

使用此 XPLAIN 方法之前,必須建立一個包含 SQL 文字的文字檔案。如果 SQL 包括繫結變數,您有兩個選擇:保持 SQL 文字“不變”,或謹慎使用相同資料型別的字面值替換該繫結。以  sqlt/input/sample/sql1.sql 為例。

使用此方法時,它會要求提供  SQLTXPLAIN 密碼,這個在匯出與該 XPLAIN 執行所對應的  SQLT Repository 時會被使用。

該方法需要對執行  SQLT 的應用程式使用者授予  SQLT_USER_ROLE 角色。

要使用該 XPLAIN 方法,首先確保已 安裝了  SQLT,然後以已執行待分析 SQL 的應用程式使用者的身份連線到 SQL*Plus,並執行  sqlt/run/sqltxplain.sql 指令碼,傳遞包含 SQL 文字的文字檔名稱。您需要將該檔案放置到 sqlt/input 目錄下,並在位於 sqlt 主目錄時執行 XPLAIN,如下所示:

# cd sqlt
# sqlplus apps
SQL> START [path]sqltxplain.sql [path]filename [sqltxplain_password]
SQL> START run/sqltxplain.sql input/sample/sql1.sql sqltxplain_password


XPREXT 方法

假如您想使用  XTRACT 同時希望禁用一些  SQLT 的特性使之 執行更快,請使用這個方法。指令碼  sqlt/run/sqltcommon11.sql 顯示了哪些特性被禁用。

假如您知道要被分析的 SQL 的  SQL_ID 或者  HASH_VALUE,使用這個方法,否則請使用  XPREXC.您可以在 AWR report 中找到  SQL_ID,在 SQL trace 中找到  HASH_VALUE(在 SQL 文字上面,透過 "hv=" 標記進行標識)。

使用此方法時,它會要求提供  SQLTXPLAIN 密碼,這個在匯出與該 XPREXT 執行所對應的  SQLT Repository 時會被使用。

該方法需要對執行  SQLT 的應用程式使用者授予  SQLT_USER_ROLE 角色。

要使用該  XPREXT 方法,首先確保已  安裝了  SQLT,然後以已執行待分析 SQL 的應用程式使用者身份連線到 SQL*Plus,並執行  sqlt/run/sqltxprext.sql 指令碼,傳遞  SQL_ID 或  HASH_VALUE

# cd sqlt/run
# sqlplus apps
SQL> START sqltxprext.sql [SQL_ID]|[HASH_VALUE] [sqltxplain_password]
SQL> START sqltxprext.sql 0w6uydn50g8cx sqltxplain_password
SQL> START sqltxprext.sql 2524255098 sqltxplain_password


XPREXC 方法

假如您想使用  XECUTE 同時希望禁用一些  SQLT 的特性使之執行更快,請使用這個方法。指令碼  sqlt/run/sqltcommon11.sql 顯示哪些特性被禁用

根據經驗法則,僅當 SQL 執行少於 1 小時的情況下,才考慮使用此方法,否則請使用  XPREXT

使用此 XPREXC 方法之前,必須建立一個包含 SQL 文字的文字檔案。如果 SQL 包括繫結變數,則您的檔案必須包含繫結變數宣告和賦值。以  sqlt/input/sample/script1.sql 為例。您的 SQL 應該包含標記  /* ^^unique_id */,這個標記應該拼寫準確,換句話說請不要改變它。

如果您的 SQL 需要與 SQL*Plus 無法使用的資料型別繫結,或者它使用了集合,您可能需要將 SQL 嵌入到匿名 PL/SQL 塊中。在這種情況下,請使用  sqlt/input/sample/plsql1.sql 作為此方法的輸入示例。

對於修改資料的語句,例如 INSERT/UPDATE/DELETE,工具會在語句執行之前建立一個儲存點,這樣在會話結束時事務處理可以回退到該儲存點。關於 SAVEPOINT(儲存點)的更多資訊,請參閱《Oracle Concepts》參考手冊。

用此方法時,它會要求提供  SQLTXPLAIN 密碼,這個在匯出與該 XPREXC 執行所對應的  SQLT Repository 時會被使用。

該方法需要對執行  SQLT 的應用程式使用者授予  SQLT_USER_ROLE 角色。

要使用該 XPREXC 方法,首先確保已  安裝了  SQLT,然後以已執行待分析 SQL 的應用程式使用者身份連線到 SQL*Plus,並執行  sqlt/run/sqltxprexc.sql 指令碼,傳遞包含 SQL 文字及其繫結變數的文字檔名稱。您需要將該檔案放置到  sqlt/input 目錄下,並在位於 sqlt 主目錄時執行 XPREXC,如下所示:

# cd sqlt
# sqlplus apps
SQL> START [path]sqltxprexc.sql [path]scriptname [sqltxplain_password]
SQL> START run/sqltxprexc.sql input/sample/script1.sql sqltxplain_password


特殊方法

除了 主要方法SQLT 還提供了一些特殊方法。

最常用的特殊方法是  COMPARE。該方法將  SQLT 先前的兩次執行( 主要方法中的任何一個)作為輸入並生成差異分析的報告。

其他特殊方法包括: TRCANLZRTRCAXTRTRCASPLIT 和  XTRSET。前三種方法基於一個單獨的 SQL trace 執行操作,最後一種對一組 SQL trace 執行操作。


COMPARE 方法

當您具有兩個相似的系統 (SOURCES),但是相同 SQL 語句在其中一個系統中執行正常而在另一個系統中不正常時,請使用該 COMPARE 方法。該方法可以幫助確定兩個 SOURCES 之間在計劃、後設資料、CBO 統計資訊、初始化引數以及問題修復控制方面的區別。前提是必須在這兩個系統中 安裝  SQLT,並且必須在兩個系統中的相同 SQL 上使用了 主要方法中的任何一個。

這種比較可以在任何兩個 SOURCES 資料庫的其中一個或第三個 COMPARE 資料庫執行。後者應包含兩個 SOURCES 的  SQLT Repoitory。要匯入  SQLT Repository,請使用由任何 主要方法生成的 sqlt_99999_readme.html 檔案中提供的語法。

一旦 COMPARE 系統包含來自兩個 SOURCES 的資源庫,執行  sqlt/run/sqltcompare.sql,以  SYS 或應用程式使用者身份連線。系統將顯示  STATEMENT_ID 的列表,您可以從中選擇要比較的兩個  SQLT 儲存的執行程式。輸入兩個  STATEMENT_ID 後,會要求您提供來自兩個 SOURCES 的特定  PLAN_HASH_VALUE

# cd sqlt
# sqlplus sqltxplain
SQL> START [path]sqltcompare.sql [STATEMENT_ID 1] [STATEMENT_ID 2]
SQL> START run/sqltcompare.sql 92263 72597
SQL> START run/sqltcompare.sql


TRCANLZR 方法

該方法將 SQL 跟蹤檔名作為輸入並分析該檔案。實際 trace 必須位於  TRCA$INPUT1 目錄中,其在 安裝期間預設為  USER_DUMP_DEST 目錄。

TRCANLZR 方法還可以將多個相關 trace 作為一組同時進行分析。當分析 PX trace 時將需要用到該功能。在這種情況下,需要建立一個包含 trace 列表的  control.txt 檔案(每行一個檔名,不包括路徑指定),並將此  control.txt 放置到  TRCA$INPUT1 或  TRCA$INPUT2 目錄中。這兩個目錄在 安裝。期間分別預設為  USER_DUMP_DEST 和  BACKGROUND_DUMP_DEST。然後,TRCANLZR 將從兩個輸入目錄之一讀取  control.txt 檔案,並在這兩個目錄的任何一箇中查詢 trace 集。

TRCANLZR 類似於  TKPROF,但它具有擴充套件功能。當它分析一個 trace (或 trace 集)時,它還包括類似 CBO 統計資訊的 Schema 物件特徵以及一些其他重要的效能度量。

要使用此  TRCANLZR 方法,請確保首先已經 安裝了  SQLT。然後,以生成 trace 的應用程式使用者身份啟動 SQL*Plus,並執行  sqlt/run/sqltrcanlzr.sql 指令碼,傳遞待分析 trace 的名稱或者填充了檔名的  control.txt 檔名稱。不用包括任何路徑指定。

# cd sqlt
# sqlplus [application_user]
SQL> START [path]sqltrcanlzr.sql [SQL Trace filename|control.txt]
SQL> START run/sqltrcanlzr.sql V1122_ora_24292.trc
SQL> START run/sqltrcanlzr.sql control.txt


TRCAXTR 方法

該方法執行的操作與  TRCANLZR相同,但是當 trace 分析完成時,它會針對在 trace 中發現的頂級 SQL 繼續執行 XTRACT 。該方法基本上自動呼叫併合並  TRCANLZR 和  XTRACT 生成的所有報告。

要使用此 TRCAXTR 方法,請確保首先已經 安裝了  SQLT。然後,進入到  sqlt/run 目錄並啟動 SQL*Plus,以生成 trace 的應用程式使用者身份連線。接著,執行  sqlt/run/sqltrcaxtr.sql 指令碼,傳遞待分析 trace 的名稱或者填充了檔名的  control.txt 檔名稱。不用包括任何路徑指定。

# cd sqlt/run
# sqlplus [application_user]
SQL> START sqltrcaxtr.sql [SQL Trace filename|control.txt]
SQL> START sqltrcaxtr.sql V1122_ora_24292.trc
SQL> START sqltrcaxtr.sql control.txt


TRCASPLIT 方法

該方法將 EVENT 10046 和其他 EVENT(通常是 10053)建立的 SQL trace 檔名作為輸入。然後,它繼續將此輸入 trace 檔案分為兩個輸出檔案。一個包含與 EVENT 10046 對應的 trace 行,另一個包含其補充資訊。換句話說,第二個檔案包含不屬於 EVENT 10046 語法部分的那些 trace 行。所以,如果輸入 trace 是同時使用 EVENT 10046 和 EVENT 10053 建立的,得到的輸出檔案將是 10046 trace 和 10053 trace 。實際輸入 trace 必須位於  TRCA$INPUT1 目錄中,其在 安裝期間預設為  USER_DUMP_DEST 目錄。

要使用此 TRCASPLIT 方法,請確保首先已經 安裝了  SQLT。然後,啟動 SQL*Plus(以任何 SQLT 使用者身份連線)並執行  sqlt/run/sqltrcasplit.sql 指令碼,傳遞待分割 trace 的名稱。不用包括任何路徑指定。

# cd sqlt
# sqlplus [sqlt_user]
SQL> START [path]sqltrcasplit.sql [SQL Trace filename]
SQL> START run/sqltrcasplit.sql V1122_ora_24292.trc


XTRSET 方法

XTRSET 從記憶體或  AWR 提取由  SQL_ID 或  HASH_VALUE 標識的 SQL 語句列表,然後對其中每個 SQL 語句執行 XTRACT。最後它將所有  SQLT 檔案合併到一個壓縮檔案中。透過一系列測試確定相同 SQL 語句集的基準時需要使用此 XTRSET 方法。

使用此方法時,它只要求提供一次  SQLTXPLAIN 密碼,將在對 SQL 語句列表的每個  XTRACT 執行匯出  SQLT Repository 時需要。

要使用此 XTRSET 方法,必須首先 安裝了  SQLT。導航到  sqlt/run 目錄並啟動 SQL*Plus,以發出所有或大部分 SQL 語句的應用程式使用者身份連線。然後,執行  sqlt/run/sqltxtrset.sql 指令碼。出現提示時,傳遞由  SQL_ID 或  HASH_VALUE 標識的 SQL 語句列表(以逗號分隔),以及  SQLTXPLAIN 的密碼。

# cd sqlt/run
# sqlplus [application_user]
SQL> START sqltxtrset.sql
List of SQL_IDs or HASH_VALUEs: 2yas208zgt5cv, 6rczmqdtg99mu, 8w8tjgac6tv12


高階方法和模組

除了 主要方法特殊方法,SQLT 還提供了一些其他功能。僅當 Oracle Support 要求時才使用這些高階方法和模組: PROFILEXGRAMXPLORE 和  XHUME。最後一個僅供 Oracle Support 使用,僅用於內部測試環境中。


PROFILE 方法

當效能較差的 SQL 語句正好有已知的更好的計劃時,在 10g 使用該 PROFILE 方法可以提供一個快速修復。這個更好的計劃可以位於相同或不同系統中的記憶體中,或者位於相同或不同系統的  AWR 中。換句話說,如果有更好的計劃,該方法允許使用自定義 SQL Profile “固定”該計劃。使用該方法之前,必須對您要為其提取和固定此計劃的 SQL 使用 主要方法中的任何一個。在 11g 或更高的版本你可以使用 SQL Plan Management (SPM) 來代替這個方法。

請注意,PROFILE 使用了  DBMS_SQLTUNE API,其是“SQL Tuning Advisor”的一部分,因此需要 Oracle Tuning Pack 的使用許可。僅當您的資料庫具有 Oracle Tuning Pack 的許可時才使用該 PROFILE 方法。

要使用該 PROFILE 方法,請確保 SQLT 已經 安裝並在 SOURCE 系統中使用,然後以  SYS 或  SQLTXPLAIN 身份連線到 SQL*Plus,執行  sqlt/utl/sqltprofile.sql 指令碼。它將要求提供先前 SQLT 執行的列表中的  STATEMENT_ID。選擇  STATEMENT_ID 後,它將要求提供可用計劃列表中的  PLAN_HASH_VALUE。這些執行計劃是在對 SQL 使用  XTRACT 或  XECUTE 時捕獲和儲存的。

在需要實施自定義 SQL Profile 的 TARGET 系統中,不需要安裝  SQLT

該 PROFILE 方法基本上包含 4 個步驟。

  1. 在 SOURCE 系統上使用  XTRACT 或  XECUTE
  2. 在 SOURCE 中執行  sqlt/utl/sqltprofile.sql,以生成自定義 SQL Profile 的指令碼。
  3. 檢視生成的指令碼並根據需要調整 SQL 文字。例如,在使用  XECUTE 時要移除由  /* ^^unique_id */ 生成的註釋。
  4. 在要固定計劃的 TARGET 系統中執行生成的指令碼。
# cd sqlt/utl
# sqlplus sqltxplain
SQL> START sqltprofile.sql [statement id] [plan hash value];
SQL> START sqltprofile.sql 32263 923669362;
SQL> START sqltprofile.sql 32263;
SQL> START sqltprofile.sql;

由該方法建立的自定義 SQL Profile 是基於計劃大綱資料完成的,因此它更穩定。如果您稍後要刪除此自定義 SQLProfile,您可以在 PROFILE 生成的指令碼內找到刪除命令。

如果尚未在 SOURCE 系統中安裝 SQLT 或者無法為有關 SQL 執行  XTRACT 或  XECUTE您可以使用  sqlt/utl/coe_xfr_sql_profile.sql 實現 PROFILE 方法提供的相同功能。該指令碼也使用了  DBMS_SQLTUNE;因此,需要 Oracle Tuning Pack 的許可。

如果您的系統為 11g 並且在考慮使用該 PROFILE 方法,請檢視由任何 主要方法生成的動態 Readme 檔案,並查詢 "Create SQL Plan Baseline from SQL Set" 部分內容。如動態 Readme 檔案中所述,您可以考慮透過 SQL Set 使用“SQL Plan Management SPM”。


XGRAM 模組

XGRAM 模組提供了修改 CBO 直方圖的功能,用以增強某些列的 CBO 統計資訊或作為測試用例的一部分。透過該模組,可以插入、更新或刪除直方圖或單個儲存桶。

實施 XGRAM 模組的指令碼的按字母排序列表:

  1. sqlt/utl/xgram/sqlt_delete_column_hgrm.sql
  2. sqlt/utl/xgram/sqlt_delete_hgrm_bucket.sql
  3. sqlt/utl/xgram/sqlt_delete_schema_hgrm.sql
  4. sqlt/utl/xgram/sqlt_delete_table_hgrm.sql
  5. sqlt/utl/xgram/sqlt_display_column_stats.sql
  6. sqlt/utl/xgram/sqlt_insert_hgrm_bucket.sql
  7. sqlt/utl/xgram/sqlt_set_bucket_size.sql
  8. sqlt/utl/xgram/sqlt_set_column_hgrm.sql
  9. sqlt/utl/xgram/sqlt_set_min_max_values.sql

XGRAM 是在 SQLT 安裝過程中自動安裝的。如果您想在  SQLT 以外使用這個模組,您只需要安裝一個單獨的 package 並使用以上指令碼(不依賴於  SQLTXADMIN)。


XPLORE 模組

如果在資料庫升級後 SQL 開始效能變差或者它可能產生明顯的錯誤結果,那麼使用 XPLORE 模組將有所幫助。如果將  optimizer_features_enable OFE 切換到升級之前的資料庫版本,SQL 重新執行正常或者產生不同的結果,您可以使用此 XPLORE 模組嘗試標識哪個特定 Optimizer 功能或修復引入了未預期的行為。確定特定故障有助於進一步故障排除或者對此特定功能和(或)修復執行更詳細的研究。

此模組透過切換初始化引數和 fix control 引數來搜尋計劃。

僅當滿足以下所有條件時才使用 XPLORE:

  1. 當使用“差”計劃時,SQL 執行效能差或者返回錯誤結果。
  2. 可以在測試系統上重新生成差計劃(最好沒有真實資料)。
  3. 可以透過切換 OFE 在測試系統上重新生成“好”計劃。
  4. 您需要將原因範圍縮小到特定引數或 bug fix control。
  5. 您對測試系統具有完全訪問許可權,包括  SYS 訪問許可權。

當符合以下任一條件時不要使用 XPLORE:

  1. SQL 語句可能導致資料損壞或被更新。
  2. 在 SQL 引用的表中存在大量資料。
  3. 執行 SQL 需要的時間可能超過幾秒鐘。

要安裝和使用該 XPLORE 模組,請閱讀相應的  sqlt/utl/xplore/readme.txt


XHUME 模組

該模組僅供 Oracle Support 使用,且只能在 Oracle 內部系統中使用。因為它會更新資料字典,而且 Oracle 不支援此操作。

XHUME 可用於搜尋僅舊版本的 Schema 物件統計資訊(與一個 SQL 相關)可以產生的計劃。使用  SQLT 建立測試用例 ( TC) 後,該 XHUME 模組將系統地還原先前版本的統計資訊,並透過執行正在研究的 SQL 來生成計劃。它將捕獲統計資訊的每個版本可以生成的計劃。然後生成報告,可用於瞭解執行計劃不穩定性的原因,或者查詢可用於建立 SQL Profile 或 SQL Plan Baseline 的執行計劃。

該模組永遠不能應用於生產系統,因為它會修改資料字典。僅能用於 Oracle 內部測試環境。

作為修改測試用例 ( TC) Schema 物件的建立日期的替代方案,可以在  TC 實施之前更改伺服器上的日期並在建立  TC 後重置為當前日期。這個臨時的先前日期至少要早一個月,這樣 Schema 物件統計資訊的所有歷史記錄的儲存時間均將新於  TC 物件建立時間。

僅當滿足以下所有下列條件時才使用 XHUME:

  1. 已知 SQL 有多個計劃並且其中一個或多個效能較差。
  2. Bind peeking 已經被排除不是導致計劃不穩定的故障。
  3. 對 CBO 引數的更改已經被排除不是導致計劃不穩定的故障。
  4. 您具有能產生已知計劃的  SQLT  TC(“好”或“差”計劃)。
  5. 您需要了解計劃的不穩定性或者正在查詢專用的已知“好”計劃。
  6. 您對 Oracle 內部測試系統具有完全訪問許可權,包括  SYS 訪問許可權。

當符合以下任一條件時不要使用 XHUME:

  1. SQL 語句可能導致資料損壞或被更新。
  2. 您只有一個生產環境中可以執行  TC
  3. 您沒有使用  SQLT 建立  TC
  4. 您對包含您  TC 的 Oracle 內部測試系統沒有  SYS 訪問許可權。
  5. Bind peeking 或  CBO 引數尚未被排除不是導致計劃不穩定的故障。

要安裝和使用此 XHUME 模組,請閱讀相應的  sqlt/utl/xhume/readme.txt


上傳SQLT檔案給Oracle技術支援

在SQLT執行後,它會產生一個zip格式的輸出檔案(這個檔案包含了SQLT相關的各種輸出)。這個檔案的檔名一般為:

sqlt_s<sqltrun#>_<method>_<sql_id>.zip

如果您已經使用一個特定的方法執行完一個SQLT,那麼您可以根據方法的名稱來找到輸出檔案。比如,下面的檔案就是使用XTRACT方法執行SQLT後產生的::

sqlt_s45774_xtract_fp48hh5dkm529.zip

如果輸出檔案的檔名是類似下面的格式:

sqlt_s50605_log.zip

那麼SQLT很可能並未成功執行,請檢查log檔案中的錯誤日誌.
一個正常的SQLT zip檔案一般包含下面的檔案(僅作參考) :

$ unzip -v sqlt_s45774_xtract_fp48hh5dkm529.zip
Archive: sqlt_s45774_xtract_fp48hh5dkm529.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
0 Stored 0 0% 04-09-2015 18:34 00000000 sqlt_s45774_10053_explain.trc
0 Stored 0 0% 04-09-2015 18:34 00000000 sqlt_s45774_10053_i1_c0_extract.trc
610 Stored 610 0% 04-09-2015 18:35 51c54175 sqlt_s45774_cell_state.zip
4187 Stored 4187 0% 04-09-2015 18:35 ded1bbdd sqlt_s45774_driver.zip
12814 Defl:N 2983 77% 04-09-2015 18:34 d359b6e7 sqlt_s45774_lite.html
18879 Stored 18879 0% 04-09-2015 18:35 8270f836 sqlt_s45774_log.zip
862169 Defl:N 121759 86% 04-09-2015 18:34 9c99af83 sqlt_s45774_main.html
3991 Stored 3991 0% 04-09-2015 18:35 d42245f2 sqlt_s45774_opatch.zip
12572 Defl:N 3645 71% 04-09-2015 18:34 2c6b2c0a sqlt_s45774_readme.html
199784 Stored 199784 0% 04-09-2015 18:35 93a85ee1 sqlt_s45774_tc.zip
394 Defl:N 293 26% 04-09-2015 18:35 a405bd8b sqlt_s45774_tc_script.sql
35 Stored 35 0% 04-09-2015 18:35 4e1901f1 sqlt_s45774_tc_sql.sql
52511 Stored 52511 0% 04-09-2015 18:35 2aee61c6 sqlt_s45774_tcx.zip
406 Stored 406 0% 04-09-2015 18:35 6df4be4d sqlt_s45774_trc.zip
216 Defl:N 113 48% 04-09-2015 18:35 213361e5 sqlt_s45774_xpand.sql
2319 Stored 2319 0% 04-09-2015 18:35 6f79e5b8 sqlt_s45774_sqldx.zip
-------- ------- --- -------
1170887 411515 65% 16 files

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12798004/viewspace-2680521/,如需轉載,請註明出處,否則將追究法律責任。