類似於this question。Oracle相當於Postgres EXPLAIN ANALYZE
我想在Oracle(10g)中得到一個詳細的查詢計劃和實際執行,類似於PostgreSQL中的EXPLAIN ANALYZE。有沒有相同的東西?
類似於this question。Oracle相當於Postgres EXPLAIN ANALYZE
我想在Oracle(10g)中得到一個詳細的查詢計劃和實際執行,類似於PostgreSQL中的EXPLAIN ANALYZE。有沒有相同的東西?
最簡單的方法是sql * plus中的autotrace。
SQL> set autotrace on exp
SQL> select count(*) from users ;
COUNT(*)
----------
137553
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=66 Card=1)
1 0 SORT (AGGREGATE)
2 1 INDEX (FAST FULL SCAN) OF 'SYS_C0062362' (INDEX (UNIQUE)
) (Cost=66 Card=137553)
或者,甲骨文確實有一個explain plan
聲明,你可以執行,然後查詢各種計劃表。最簡單的方法是使用DBMS_XPLAN
包:
SQL> explain plan for select count(*) from users ;
Explained.
SQL> SELECT * FROM table(DBMS_XPLAN.DISPLAY);
--------------------------------------------------------------
| Id | Operation | Name | Rows | Cost |
--------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 66 |
| 1 | SORT AGGREGATE | | 1 | |
| 2 | INDEX FAST FULL SCAN| SYS_C0062362 | 137K| 66 |
--------------------------------------------------------------
如果你是老學校,你可以查詢計劃表自己:
SQL> explain plan set statement_id = 'my_statement' for select count(*) from users;
Explained.
SQL> column "query plan" format a50
SQL> column object_name format a25
SQL> select lpad(' ',2*(level-1))||operation||' '||options "query plan", object_name
from plan_table
start with id=0 and statement_id = '&statement_id'
connect by prior id=parent_id
and prior statement_id=statement_id
Enter value for statement_id: my_statement
old 3: start with id=0 and statement_id = '&statement_id'
new 3: start with id=0 and statement_id = 'my_statement'
SELECT STATEMENT
SORT AGGREGATE
INDEX FAST FULL SCAN SYS_C0062362
甲骨文使用一個實用程序文件utlxpls.sql
是有出貨該查詢的更完整版本。請檢查$ORACLE_HOME/rdbms/admin
。
對於任何這些方法,您的DBA必須已經設置了適當的計劃表。
解釋和autotrace不會顯示運行語句時使用的實際計劃(如Postgres所做的那樣)。 –
你如何得到使用的實際計劃而不是預期的計劃?這似乎相當於沒有分析解釋。我覺得第二種方法很接近,除了默認值之外,還有其他計劃表可以查詢嗎? –
有沒有這樣的事情作爲預期的計劃不同於oracle或postgresql中的實際計劃。統計數據可能會有所不同,但計劃是要運行的。你也可以使用autotrace顯示統計信息 - 'set autotrace on statistics' - 但我沒有使用過(我無法提供一個例子,因爲DBA沒有在我的db上啓用該功能)。有關autotrace的更多信息,請參見[Oracle文檔](http://docs.oracle.com/cd/B19306_01/server.102/b14357/ch8.htm#sthref1499)。 –
我認爲這與查詢sys.v $ sql_plan或sys.v $ sql_plan_statistics有關,但它將很好地得到實際的sql運行,以便正確地獲取這些視圖。 –
我多年沒有使用過Oracle,但是您是否已經檢出了GATHER_PLAN_STATISTICS提示?請參閱第10-11頁:http://www.oracle.com/technetwork/database/bi-datawarehousing/twp-explain-the-explain-plan-052011-393674.pdf –
請參閱此處瞭解如何獲取實際值執行計劃:https://forums.oracle.com/message/10153875#10153875以獲得Postgres顯示的相同數量的細節,您需要跟蹤Oracle會話並查看tkprof生成的輸出。 –