惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
IT之家
IT之家
博客园_首页
人人都是产品经理
人人都是产品经理
博客园 - Franky
I
InfoQ
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
月光博客
月光博客
Microsoft Security Blog
Microsoft Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
雷峰网
雷峰网
博客园 - 聂微东
N
Netflix TechBlog - Medium
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
D
Docker

博客园 - liuqun

oracle优化7(如何干预执行计划 - hints) oracle优化6(使用sql_trace/10046事件进行数据库诊断) oracle优化5(用索引提高效率) oracle优化3(访问Table的方式) oracle优化2(选用适合的ORACLE优化器) oracle优化1(数据库、数据表、数据表I/O优化原则) Oracle常用命令14(.net / java代码调用(sql代码、程序包过程)) Oracle常用命令13(数据库的启动、关闭) Oracle常用命令12(导入:imp、导出:exp) Oracle常用命令11(触发器) Oracle常用命令10(程序包) Oracle常用命令9(函数) Oracle常用命令8(过程) Oracle常用命令7(游标) Oracle常用命令6(PL/SQL) Oracle常用命令5(同义词、视图、索引) Oracle常用命令4(表分区) Oracle常用命令3(DDL、DML、TCL、DCL、序列) Oracle常用命令2(用户、角色管理)
oracle优化4(sql语句性能诊断,sql执行计划)
liuqun · 2011-04-03 · via 博客园 - liuqun

什么是优化

优化是选择最有效的执行计划来执行SQL语句的过程,这是在处理任何数据的语句(SELECT,INSERT,UPDATEDELETE)中的一个重要步骤。对Oracle来说,执行这样的语句有许多不同的方法,譬如说,将随着以什么顺序访问哪些表或索引的不同而不同。所使用的执行计划可以决定语句能执行得有多快。Oracle中称之为优化器(Optimizer)的组件用来选择这种它认为最有效的执行计划。

什么是执行计划

在运行一条DML语句时,oracle可能需要执行多个步骤。例如,从数据库物理文件中获取数据行,或将数据整理为提交语句的用户所需的形式。Oracle运行一条语句的所有步骤被告称为语句的执行计划(execution plan)。执行计划中包括语句所需数据所在数据表的访问方式,以及数据表的访问顺序(即关联顺序)。

如果查看执行计划

EXPLAIN PLAN

SQL*PLUS autotrace feature

EXPLAIN PLAN

1解释执行计划

执行文件:rdbms/admin/utlxplan.sql

Explain plan for select语句

2查看执行计划的信息

1)、查询plan_table

select * from plan_table;

2)、使用脚本 utlxpls.sql

3)、使用包:dbms_xplan

select * from table(dbms_xplan.display);

说明:产生的计划需要按照从里到外,从上到下的次序解读分析的结果. EXPLAIN PLAN分析的结果是用缩进的格式排列的, 最内部的操作将被最先解读, 如果两个操作处于同一层中,带有最小操作号的将被首先执行

如:

SELECT * FROM dept, emp WHERE emp.deptno = dept.deptno

14 rows selected.

Execution Plan

----------------------------------------------------------

   0      SELECT STATEMENT Optimizer=CHOOSE

   1    0   NESTED LOOPS

   2    1     TABLE ACCESS (FULL) OF 'EMP'

   3    1     TABLE ACCESS (BY INDEX ROWID) OF 'DEPT'

   4    3       INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)

通过以上分析,可以得出实际的执行步骤是:

1.  TABLE ACCESS (FULL) OF 'EMP'

2.  INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE)

3.  TABLE ACCESS (BY INDEX ROWID) OF 'DEPT'

4.  NESTED LOOPS (JOINING 1 AND 3)

SQL*PLUS autotrace feature

使用autotrace

语法:set autotrace { off | on | traceonly | explain | statistics  }

SET AUTOTRACE OFF 此为默认值,即关闭Autotrace
SET AUTOTRACE ON EXPLAIN
只显示执行计划
SET AUTOTRACE ON STATISTICS  
只显示执行的统计信息
SET AUTOTRACE ON
包含2,3两项内容

SET AUTOTRACE TRACEONLY   ON相似,但不显示语句的执行结果。

Autotrace执行计划的各列的涵义
ID_PLUS_EXP
:每一步骤的行号
PARENT_ID_PLUS_EXP
:每一步的Parent的级别号
PLAN_PLUS_EXP
:实际的每步
OBJECT_NODE_PLUS_EXP
   Dblink或并行查询时才会用到

AUTOTRACE Statistics

常用列解释
db block gets
:从buffer cache中读取的block的数量
consistent gets
:从buffer cache中读取的undo数据的block的数量
physical reads
:从磁盘读取的block的数量
redo size DML
:生成的redo的大小
sorts (memory)
:在内存执行的排序量
sorts (disk)
在磁盘上执行的排序量