10g
*****************************************
dbms_xplan包通过dbmsutil.sql脚本创建
■ DISPLAY - 从PLAN_TABLE中提取执行计划
■ DISPLAY_CURSOR - 从V$SQL_PLAN中提取执行计划,需要V$SQL_PLAN, V$SESSION,V$SQL_PLAN_STATISTICS_ALL上的权限
■ DISPLAY_AWR - 从AWR库中的SQL语句的提取执行计划,需要DBA_HIST_SQL_PLAN(WRH$_SQL_PLAN), DBA_HIST_SQLTEXT(WRH$_SQLTEXT),V$DATABASE上的权限,
■ DISPLAY_SQLSET - 从SQL tuning set中的SQL语句的执行计划,需要ALL_SQLSET_STATEMENTS和ALL_SQLSET_PLANS上的权限(这两个视图是WRI$上建立的一个视图)
SQL> EXPLAIN PLAN FOR 2 select * 3 from regions a, countries b 4 where a.region_id = b.region_id 5 and a.region_name = 'Americas'; Explained. SQL> SET LINESIZE 130 SQL> SET PAGESIZE 0 SQL> SELECT * FROM table(DBMS_XPLAN.DISPLAY); Plan hash value: 2128980668 ------------------------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 6 | 168 | 2 (0)| 00:00:01 | | 1 | NESTED LOOPS | | 6 | 168 | 2 (0)| 00:00:01 | | 2 | INDEX FULL SCAN | COUNTRY_C_ID_PK | 25 | 350 | 1 (0)| 00:00:01 | |* 3 | TABLE ACCESS BY INDEX ROWID| REGIONS | 1 | 14 | 1 (0)| 00:00:01 | |* 4 | INDEX UNIQUE SCAN | REG_ID_PK | 1 | | 0 (0)| 00:00:01 | ------------------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter("A"."REGION_NAME"='Americas') 4 - access("A"."REGION_ID"="B"."REGION_ID") 17 rows selected. |
SQL> select count(*) 2 from regions a, countries b 3 where a.region_id = b.region_id 4 and a.region_name = 'Americas'; COUNT(*) ---------- 5 SQL> SET PAGESIZE 0 SQL> SET LINESIZE 130 SQL> SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR); SQL_ID 59fkr5bn6q9kq, child number 0 ------------------------------------- SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR) Plan hash value: 3713220770 -------------------------------------------------------------------- | Id | Operation | Name | Cost | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 24 | | 1 | COLLECTION ITERATOR PICKLER FETCH| DISPLAY_CURSOR | | -------------------------------------------------------------------- Note ----- - cpu costing is off (consider enabling it) 17 rows selected. |
SQL> select /* ZHANGQIAOC */count(*) 2 from regions a, countries b 3 where a.region_id = b.region_id 4 and a.region_name = 'Americas'; COUNT(*) ---------- 5 SQL> select sql_id, child_number, sql_text 2 from v$sql 3 where sql_text like '%ZHANGQIAOC%'; SQL_ID CHILD_NUMBER ------------- ------------ SQL_TEXT --------------------------------------------------------------------------------------------------- bz0qkc2n9n614 0 select sql_id, child_number, sql_text from v$sql where sql_text like '%ZHANGQIAOC%' 4rwway8kx55j3 0 select /* ZHANGQIAOC */count(*) from regions a, countries b where a.region_id = b.region_id a nd a.region_name = 'Americas' 5m4s3h69a1rgj 0 select /* ZHANGQIAOC */count(*) from regions a, countries b where a.region_id = b.region_id a SQL> select * from table(dbms_xplan.display_cursor('4rwway8kx55j3',0)); PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------------------------- SQL_ID 4rwway8kx55j3, child number 0 ------------------------------------- select /* ZHANGQIAOC */count(*) from regions a, countries b where a.region_id = b.region_id and a.region_name = 'Americas' Plan hash value: 1080168104 ------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 2 (100)| | PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------------------------- | 1 | SORT AGGREGATE | | 1 | 17 | | | | 2 | NESTED LOOPS | | 6 | 102 | 2 (0)| 00:00:01 | | 3 | INDEX FULL SCAN | COUNTRY_C_ID_PK | 25 | 75 | 1 (0)| 00:00:01 | |* 4 | TABLE ACCESS BY INDEX ROWID| REGIONS | 1 | 14 | 1 (0)| 00:00:01 | |* 5 | INDEX UNIQUE SCAN | REG_ID_PK | 1 | | 0 (0)| | ------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 4 - filter("A"."REGION_NAME"='Americas') PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------------------------- 5 - access("B"."REGION_ID"="A"."REGION_ID") 24 rows selected. |
SQL> ALTER TABLE countries PARALLEL; Table altered. SQL> EXPLAIN PLAN for 2 select /*+ full(a) full(b) */* 3 from regions a, countries b 4 where a.region_id = b.region_id 5 and a.region_name = 'Americas' 6 order by b.country_id; Explained. SQL> SELECT * FROM table(DBMS_XPLAN.DISPLAY); Plan hash value: 2078065449 ---------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib | ---------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 6 | 168 | 7 (29)| 00:00:01 | | | | | 1 | PX COORDINATOR | | | | | | | | | | 2 | PX SEND QC (ORDER) | :TQ10002 | 6 | 168 | 7 (29)| 00:00:01 | Q1,02 | P->S | QC (ORDER) | | 3 | SORT ORDER BY | | 6 | 168 | 7 (29)| 00:00:01 | Q1,02 | PCWP | | | 4 | PX RECEIVE | | 6 | 168 | 6 (17)| 00:00:01 | Q1,02 | PCWP | | | 5 | PX SEND RANGE | :TQ10001 | 6 | 168 | 6 (17)| 00:00:01 | Q1,01 | P->P | RANGE | |* 6 | HASH JOIN | | 6 | 168 | 6 (17)| 00:00:01 | Q1,01 | PCWP | | | 7 | BUFFER SORT | | | | | | Q1,01 | PCWC | | | 8 | PX RECEIVE | | 1 | 14 | 3 (0)| 00:00:01 | Q1,01 | PCWP | | | 9 | PX SEND BROADCAST | :TQ10000 | 1 | 14 | 3 (0)| 00:00:01 | | S->P | BROADCAST | |* 10 | TABLE ACCESS FULL | REGIONS | 1 | 14 | 3 (0)| 00:00:01 | | | | | 11 | PX BLOCK ITERATOR | | 25 | 350 | 2 (0)| 00:00:01 | Q1,01 | PCWC | | | 12 | INDEX FAST FULL SCAN| COUNTRY_C_ID_PK | 25 | 350 | 2 (0)| 00:00:01 | Q1,01 | PCWP | | ---------------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 6 - access("A"."REGION_ID"="B"."REGION_ID") 10 - filter("A"."REGION_NAME"='Americas') 25 rows selected. |
SQL> SQL> CREATE VIEW PLAN AS SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); View created. SQL> SELECT * FROM PLAN; Plan hash value: 2078065449 ---------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib | ---------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 6 | 168 | 7 (29)| 00:00:01 | | | | | 1 | PX COORDINATOR | | | | | | | | | | 2 | PX SEND QC (ORDER) | :TQ10002 | 6 | 168 | 7 (29)| 00:00:01 | Q1,02 | P->S | QC (ORDER) | | 3 | SORT ORDER BY | | 6 | 168 | 7 (29)| 00:00:01 | Q1,02 | PCWP | | | 4 | PX RECEIVE | | 6 | 168 | 6 (17)| 00:00:01 | Q1,02 | PCWP | | | 5 | PX SEND RANGE | :TQ10001 | 6 | 168 | 6 (17)| 00:00:01 | Q1,01 | P->P | RANGE | |* 6 | HASH JOIN | | 6 | 168 | 6 (17)| 00:00:01 | Q1,01 | PCWP | | | 7 | BUFFER SORT | | | | | | Q1,01 | PCWC | | | 8 | PX RECEIVE | | 1 | 14 | 3 (0)| 00:00:01 | Q1,01 | PCWP | | | 9 | PX SEND BROADCAST | :TQ10000 | 1 | 14 | 3 (0)| 00:00:01 | | S->P | BROADCAST | |* 10 | TABLE ACCESS FULL | REGIONS | 1 | 14 | 3 (0)| 00:00:01 | | | | | 11 | PX BLOCK ITERATOR | | 25 | 350 | 2 (0)| 00:00:01 | Q1,01 | PCWC | | | 12 | INDEX FAST FULL SCAN| COUNTRY_C_ID_PK | 25 | 350 | 2 (0)| 00:00:01 | Q1,01 | PCWP | | ---------------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 6 - access("A"."REGION_ID"="B"."REGION_ID") 10 - filter("A"."REGION_NAME"='Americas') 25 rows selected. |
DBMS_XPLAN.DISPLAY(TABLE_NAME IN VARCHAR2 DEFAULT 'PLAN_TABLE',
STATEMENT_ID IN VARCHAR2 DEFAULT NULL,
FORMAT IN VARCHAR2 DEFAULT 'TYPICAL',
FILTER_PREDS IN VARCHAR2 DEFAULT NULL); --9i没有此参数
9i无此方法
DBMS_XPLAN.DISPLAY_AWR(SQL_ID IN VARCHAR2,
PLAN_HASH_VALUE IN NUMBER DEFAULT NULL,
DB_ID IN NUMBER DEFAULT NULL,
FORMAT IN VARCHAR2 DEFAULT TYPICAL);
9i无此方法
DBMS_XPLAN.DISPLAY_CURSOR(SQL_ID IN VARCHAR2 DEFAULT NULL,
CHILD_NUMBER IN NUMBER DEFAULT NULL,
FORMAT IN VARCHAR2 DEFAULT 'TYPICAL');
9i无此方法
DBMS_XPLAN.DISPLAY_SQLSET(SQLSET_NAME IN VARCHAR2,
SQL_ID IN VARCHAR2,
PLAN_HASH_VALUE IN NUMBER := NULL,
FORMAT IN VARCHAR2 := 'TYPICAL',
SQLSET_OWNER IN VARCHAR2 := NULL)
RETURN DBMS_XPLAN_TYPE_TABLE PIPELINED;
SELECT * FROM table (
DBMS_XPLAN.DISPLAY_SQLSET(
'OLTP_optimization_0405','gwp663cqh5qbf', 3693697075));
SELECT * FROM table (
DBMS_XPLAN.DISPLAY_SQLSET(
'OLTP_optimization_0405','gwp663cqh5qbf'));
SELECT * FROM table (
DBMS_XPLAN.DISPLAY_SQLSET(
'OLTP_optimization_0405', 'gwp663cqh5qbf', NULL, 'ALLSTATS LAST');
另外,调优SQL的常用语句
--SQL文本
select * from v$sqltext where sql_id='4pf5z8cnggkrs';
--SGA中的执行计划
select * from v$sql_plan where sql_id='4pf5z8cnggkrs';
--AWR中捕获的执行计划
SELECT * FROM TABLE(dbms_xplan.display_awr('f2zymmdhuzvxj'));
--绑定变量的值
select b.SQL_TEXT,value_string,child_number,name,datatype_string
from v$sql_bind_capture a,v$sqlarea b
where a.SQL_ID = b.SQL_ID
and A.SQL_ID='4pf5z8cnggkrs'
order by CHILD_NUMBER,POSITION;
--其他信息
select child_number,executions,optimizer_mode,optimizer_cost,parsing_user_id,
parsing_schema_id,address,hash_value
from v$sql
where sql_id = '7d5xrwggyz1hp';
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/611609/viewspace-743710/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/611609/viewspace-743710/