Autotrace工具使用——小工具,大用場
監控SQL語句,獲取執行計劃和執行成本,是每個Oracle開發人員與DBA所必須具備的能力之一。
當Oracle徹底進入CBO時代,我們面對一種全新的局面。一方面,基於資料統計量的CBO最佳化器,讓SQL語句執行計劃生成更加科學、更加有效。但是另一方面,最佳化器和最佳化模式也變得越來越複雜。我們對於一個SQL操作的執行計劃關注度和不確定程度同時在提升。
在這樣的情況下,Oracle提供了一系列的觀察SQL執行計劃的工具,其中Autotrace工具是最簡單和常用的工具。
簡單的說,Autotrace工具具有對SQL語句執行計劃進行分析輸出,以及評估執行使用資源。下面,我們對Autotrace工具從安裝、使用到結果分析進行簡單的介紹。
Autotrace安裝
首先,有一點需要說明:Autorace工具是在Oracle提供的Sqlplus視窗上使用。在如pl/sql developer之類的開發工具上是不能使用的。sqlplus雖然使用簡單,但是存在介面互動性差的特點。所以如果在Windows平臺上,可以在sqlplusw中使用autotrace。不過很遺憾的是,Oracle11g中,sqlplusw這個雞肋工具也已經不存在了。
還有一點建議的是,Autotrace是一個很安全的除錯工具。最好可以設定給所有Oracle可以訪問到(賦給public使用者)。但是,安裝的過程中因為存在賦許可權相關的內容,最好使用sys使用者登入。
安裝Autotrace工具,共分為兩個步驟:
步驟一、建立plan_table資料表。Plan_table是Oracle中一個很常用的資料表。它主要為各種工具提供裝載生成sql執行計劃的空間。
//使用Windows環境下做演示;
SQL*Plus: Release 10.2.0.1.0 - Production on 星期日 1月 30 20:22:07 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba;
已連線。
SQL> show user
USER 為 "SYS"
SQL> @?\rdbms\admin\utlxplan.sql
表已建立。
建立資料表:plan_table是透過指令碼utlxplan.sql實現的。該指令碼在${ORACLE_HOME}/rdbms/admin目錄下(注意windows和Linux/Unix目錄結構的差異)。
該端演示是使用sqlplusw進行的。其中?表示${ORACLE_HOME}目錄,在sqlplus中可以使用?來進行代表。如果在其他工具下,比如PL/SQL Developer下,可以在command視窗下使用 @{指令碼路徑}\utlxplan.sql。該指令碼只是一個create table plan_table命令,如果有興趣可以單獨開啟該檔案。
之後,透過公有同義詞和授權方法,將plan_table使用權給所有使用者。
SQL> create public synonym plan_table for plan_table;
SQL> grant all on plan_table to public;
授權成功。
步驟二、安裝autotrace指令碼
autotrace工具指令碼執行。在sqlplusw視窗下執行:
SQL> @?\sqlplus\admin\plustrce.sql //注意是plustrce.sql,不是plustrace.sql,筆者當年困惑了好久。。。
SQL>
SQL> drop role plustrace;
角色已刪除。
SQL> create role plustrace;
角色已建立。
SQL>
SQL> grant select on v_$sesstat to plustrace;
授權成功。
SQL> grant select on v_$statname to plustrace;
授權成功。
SQL> grant select on v_$mystat to plustrace;
授權成功。
SQL> grant plustrace to dba with admin option;
授權成功。
上面的指令碼中,是需要輸入的內容,其他都是輸入指令碼的語句。
最後,如果希望所有的使用者都能使用的autotrace工具,只要將plustrace角色賦給public就可以了。
SQL> grant plustrace to public;
授權成功。
設定結束後,我們已經完全安裝好autotrace工具了。下面簡單介紹一下,如果和使用autotrace工具。
使用autotrace
使用autorace是在sqlplus環境下,透過對autotrace的開啟關閉來設定。下面是一個簡單的例子。
SQL> conn scott/tiger@orcl
已連線。
SQL> set timing on; //設定其可以顯示出所有sql語句的執行時間,非常實用!!
SQL> set autotrace on; //設定所有的內容。
SQL> select count(*) from emp;
COUNT(*)
---------- ………………………語句執行結果
14
已用時間: 00: 00: 00.03
執行計劃
----------------------------------------------------------
Plan hash value: 2937609675
-------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time |
-------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 1 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | INDEX FULL SCAN| PK_EMP | 14 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------
統計資訊
----------------------------------------------------------
219 recursive calls
0 db block gets
41 consistent gets
1 physical reads
0 redo size
408 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
5 sorts (memory)
0 sorts (disk)
1 rows processed
SQL>
觀察這個輸出結果,我們可以看出結果分為下面幾個部分:
1、輸出結果:SQL語句的結果;
2、執行計劃;
3、統計資訊;
每個部分分別承擔了不同的地位和作用。但是有一點需要注意,輸出的執行計劃和依據,都是根據統計量進行評估的結果。實際執行的成本常常與執行計劃後面每個步驟的數值有差異。
對set autotrace命令,還存在一些變種,方便使用。
ü set autotrace on explain; 只顯示出執行計劃;
ü set autotrace on statistics; 只顯示出統計量資訊;
ü set autotrace traceonly; 不顯示查詢結果;
ü set autotrace traceonly explain; 只顯示執行語句,並且不會執行語句。最適合進行大表操作的預估算;
最後,我們介紹一下統計量的各部分含義。
專案 |
含義 |
備註 |
recursive calls |
遞迴呼叫SQL的個數;Oracle在執行這個SQL的時候,有時候會生成很多額外的SQL語句,這個就成為遞迴呼叫; |
|
db block gets |
邏輯讀,從資料buffer cache中讀取;進行current模式讀取; |
|
consistent gets |
邏輯讀,進行一致讀模式讀取; |
|
physical reads |
物理讀成本; |
|
redo size |
產生重做日誌大小 |
|
bytes sent via SQL*Net to client |
利用sql*net傳入到client的位元組數; |
|
bytes received via SQL*Net from client |
利用sql*net傳出client的位元組數; |
|
SQL*Net roundtrips to/from client |
|
|
sorts (memory) |
記憶體中排序空間使用; |
|
sorts (disk) |
物理儲存中排序空間使用; |
如果memory空間使用不足,是會使用disk的空間的; |
rows processed |
|
|
Autorace工具是我們經常使用的效能評測工具,能夠幫助解決很多問題。與其相同地位的還有dbms_xplan包方法和set events跟蹤事件檔案。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-686535/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【AUTOTRACE】SQL優化的重要工具--AUTOTRACESQL優化
- WordPress小工具功能如何使用
- Linux小工具之:tcpdump使用LinuxTCP
- Oracle最佳化工具——AutoTraceOracle
- 使用CoreData完成上班簽到小工具
- ORACLE 使用AUTOTRACE功能Oracle
- 汽車小工具
- 日常小工具
- 使用的runtime的一個小工具
- 聯盟小工具
- python小工具Python
- 串列埠小工具串列埠
- Android小工具Android
- 簡單小工具
- Oracle unwrap小工具Oracle
- 小工具,大作為
- 5 分鐘小工具:使用 dive 分析 docker 映象Docker
- Autotrace的設定與使用
- 前端實用小工具前端
- 遠端小工具PuTTY
- 有用的小工具收集
- Oracle常用的小工具Oracle
- msn小工具適用!
- 剪貼簿小工具
- 小工具網站集合網站
- Postman小工具大妙用Postman
- 使用 Docker 封裝 Python 小工具生成 GitBook PDFDocker封裝PythonGit
- 使用者autotrace 無法使用解決
- 開源一個製作小工具的小工具,順便求個 star
- 常用的小工具程式碼
- python內建小工具Python
- 撩妹小工具 MarvellousMouse
- Windows 上的 Jetty 小工具WindowsJetty
- (轉)oracle效能工具包Explain plan、Autotrace、TkprofOracleAI
- nc命令小材大用
- java小工具,使用Swing展示左樹右表結構Java
- 分享5款小工具,每個都可以免費使用
- python小工具: GUI開發工具 FlexxPythonGUIFlex