SQLT
概覽
SQLTXPLAIN
,也稱為
SQLT
,是 Oracle Server Technologies Center of Expertise - ST CoE 提供的一款工具。
SQLT
主要方法 透過輸入的一個 SQL 語句,可輸出一組診斷檔案。這些檔案通常用於診斷效能不佳或者產生錯誤結果的 SQL 語句。
對於sql語句的調優,SQLT 需要您有一些專業的知識來進行分析。對於許多問題來說我們推薦首先使用SQL Health Check 來檢查您的SQL,假如不能解決再嘗試使用SQLT。SQLHC的詳細介紹請看:
一旦
安裝,便可透過向
SQLT
傳遞一個包含 SQL 語句指令碼(包括繫結變數)的文字檔案或者其
SQL_ID
,對 SQL 語句進行分析。SQL_ID 可在 AWR 和 ASH 的報告中找到,HASH_VALUE 出現在 SQL_TRACE 的輸出中(SQL 文字的上面以"hv="的標誌來識別)。您也能在 V$SQL 檢視中發現這些欄位。請參照接下來的文件:
SQLT
主要方法 會連線到資料庫,收集執行計劃、基於成本的 Optimizer CBO 統計資訊、Schema 物件後設資料、效能統計資訊、配置引數和會影響正在分析的 SQL 效能的其他元素。這些方法會對有問題的SQL_ID產生一攬子輸出,包括一個html格式的"main"報表。關於如何使用"main"報表,您可以參考下面的文件:
SQLT
可以使用 Oracle Diagnostic 和(或)Oracle Tuning Packs,前提是您的資料庫需要具有這兩個軟體包的許可證。這兩個軟體包向
SQLT
工具提供了增強的功能。在
SQLT
安裝期間,您可以指定是否其中一個軟體包在您的資料庫被授權使用。如果一個都沒有,
SQLT
仍會提供一些基本資訊,用於最開始的 SQL 效能診斷。
安全模式
SQLT
在
安裝的過程中會建立兩個使用者和一個角色。這些使用者和角色的名字都是固定的。
SQLT
repository 是由使用者
SQLTXPLAIN
管理的。
SQLT
的使用者每次使用
SQLT
提供的
主要方法時都要提供
SQLTXPLAIN
的密碼。
SQLTXPLAIN
使用者被賦予了以下系統許可權:
- CREATE SESSION
- CREATE TABLE
SQLT
包含的 PL/SQL 程式包以及檢視都是由使用者
SQLTXADMIN
管理的。
SQLTXADMIN
使用者處於鎖定狀態並且由一個隨機產生的密碼保護。
SQLTXADMIN
使用者被賦予了以下系統許可權:
- ADMINISTER SQL MANAGEMENT OBJECT
- ADMINISTER SQL TUNING SET
- ADVISOR
- ALTER SESSION
- ANALYZE ANY
- SELECT ANY DICTIONARY
- SELECT_CATALOG_ROLE
所有
SQLT
的使用者在使用
SQLT
提供的
主要方法之前必須被賦予
SQLT_USER_ROLE
這個角色。
SQLT_USER_ROLE
角色被賦予了以下系統許可權:
- ADVISOR
- SELECT_CATALOG_ROLE
12c 在預設情況下 SYS 使用者不能作為
SQLT
的使用者,因為 PL/SQL 安全模型上改變的原因。
為了處理這個改變,
SQLTADMIN
需要在 SYS 上被授予
INHERIT PRIVILEGES
許可權。
GRANT INHERIT PRIVILEGES ON USER SYS TO SQLTXADMIN
更多詳細的內容請參見 Oracle? Database PL/SQL Language Reference 12c Release 1 (12.1) - Invoker's Rights and Definer's Rights (AUTHID Property) and in Oracle? Database Security Guide 12c Release 1 (12.1) - Managing Security for Definer's Rights and Invoker's Rights
安裝
SQLT
SQLT
安裝在其自己的 schema
SQLTXPLAIN
和
SQLTXADMIN
下。它不會將任何物件安裝到應用程式 schema 中。您可以在 UNIX、Linux 或 Windows 平臺,Oracle DB 10.2、11.1、11.2 及更高版本中安裝此版本的 SQLT。對於所有“應用於:”的資訊,請參照文件215187.1。
安裝步驟:
-
解除安裝先前版(可選)。
該可選步驟將刪除所有廢棄的
SQLTXPLAIN/SQLTXADMIN
schema 物件,併為全新安裝準備環境。如果要保留 SQLT Repository 的現有內容,請跳過此步驟(推薦)。
# cd sqlt/install
# sqlplus / as sysdba
SQL> START sqdrop.sql
- 以
SYS
身份連線資料庫並執行安裝指令碼
sqlt/install/sqcreate.sql
。
# cd sqlt/install
# sqlplus / as sysdba
SQL> START sqcreate.sql
在安裝期間,系統將要求您輸入以下引數值:
- 可選連線識別符號(當安裝在一個可插拔資料庫上時是必須的)
在一些受限訪問的系統中,您可能需要指定連線識別符號,例如
@PROD
。如果不需要連線識別符號,則不要輸入任何資料,只需單擊Enter鍵。什麼也不鍵入是最常使用的安裝方法。
當安裝在一個可插拔資料庫上時連線識別符號是必須提供的。
-
SQLTXPLAIN
密碼。
在大多數系統中區分大小寫。
-
SQLTXPLAIN
預設表空間。
從可用的永久表空間列表中,選擇
SQLT
Repository 的
SQLTXPLAIN
應使用的表空間。它必須具有 50MB 以上的可用空間。
-
SQLTXPLAIN
臨時表空間。
從可用的臨時表空間列表中,選擇
SQLTXPLAIN
臨時操作和臨時物件應使用的表空間。
- 可選應用程式使用者。
這是發出要分析 SQL 語句的使用者。例如,在 EBS 系統上,指定為
APPS
;在 Siebel 上,應指定為 SIEBEL;在 People Soft 上,應指定為
SYSADM
。系統不會要求您輸入此使用者的密碼。也可以在安裝該工具後新增其他的
SQLT
使用者,方法為:授予他們角色
SQLT_USER_ROLE
。
- 授權的 Oracle Pack。(T,D 或 N)
可以指定
T
表示 Oracle Tuning;
D
表示 Oracle Diagnostic,或
N
表示都沒有。如果選擇
T
或
D
,SQLT 可以在它生成的診斷檔案中包含授權的內容。預設值為
T
。如果選擇
N
,SQLT 將只安裝限定的功能。
如果需要靜默安裝,可以使用下面三個選項來傳遞所有 6 個安裝引數:
- 在檔案中。
首先使用一個指令碼進行值的預先定義,類似於示例指令碼
sqlt/install/sqdefparams.sql
。然後使用
sqlt/install/sqcsilent.sql
,而不是
sqlt/install/sqcreate.sql
。
# cd sqlt/install
# sqlplus / as sysdba
SQL> START sqdefparams.sql
SQL> START sqcsilent.sql
- 命令列。
執行
sqlt/install/sqcsilent2.sql
,而不是
sqlt/install/sqcreate.sql
。前者以內嵌形式輸入 6 個安裝引數。
# cd sqlt/install
# sqlplus / as sysdba
SQL> START sqcsilent2.sql '' sqltxplain USERS TEMP '' T
- 在 Oracle 內部安裝。
執行
sqlt/install/sqcinternal.sql
,而不是
sqlt/install/sqcreate.sql
。前者首先執行
sqlt/install/sqdefparams.sql
,然後是
sqlt/install/sqcsilent.sql
。
# cd sqlt/install
# sqlplus / as sysdba
SQL> START sqcinternal.sql
假如您需要更多關於安裝問題的幫助,您能從下面的論壇得到幫助:
解除安裝
SQLT
解除安裝
SQLT
會同時移除
SQLT
Repository 以及所有
SQLTXPLAIN/SQLTXADMIN
schema 物件。另外還會刪除
SQLTXPLAIN
和
SQLTXADMIN
使用者。要解除安裝
SQLT
,只需以 SYS 身份連線,執行
sqlt/install/sqdrop.sql
。
# cd sqlt/install
# sqlplus / as sysdba
SQL> START sqdrop.sql
升級
SQLT
如果在系統中已安裝先前版本的
SQLT
,則可以將
SQLT
升級到其最新版本,同時部分保留現有
SQLT
Repository 的一些物件。然後可以使用新遷移的
SQLT
Repository 來恢復 CBO 統計資訊,或者在
SQLT
的新舊執行程式之間執行
COMPARE。
要升級
SQLT
,只需執行
安裝,而不用執行可選
解除安裝步驟。
如果升級失敗,可能是先前的
SQLT
版本太舊而無法升級。在這種情況下,請先繼續
解除安裝
SQLT
,然後執行全新
安裝。