您好,登錄后才能下訂單哦!
本篇內容主要講解“SQLT使用方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“SQLT使用方法是什么”吧!
在使用 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種主要方法來生成診斷詳細信息
XTRACT,
XECUTE,
XTRXEC,
XTRSBY,
XPLAIN,
XPREXT 和
XPREXC。
XTRACT,
XECUTE,
XTRXEC,
XTRSBY,
XPREXT 和
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。僅當其他方法都不可行時,再考慮使用
XPLAIN。
XPREXT 和
XPREXC 是類似于
XTRACT 和
XECUTE,但為了提高 SQLT
的性能它們禁了一些 SQLT
的特性。
如果您知道待分析 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
與 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
該方法合并了 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
如果需要分析在 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 中沒有的其他信息。
該方法是基于 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
假如您想使用
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
假如您想使用
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
先前的兩次執行(
主要方法中的任何一個)作為輸入并生成差異分析的報告。
其他特殊方法包括: TRCANLZR, TRCAXTR, TRCASPLIT 和 XTRSET。前三種方法基于一個單獨的 SQL trace 執行操作,最后一種對一組 SQL trace 執行操作。
當您具有兩個相似的系統 (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
該方法將 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
該方法執行的操作與 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
該方法將 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 從內存或 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 要求時才使用這些高級方法和模塊: PROFILE, XGRAM, XPLORE 和 XHUME。最后一個僅供 Oracle Support 使用,僅用于內部測試環境中。
當性能較差的 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 個步驟。
在 SOURCE 系統上使用 XTRACT 或 XECUTE。
在 SOURCE 中執行 sqlt/utl/sqltprofile.sql
,以生成自定義 SQL Profile 的腳本。
查看生成的腳本并根據需要調整 SQL 文本。例如,在使用
XECUTE 時要移除由 /* ^^unique_id */
生成的注釋。
在要固定計劃的 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 模塊提供了修改 CBO 直方圖的功能,用以增強某些列的 CBO 統計信息或作為測試用例的一部分。通過該模塊,可以插入、更新或刪除直方圖或單個存儲桶。
實施 XGRAM 模塊的腳本的按字母排序列表:
sqlt/utl/xgram/sqlt_delete_column_hgrm.sql
sqlt/utl/xgram/sqlt_delete_hgrm_bucket.sql
sqlt/utl/xgram/sqlt_delete_schema_hgrm.sql
sqlt/utl/xgram/sqlt_delete_table_hgrm.sql
sqlt/utl/xgram/sqlt_display_column_stats.sql
sqlt/utl/xgram/sqlt_insert_hgrm_bucket.sql
sqlt/utl/xgram/sqlt_set_bucket_size.sql
sqlt/utl/xgram/sqlt_set_column_hgrm.sql
sqlt/utl/xgram/sqlt_set_min_max_values.sql
XGRAM 是在 SQLT 安裝過程中自動安裝的。如果您想在 SQLT
以外使用這個模塊,您只需要安裝一個單獨的 package 并使用以上腳本(不依賴于 SQLTXADMIN
)。
如果在數據庫升級后 SQL 開始性能變差或者它可能產生明顯的錯誤結果,那么使用 XPLORE 模塊將有所幫助。如果將 optimizer_features_enable
OFE 切換到升級之前的數據庫版本,SQL 重新執行正常或者產生不同的結果,您可以使用此 XPLORE 模塊嘗試標識哪個特定 Optimizer 功能或修復引入了未預期的行為。確定特定故障有助于進一步故障排除或者對此特定功能和(或)修復執行更詳細的研究。
此模塊通過切換初始化參數和 fix control 參數來搜索計劃。
僅當滿足以下所有條件時才使用 XPLORE:
當使用“差”計劃時,SQL 執行性能差或者返回錯誤結果。
可以在測試系統上重新生成差計劃(最好沒有真實數據)。
可以通過切換 OFE 在測試系統上重新生成“好”計劃。
您需要將原因范圍縮小到特定參數或 bug fix control。
您對測試系統具有完全訪問權限,包括 SYS
訪問權限。
當符合以下任一條件時不要使用 XPLORE:
SQL 語句可能導致數據損壞或被更新。
在 SQL 引用的表中存在大量數據。
執行 SQL 需要的時間可能超過幾秒鐘。
要安裝和使用該 XPLORE 模塊,請閱讀相應的 sqlt/utl/xplore/readme.txt
。
該模塊僅供 Oracle Support 使用,且只能在 Oracle 內部系統中使用。因為它會更新數據字典,而且 Oracle 不支持此操作。
XHUME 可用于搜索僅舊版本的 Schema 對象統計信息(與一個 SQL 相關)可以產生的計劃。使用 SQLT
創建測試用例 (TC
) 后,該 XHUME 模塊將系統地還原先前版本的統計信息,并通過執行正在研究的 SQL 來生成計劃。它將捕獲統計信息的每個版本可以生成的計劃。然后生成報告,可用于了解執行計劃不穩定性的原因,或者查找可用于創建 SQL Profile 或 SQL Plan Baseline 的執行計劃。
該模塊永遠不能應用于生產系統,因為它會修改數據字典。僅能用于 Oracle 內部測試環境。
作為修改測試用例 (TC
) Schema 對象的創建日期的替代方案,可以在 TC
實施之前更改服務器上的日期并在創建 TC
后重置為當前日期。這個臨時的先前日期至少要早一個月,這樣 Schema 對象統計信息的所有歷史記錄的保存時間均將新于 TC
對象創建時間。
僅當滿足以下所有下列條件時才使用 XHUME:
已知 SQL 有多個計劃并且其中一個或多個性能較差。
Bind peeking 已經被排除不是導致計劃不穩定的故障。
對 CBO 參數的更改已經被排除不是導致計劃不穩定的故障。
您具有能產生已知計劃的 SQLT
TC
(“好”或“差”計劃)。
您需要了解計劃的不穩定性或者正在查找專用的已知“好”計劃。
您對 Oracle 內部測試系統具有完全訪問權限,包括 SYS
訪問權限。
當符合以下任一條件時不要使用 XHUME:
SQL 語句可能導致數據損壞或被更新。
您只有一個生產環境中可以運行 TC
。
您沒有使用 SQLT
創建 TC
。
您對包含您 TC
的 Oracle 內部測試系統沒有 SYS
訪問權限。
Bind peeking
或 CBO
參數尚未被排除不是導致計劃不穩定的故障。
要安裝和使用此 XHUME 模塊,請閱讀相應的 sqlt/utl/xhume/readme.txt
。
在SQLT運行后,它會產生一個zip格式的輸出文件(這個文件包含了SQLT相關的各種輸出)。這個文件的文件名一般為:
sqlt_s<sqltrun#>_<method>_<sql_id>.zip
如果您已經使用一個特定的方法執行完一個SQLT,那么您可以根據方法的名稱來找到輸出文件。比如,下面的文件就是使用XTRACT方法執行SQLT后產生的::
sqlt_s45774_xtract_fp48hh6dkm529.zip
如果輸出文件的文件名是類似下面的格式:
sqlt_s50605_log.zip
那么SQLT很可能并未成功執行,請檢查log文件中的錯誤日志.
一個正常的SQLT zip文件一般包含下面的文件(僅作參考) :
$ unzip -v sqlt_s45774_xtract_fp48hh6dkm529.zip Archive: sqlt_s45774_xtract_fp48hh6dkm529.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
到此,相信大家對“SQLT使用方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。