Oracle執(zhí)行計(jì)劃查看方法匯總及優(yōu)劣對(duì)比詳解
在 Oracle 數(shù)據(jù)庫中,查看執(zhí)行計(jì)劃是優(yōu)化 SQL 語句性能的重要工具。以下是幾種常用的查看執(zhí)行計(jì)劃的方法及其優(yōu)劣比較:
1. 使用 EXPLAIN PLAN FOR 和 DBMS_XPLAN.DISPLAY
方法
執(zhí)行 EXPLAIN PLAN FOR
語句:
EXPLAIN PLAN FOR SELECT * FROM your_table WHERE your_column = 'some_value';
查看執(zhí)行計(jì)劃:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
優(yōu)點(diǎn)
- 簡(jiǎn)單易用:適用于大多數(shù)情況,操作簡(jiǎn)單。
- 詳細(xì)信息:可以提供詳細(xì)的執(zhí)行計(jì)劃信息,包括操作類型、成本、行數(shù)等。
缺點(diǎn)
- 不反映實(shí)際執(zhí)行:
EXPLAIN PLAN
只是模擬執(zhí)行計(jì)劃,不一定反映實(shí)際執(zhí)行情況。 - 需要權(quán)限:需要
EXPLAIN PLAN
權(quán)限。
2. 使用 DBMS_XPLAN.DISPLAY_CURSOR
方法
執(zhí)行 SQL 語句:
SELECT * FROM your_table WHERE your_column = 'some_value';
查看執(zhí)行計(jì)劃:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ALLSTATS LAST'));
優(yōu)點(diǎn)
- 反映實(shí)際執(zhí)行:查看的是實(shí)際執(zhí)行的計(jì)劃,更能反映真實(shí)的性能情況。
- 詳細(xì)統(tǒng)計(jì)信息:可以提供實(shí)際的執(zhí)行統(tǒng)計(jì)信息,如 I/O 次數(shù)、CPU 時(shí)間等。
缺點(diǎn)
- 需要執(zhí)行 SQL:必須先執(zhí)行 SQL 語句,才能查看執(zhí)行計(jì)劃。
- 依賴共享池:只能查看在共享池中的 SQL 語句的執(zhí)行計(jì)劃。
3. 使用 AUTOTRACE(僅限 SQL*Plus)
方法
啟用 AUTOTRACE:
SET AUTOTRACE ON EXPLAIN;
執(zhí)行 SQL 語句:
SELECT * FROM your_table WHERE your_column = 'some_value';
禁用 AUTOTRACE:
SET AUTOTRACE OFF;
優(yōu)點(diǎn)
- 集成在 SQL*Plus:適用于 SQL*Plus 用戶,操作簡(jiǎn)便。
- 即時(shí)反饋:執(zhí)行 SQL 語句時(shí)立即顯示執(zhí)行計(jì)劃。
缺點(diǎn)
- 僅限 SQL*Plus:只能在 SQL*Plus 中使用。
- 功能有限:不如
DBMS_XPLAN.DISPLAY
提供的信息詳細(xì)。
4. 使用 V$SQL_PLAN 視圖
方法
找到 SQL 語句的 SQL_ID:
SELECT sql_id, sql_text FROM v$sql WHERE sql_text LIKE '%your_sql_statement%';
查詢執(zhí)行計(jì)劃:
SELECT * FROM v$sql_plan WHERE sql_id = 'your_sql_id';
優(yōu)點(diǎn)
- 靈活性高:可以直接查詢視圖,靈活度高。
- 實(shí)時(shí)信息:可以查看當(dāng)前正在執(zhí)行的 SQL 語句的執(zhí)行計(jì)劃。
缺點(diǎn)
- 復(fù)雜性:需要手動(dòng)查詢視圖,操作相對(duì)復(fù)雜。
- 信息冗余:返回的信息較多,需要篩選有用的部分。
5. 使用 Oracle Enterprise Manager (OEM)
方法
- 登錄 OEM。
- 導(dǎo)航到 SQL 性能頁面。
- 輸入 SQL 語句并查看執(zhí)行計(jì)劃。
優(yōu)點(diǎn)
- 圖形界面:提供圖形化的用戶界面,易于理解和操作。
- 綜合信息:可以查看多種性能指標(biāo),不僅僅是執(zhí)行計(jì)劃。
缺點(diǎn)
- 需要 OEM:需要安裝和配置 Oracle Enterprise Manager。
- 資源消耗:圖形界面可能消耗更多系統(tǒng)資源。
6. 使用 DBMS_XPLAN.DISPLAY_AWR
方法
找到 SQL 語句的 SQL_ID 和 PLAN_HASH_VALUE:
SELECT sql_id, plan_hash_value FROM dba_hist_sqlstat WHERE sql_text LIKE '%your_sql_statement%';
查詢執(zhí)行計(jì)劃:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('your_sql_id', 'your_plan_hash_value'));
優(yōu)點(diǎn)
- 歷史信息:可以查看 AWR 中的歷史執(zhí)行計(jì)劃,有助于長(zhǎng)期性能分析。
- 詳細(xì)統(tǒng)計(jì):提供詳細(xì)的執(zhí)行統(tǒng)計(jì)信息。
缺點(diǎn)
- 需要 AWR:需要 AWR 功能開啟,且需要相應(yīng)的權(quán)限。
- 復(fù)雜性:操作相對(duì)復(fù)雜,需要查找 SQL_ID 和 PLAN_HASH_VALUE。
7. 使用事件 10046 跟蹤
方法
啟用事件 10046 跟蹤:
對(duì)于當(dāng)前會(huì)話:
ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';
對(duì)于特定的會(huì)話(假設(shè) SID 為 123,SERIAL# 為 456):
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(123, 456, TRUE);
執(zhí)行 SQL 語句:
SELECT * FROM your_table WHERE your_column = 'some_value';
禁用事件 10046 跟蹤:
對(duì)于當(dāng)前會(huì)話:
ALTER SESSION SET EVENTS '10046 trace name context off';
對(duì)于特定的會(huì)話(假設(shè) SID 為 123,SERIAL# 為 456):
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(123, 456, FALSE);
查看跟蹤文件:
查找跟蹤文件的位置,通常在
user_dump_dest
參數(shù)指定的目錄下。
使用
tkprof
工具格式化跟蹤文件:
tkprof trace_file.trc output_file.txt explain=your_username/your_password
查看生成的 output_file.txt
文件,其中包含詳細(xì)的執(zhí)行計(jì)劃和性能信息。
優(yōu)點(diǎn)
- 詳細(xì)信息:提供詳細(xì)的執(zhí)行計(jì)劃、執(zhí)行時(shí)間和等待事件等信息,有助于深入分析性能問題。
- 靈活性:可以針對(duì)特定的會(huì)話或當(dāng)前會(huì)話啟用跟蹤。
- 歷史信息:可以保留長(zhǎng)時(shí)間的跟蹤信息,便于后續(xù)分析。
缺點(diǎn)
- 性能開銷:?jiǎn)⒂酶檿?huì)增加系統(tǒng)開銷,特別是在高負(fù)載情況下。
- 復(fù)雜性:操作相對(duì)復(fù)雜,需要手動(dòng)啟用和禁用跟蹤,以及使用
tkprof
格式化跟蹤文件。 - 文件管理:需要管理和清理生成的跟蹤文件,以免占用過多磁盤空間。
8. 使用 STATISTICS_LEVEL=ALL
方法
設(shè)置統(tǒng)計(jì)級(jí)別為 ALL:
ALTER SESSION SET STATISTICS_LEVEL=ALL;
執(zhí)行 SQL 語句:
SELECT * FROM your_table WHERE your_column = 'some_value';
查看執(zhí)行計(jì)劃和統(tǒng)計(jì)信息:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ALLSTATS LAST'));
優(yōu)點(diǎn)
- 詳細(xì)統(tǒng)計(jì)信息:可以提供詳細(xì)的執(zhí)行計(jì)劃和統(tǒng)計(jì)信息,包括 I/O 次數(shù)、CPU 時(shí)間等。
- 反映實(shí)際執(zhí)行:查看的是實(shí)際執(zhí)行的計(jì)劃,更能反映真實(shí)的性能情況。
- 操作簡(jiǎn)單:只需設(shè)置統(tǒng)計(jì)級(jí)別并執(zhí)行 SQL 語句即可。
缺點(diǎn)
- 性能開銷:設(shè)置
STATISTICS_LEVEL
為ALL
會(huì)增加執(zhí)行 SQL 語句的性能開銷。 - 臨時(shí)設(shè)置:僅對(duì)當(dāng)前會(huì)話有效,需要在每個(gè)會(huì)話中手動(dòng)設(shè)置。
總結(jié)
方法 | 優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|---|
EXPLAIN PLAN FOR + DBMS_XPLAN.DISPLAY | 簡(jiǎn)單易用,詳細(xì)信息 | 不反映實(shí)際執(zhí)行,需要權(quán)限 |
DBMS_XPLAN.DISPLAY_CURSOR | 反映實(shí)際執(zhí)行,詳細(xì)統(tǒng)計(jì)信息 | 需要執(zhí)行 SQL,依賴共享池 |
AUTOTRACE | 集成在 SQL*Plus,即時(shí)反饋 | 僅限 SQL*Plus,功能有限 |
V$SQL_PLAN | 靈活性高,實(shí)時(shí)信息 | 復(fù)雜性高,信息冗余 |
Oracle Enterprise Manager (OEM) | 圖形界面,綜合信息 | 需要 OEM,資源消耗 |
DBMS_XPLAN.DISPLAY_AWR | 歷史信息,詳細(xì)統(tǒng)計(jì) | 需要 AWR,復(fù)雜性 |
事件 10046 跟蹤 | 詳細(xì)信息,靈活性高,歷史信息 | 性能開銷,復(fù)雜性,文件管理 |
ALTER SESSION SET STATISTICS_LEVEL=ALL | 詳細(xì)統(tǒng)計(jì)信息,反映實(shí)際執(zhí)行,操作簡(jiǎn)單 | 性能開銷,臨時(shí)設(shè)置 |
適用場(chǎng)景
EXPLAIN PLAN FOR
+DBMS_XPLAN.DISPLAY
:適用于簡(jiǎn)單的查詢優(yōu)化,快速查看執(zhí)行計(jì)劃。DBMS_XPLAN.DISPLAY_CURSOR
:適用于已經(jīng)執(zhí)行的 SQL 語句,需要查看實(shí)際執(zhí)行情況。AUTOTRACE
:適用于 SQL*Plus 用戶,需要快速反饋。V$SQL_PLAN
:適用于需要靈活查詢執(zhí)行計(jì)劃的場(chǎng)景。- Oracle Enterprise Manager (OEM):適用于需要圖形化界面和綜合性能信息的場(chǎng)景。
DBMS_XPLAN.DISPLAY_AWR
:適用于需要查看歷史執(zhí)行計(jì)劃的場(chǎng)景。- 事件 10046 跟蹤:適用于需要深入分析性能問題,特別是涉及執(zhí)行時(shí)間和等待事件的場(chǎng)景。
STATISTICS_LEVEL=ALL
:適用于需要詳細(xì)統(tǒng)計(jì)信息和反映實(shí)際執(zhí)行情況的場(chǎng)景,操作簡(jiǎn)單但有性能開銷。
以上就是Oracle執(zhí)行計(jì)劃查看方法匯總及優(yōu)劣對(duì)比的詳細(xì)內(nèi)容,更多關(guān)于Oracle執(zhí)行計(jì)劃查看方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決Windows10不能安裝Oracle?11g的問題(附詳細(xì)安裝教程)
這篇文章介紹了解決Windows10不能安裝Oracle?11g的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04oracle11g 通過修改配置文件方式連接遠(yuǎn)程數(shù)據(jù)庫的方法
這篇文章主要介紹了oracle11g 通過修改配置文件方式連接遠(yuǎn)程數(shù)據(jù)庫的方法,需要的朋友可以參考下2017-04-04ORACLE學(xué)習(xí)筆記-添加更新數(shù)據(jù)函數(shù)篇
Oracle系統(tǒng),即是以O(shè)racle關(guān)系數(shù)據(jù)庫為數(shù)據(jù)存儲(chǔ)和管理作為構(gòu)架基礎(chǔ),構(gòu)建出的數(shù)據(jù)庫管理系統(tǒng)。世界第一個(gè)支持SQL語言的商業(yè)數(shù)據(jù)庫,定位于高端工作站,以及作為服務(wù)器的小型計(jì)算機(jī),Oracle公司的整個(gè)產(chǎn)品線包括數(shù)據(jù)庫服務(wù)器、企業(yè)商務(wù)應(yīng)用套件、應(yīng)用開發(fā)和決策支持工具2014-08-08Oracle視圖的創(chuàng)建、使用以及刪除操作方法大全
這篇文章主要給大家介紹了關(guān)于Oracle視圖的創(chuàng)建、使用以及刪除操作方法的相關(guān)資料,視圖是基于一個(gè)表或多個(gè)表或視圖的邏輯表,本身不包含數(shù)據(jù),通過它可以對(duì)表里面的數(shù)據(jù)進(jìn)行查詢和修改,需要的朋友可以參考下2023-12-12使用PL/SQL Developer連接Oracle數(shù)據(jù)庫的方法圖解
之前因?yàn)轫?xiàng)目的原因需要使用Oracle數(shù)據(jù)庫,由于時(shí)間有限沒辦法從基礎(chǔ)開始學(xué)習(xí),而且oracle操作的命令界面又太不友好,于是就找到了PL/SQL Developer這個(gè)很好用的軟件來間接使用數(shù)據(jù)庫,下面簡(jiǎn)單介紹一下如何用這個(gè)軟件連接Oracle數(shù)據(jù)庫2016-12-12深入探討:Oracle中如何查詢正鎖表的用戶以及釋放被鎖的表的方法
本篇文章是對(duì)Oracle中查詢正鎖表的用戶以及釋放被鎖的表的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Oracle中部分不兼容對(duì)象遷移到OceanBase的三種處理方式
本文總結(jié)分析了 3 種 Oracle 對(duì)象和 OB 對(duì)象不兼容時(shí)的處理方法和提前統(tǒng)計(jì)發(fā)現(xiàn)的操作方式,在遷移前提前發(fā)現(xiàn)這類問題能有效避免在遷移過程中報(bào)錯(cuò)的問題,需要的朋友可以參考下2024-03-03