6.获取执行计划方法

发布时间 2023-04-02 20:46:42作者: 竹蜻蜓vYv

1.explain plan

scott@ORCLPDB01 2023-04-02 19:49:41> explain plan for select empno,ename,dname from emp,dept where emp.deptno = dept.deptno;

Explained.

Elapsed: 00:00:00.01
scott@ORCLPDB01 2023-04-02 19:50:51> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 844388907

----------------------------------------------------------------------------------------
| Id  | Operation		     | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT	     |	       |    14 |   364 |     6	(17)| 00:00:01 |
|   1 |  MERGE JOIN		     |	       |    14 |   364 |     6	(17)| 00:00:01 |
|   2 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     4 |    52 |     2	 (0)| 00:00:01 |
|   3 |    INDEX FULL SCAN	     | PK_DEPT |     4 |       |     1	 (0)| 00:00:01 |
|*  4 |   SORT JOIN		     |	       |    14 |   182 |     4	(25)| 00:00:01 |
|   5 |    TABLE ACCESS FULL	     | EMP     |    14 |   182 |     3	 (0)| 00:00:01 |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   4 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")
       filter("EMP"."DEPTNO"="DEPT"."DEPTNO")

18 rows selected.

Elapsed: 00:00:00.03

2.dbms_xplan

2.1.

scott@ORCLPDB01 2023-04-02 19:49:41> explain plan for select empno,ename,dname from emp,dept where emp.deptno = dept.deptno;

Explained.

Elapsed: 00:00:00.01
scott@ORCLPDB01 2023-04-02 19:50:51> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 844388907

----------------------------------------------------------------------------------------
| Id  | Operation		     | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT	     |	       |    14 |   364 |     6	(17)| 00:00:01 |
|   1 |  MERGE JOIN		     |	       |    14 |   364 |     6	(17)| 00:00:01 |
|   2 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     4 |    52 |     2	 (0)| 00:00:01 |
|   3 |    INDEX FULL SCAN	     | PK_DEPT |     4 |       |     1	 (0)| 00:00:01 |
|*  4 |   SORT JOIN		     |	       |    14 |   182 |     4	(25)| 00:00:01 |
|   5 |    TABLE ACCESS FULL	     | EMP     |    14 |   182 |     3	 (0)| 00:00:01 |
----------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   4 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")
       filter("EMP"."DEPTNO"="DEPT"."DEPTNO")

18 rows selected.

Elapsed: 00:00:00.03

2.2.

scott@ORCLPDB01 2023-04-02 19:51:18> select empno,ename,dname from emp,dept where emp.deptno = dept.deptno;

     EMPNO ENAME      DNAME
---------- ---------- --------------
      7782 CLARK      ACCOUNTING
      7839 KING       ACCOUNTING
      7934 MILLER     ACCOUNTING
      7566 JONES      RESEARCH
      7902 FORD       RESEARCH
      7876 ADAMS      RESEARCH
      7369 SMITH      RESEARCH
      7788 SCOTT      RESEARCH
      7521 WARD       SALES
      7844 TURNER     SALES
      7499 ALLEN      SALES
      7900 JAMES      SALES
      7698 BLAKE      SALES
      7654 MARTIN     SALES

14 rows selected.

Elapsed: 00:00:00.00

