类似于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生成的输出。 –