scott@ORCLPDB01 2023-04-02 19:54:29> select * from table(dbms_xplan.display(null,null,'advanced'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Plan hash value: 844388907

----------------------------------------------------------------------------------------
| Id  | Operation		     | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT	     |	       |    14 |   364 |     6	(17)| 00:00:01 |
|   1 |  MERGE JOIN		     |	       |    14 |   364 |     6	(17)| 00:00:01 |
|   2 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     4 |    52 |     2	 (0)| 00:00:01 |
|   3 |    INDEX FULL SCAN	     | PK_DEPT |     4 |       |     1	 (0)| 00:00:01 |
|*  4 |   SORT JOIN		     |	       |    14 |   182 |     4	(25)| 00:00:01 |
|   5 |    TABLE ACCESS FULL	     | EMP     |    14 |   182 |     3	 (0)| 00:00:01 |
----------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1
   2 - SEL$1 / DEPT@SEL$1
   3 - SEL$1 / DEPT@SEL$1
   5 - SEL$1 / EMP@SEL$1

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      USE_MERGE(@"SEL$1" "EMP"@"SEL$1")
      LEADING(@"SEL$1" "DEPT"@"SEL$1" "EMP"@"SEL$1")
      FULL(@"SEL$1" "EMP"@"SEL$1")
      INDEX(@"SEL$1" "DEPT"@"SEL$1" ("DEPT"."DEPTNO"))
      OUTLINE_LEAF(@"SEL$1")
      ALL_ROWS
      DB_VERSION('19.1.0')
      OPTIMIZER_FEATURES_ENABLE('19.1.0')
      IGNORE_OPTIM_EMBEDDED_HINTS
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   4 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")
       filter("EMP"."DEPTNO"="DEPT"."DEPTNO")

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - (#keys=0) "DNAME"[VARCHAR2,14], "EMPNO"[NUMBER,22], "ENAME"[VARCHAR2,10]
   2 - "DEPT"."DEPTNO"[NUMBER,22], "DNAME"[VARCHAR2,14]
   3 - "DEPT".ROWID[ROWID,10], "DEPT"."DEPTNO"[NUMBER,22]
   4 - (#keys=1) "EMP"."DEPTNO"[NUMBER,22], "EMPNO"[NUMBER,22],
       "ENAME"[VARCHAR2,10]
   5 - "EMPNO"[NUMBER,22], "ENAME"[VARCHAR2,10], "EMP"."DEPTNO"[NUMBER,22]

Query Block Registry:
---------------------

  <q o="2" f="y"><n><![CDATA[SEL$1]]></n><f><h><t><![CDATA[DEPT]]></t><s><![CDATA[
	SEL$1]]></s></h><h><t><![CDATA[EMP]]></t><s><![CDATA[SEL$1]]></s></h></f></q>


60 rows selected.

2.3.

sys@ORCL 2023-04-02 19:57:39> col SQL_TEXT for a60;
sys@ORCL 2023-04-02 19:57:52> select sql_text,sql_id,hash_value,child_number from v$sql where sql_text like 'select empno,ename%'

SQL_TEXT						                   SQL_ID      HASH_VALUE CHILD_NUMBER
---------------------------------------------------------------------   ------------- ---------- ------------
select empno,ename,dname from emp,dept where emp.deptno = dept.deptno    7fnnxpj6prnu0 1297863488	 0

Elapsed: 00:00:00.01
sys@ORCL 2023-04-02 19:57:53> select * from table(dbms_xplan.display_cursor('7fnnxpj6prnu0',0,'advanced'));

PLAN_TABLE_OUTPUT   SQL_ID	
---------------------------------------------------------------------------------
select empno,ename,dname from emp,dept where emp.deptno = dept.deptno

Plan hash value: 844388907

----------------------------------------------------------------------------------------
| Id  | Operation		     | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT	     |	       |       |       |     6 (100)|	       |
|   1 |  MERGE JOIN		     |	       |    14 |   364 |     6	(17)| 00:00:01 |
|   2 |   TABLE ACCESS BY INDEX ROWID| DEPT    |     4 |    52 |     2	 (0)| 00:00:01 |
|   3 |    INDEX FULL SCAN	     | PK_DEPT |     4 |       |     1	 (0)| 00:00:01 |
|*  4 |   SORT JOIN		     |	       |    14 |   182 |     4	(25)| 00:00:01 |
|   5 |    TABLE ACCESS FULL	     | EMP     |    14 |   182 |     3	 (0)| 00:00:01 |
----------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$1
   2 - SEL$1 / DEPT@SEL$1
   3 - SEL$1 / DEPT@SEL$1
   5 - SEL$1 / EMP@SEL$1

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('19.1.0')
      DB_VERSION('19.1.0')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$1")
      INDEX(@"SEL$1" "DEPT"@"SEL$1" ("DEPT"."DEPTNO"))
      FULL(@"SEL$1" "EMP"@"SEL$1")
      LEADING(@"SEL$1" "DEPT"@"SEL$1" "EMP"@"SEL$1")
      USE_MERGE(@"SEL$1" "EMP"@"SEL$1")
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   4 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")
       filter("EMP"."DEPTNO"="DEPT"."DEPTNO")

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - "DNAME"[VARCHAR2,14], "EMPNO"[NUMBER,22], "ENAME"[VARCHAR2,10]
   2 - "DEPT"."DEPTNO"[NUMBER,22], "DNAME"[VARCHAR2,14]
   3 - "DEPT".ROWID[ROWID,10], "DEPT"."DEPTNO"[NUMBER,22]
   4 - (#keys=1) "EMP"."DEPTNO"[NUMBER,22], "EMPNO"[NUMBER,22],
       "ENAME"[VARCHAR2,10]
   5 - "EMPNO"[NUMBER,22], "ENAME"[VARCHAR2,10], "EMP"."DEPTNO"[NUMBER,22]

Query Block Registry:
---------------------

  <q o="2" f="y"><n><![CDATA[SEL$1]]></n><f><h><t><![CDATA[DEPT]]></t><s><![CDATA[
	SEL$1]]></s></h><h><t><![CDATA[EMP]]></t><s><![CDATA[SEL$1]]></s></h></f></q>



65 rows selected.

Elapsed: 00:00:00.17

2.4.

scott@ORCLPDB01 2023-04-02 20:12:33> select count(*) from t1;

  COUNT(*)
----------
	 3

Elapsed: 00:00:00.00
scott@ORCLPDB01 2023-04-02 20:12:49> conn / as sysdba
Connected.
sys@ORCL 2023-04-02 20:12:58> select sql_text,sql_id,version_count,executions from v$sqlarea where sql_text like 'select count(*) from t1%';

SQL_TEXT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID	      VERSION_COUNT EXECUTIONS
------------- ------------- ----------
select count(*) from t1
5bc0v4my7dvr5		  1	     1


Elapsed: 00:00:00.02
sys@ORCL 2023-04-02 20:13:00> col SQL_TEXT for a45;
sys@ORCL 2023-04-02 20:13:12> r
  1* select sql_text,sql_id,version_count,executions from v$sqlarea where sql_text like 'select count(*) from t1%'

SQL_TEXT				      SQL_ID	    VERSION_COUNT EXECUTIONS
--------------------------------------------- ------------- ------------- ----------
select count(*) from t1 		      5bc0v4my7dvr5		1	   1

Elapsed: 00:00:00.02
sys@ORCLPDB01 2023-04-02 20:35:30> select * from scott.emp;

     EMPNO ENAME      JOB	       MGR HIREDATE		      SAL	COMM	 DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH      CLERK	      7902 1980-12-17 00:00:00	      800		     20
      7499 ALLEN      SALESMAN	      7698 1981-02-20 00:00:00	     1600	 300	     30
      7521 WARD       SALESMAN	      7698 1981-02-22 00:00:00	     1250	 500	     30
      7566 JONES      MANAGER	      7839 1981-04-02 00:00:00	     2975		     20
      7654 MARTIN     SALESMAN	      7698 1981-09-28 00:00:00	     1250	1400	     30
      7698 BLAKE      MANAGER	      7839 1981-05-01 00:00:00	     2850		     30
      7782 CLARK      MANAGER	      7839 1981-06-09 00:00:00	     2450		     10
      7788 SCOTT      ANALYST	      7566 1987-04-19 00:00:00	     3000		     20
      7839 KING       PRESIDENT 	   1981-11-17 00:00:00	     5000		     10
      7844 TURNER     SALESMAN	      7698 1981-09-08 00:00:00	     1500	   0	     30
      7876 ADAMS      CLERK	      7788 1987-05-23 00:00:00	     1100		     20
      7900 JAMES      CLERK	      7698 1981-12-03 00:00:00	      950		     30
      7902 FORD       ANALYST	      7566 1981-12-03 00:00:00	     3000		     20
      7934 MILLER     CLERK	      7782 1982-01-23 00:00:00	     1300		     10

14 rows selected.

Elapsed: 00:00:00.01
sys@ORCLPDB01 2023-04-02 20:35:39> exec dbms_workload_repository.create_snapshot();

PL/SQL procedure successfully completed.

Elapsed: 00:00:01.41
sys@ORCLPDB01 2023-04-02 20:35:49> col SQL_TEXT for a45;
sys@ORCLPDB01 2023-04-02 20:36:15> select sql_text,sql_id,version_count,executions from v$sqlarea where sql_text like 'select * from emp%';

SQL_TEXT				      SQL_ID	    VERSION_COUNT EXECUTIONS
--------------------------------------------- ------------- ------------- ----------
select * from emp			      a2dk8bdn0ujx7		1	   1

Elapsed: 00:00:00.02
sys@ORCLPDB01 2023-04-02 20:36:40> alter system flush shared_pool;

System altered.

Elapsed: 00:00:00.15
sys@ORCLPDB01 2023-04-02 20:37:17> select sql_text,sql_id,version_count,executions from v$sqlarea where sql_text like 'select * from emp%';

no rows selected

Elapsed: 00:00:00.02

sys@ORCLPDB01 2023-04-02 20:37:51> select * from table(dbms_xplan.display_awr('a2dk8bdn0ujx7'));

no rows selected

Elapsed: 00:00:00.07

3.sqlplus中的autotrace

 

4.10046事件

5.10053事件

6.AWR报告或者statspack报告

7.一些现成的脚本