ORACLE执行计划和SQL调优

合集下载

查看ORACLE执行计划的几种常用方法

查看ORACLE执行计划的几种常用方法

查看ORACLE执⾏计划的⼏种常⽤⽅法SQL的执⾏计划实际代表了⽬标SQL在Oracle数据库内部的具体执⾏步骤,作为调优,只有知道了优化器选择的执⾏计划是否为当前情形下最优的执⾏计划,才能够知道下⼀步往什么⽅向。

执⾏计划的定义:执⾏⽬标SQL的所有步骤的组合。

我们⾸先列出查看执⾏计划的⼀些常⽤⽅法:1. explain plan命令PL/SQL Developer中通过快捷键F5就可以查看⽬标SQL的执⾏计划了。

但其实按下F5后,实际后台调⽤的就是explain plan命令,相当于封装了该命令。

explain plan使⽤⽅法:(1) 执⾏explain plan for + SQL(2) 执⾏select * from table(dbms_xplan.display);实验表准备:SQL> desc test1;Name Null Type----------------------------------------- -------- ----------------------------T1ID NOT NULL NUMBER(38)T1V VARCHAR2(10)SQL> desc test2;Name Null Type----------------------------------------- -------- ----------------------------T2ID NOT NULL NUMBER(38)T2V VARCHAR2(10)实验:SQL> set linesize 100SQL> explain plan for select t1id, t1v, t2id, t2v from test1, test2 where test1.t1id = test2.t2id;Explained.第⼀步使⽤explain plan对⽬标SQL进⾏了explain,第⼆步使⽤select * from table(dbms_xplan.display)语句展⽰出该SQL的执⾏计划。

oracle之使用OracleDeveloper对SQL进行简单调优(二)

oracle之使用OracleDeveloper对SQL进行简单调优(二)

oracle 之使⽤OracleDeveloper 对SQL 进⾏简单调优(⼆)使⽤Oracle Developer 对SQL 进⾏简单进⾏简单调优调优Oracle Developer 是Oracle 提供的免费数据库连接⼯具,⾏内数据中⼼⽣产操作间默认使⽤该⼯具执⾏SQL ,如遇到现场需要对⽣产SQL 进⾏优化查询的需要熟悉Oracle Developer 的基本使⽤,本⽂结合Oracle Developer ⼯具展⽰如何查看SQL ,如果进⾏基本优化。

⼀、 Oracle Developer 和 Oracle 命令1. Oracle DeveloperSQL 解释Oracle Developer ⼯具⾥⾯的“解释”功能只针对当前的sql 进⾏了⼀个预估的资源消耗以及执⾏路径,参考数据是系统⾥存在的表统计信息。

结果显⽰与实际执⾏可能存在差异,且表的详细信息,在其它功能下显⽰更为详细。

SQL 优化指导Oracle Developer ⼯具⾥⾯的sql 优化指导功能,对要优化分析的sql 进⾏了真实的执⾏,该功能展⽰的结果,包含了部分解释功能的结果,也就是根据表⾥⾯的统计信息预估的执⾏计划;它⼀般还包含优化建议;另外还展⽰了该sql 的实际执⾏计划和并⾏执⾏时的sql 性能结果。

SQL 跟踪Oracle Developer ⼯具⾥⾯的sql 跟踪功能,对要优化分析的sql 进⾏了实际的执⾏,详细的展⽰了执⾏过程中对 索引 CPU 缓存IO 和块的改变情况,也列出了执⾏过程中涉及的数据量和资源消耗;此功能包含了sql 解释中的表统计信息。

2. Oracle 命令autotraceOracle 命令 autotrace 是分析sql 的真实执⾏计划,查看sql 执⾏效率的⼀个⽐较简单⼜⽅便的⼯具。

它实际上是对sql 实际执⾏过程信息的⼀个收集和信息统计。

set autotrace on 开启autotrace ,后⾯执⾏sql 语句会⾃动显⽰sql 执⾏结果和跟踪信息。

Maclean Liu的Oracle性能优化讲座 第一回-真正读懂Oracle SQL执行计划Execution Plan

Maclean Liu的Oracle性能优化讲座 第一回-真正读懂Oracle SQL执行计划Execution Plan

E-Rows 是优化器评估返回的行数 A-Rows 是实际执行时返回的行数
alter session set STATISTICS_LEVEL = TYPICAL;


使用DBMS_XPLAN包

Access Path访问路径分析:访问数据是用TableScan还是index (FFS) 对返回的行结果集做例如Join的进一步处理,以便返回行给客户端

SQL语句的执行最终会落实为Oracle执行步骤的组合 =》【SQL执行计划】
Oracle Database
内存
磁盘存 储
取出 加工結果

2. SQLPLUS AUTOTRACE • 除set autotrace traceonly explain外均实际执行SQL,但仍未必 是真实计划 • 必须要有plan_table 3. SQL TRACE • 需要启用10046或者SQL_TRACE • 一般用tkprof看的更清楚些,当然10046里本身也有执行计划信息

Email:liu.maclean@ Blog: Founder of Shanghai Oracle Users Group - SHOUG Over 7 years experience with Oracle RDBMS technology Over 8 years experience with Linux technology

How to Find Maclean Liu?


读懂执行计划有什么用呢?

执行计划贯穿Oracle调优始终 了解执行计划的真实执行过程,将有助 于优化 对于Oracle的原理理解有一定帮助 解决部分同学心中多年的疑惑 读懂执行计划,SQL调优的第一步

oracle性能优化面试题

oracle性能优化面试题

oracle性能优化面试题一、概述Oracle性能优化是数据库管理中的重要环节,通过合理的调整和优化,可以提升数据库的运行效率和响应速度,提高系统的稳定性和可用性。

在面试中,常常会涉及到Oracle性能优化相关的问题,下面是一些常见的Oracle性能优化面试题。

二、索引优化1. 请说明什么是索引?索引是一种特殊的数据库对象,它能够加快数据库的查询速度。

索引由一个或多个列组成,它们的值会按照一定的顺序进行排序,并建立索引数据结构以支持快速查找。

2. 如何确定何时创建索引?创建索引需要权衡查询的速度和更新的效率。

一般来说,当查询的频率远远大于更新的频率时,可以考虑创建索引。

同时也需要考虑查询的字段是否经常被使用,以及查询的覆盖度等因素。

3. 请说明常见的索引类型?常见的索引类型包括唯一索引、非唯一索引、主键索引、聚簇索引和非聚簇索引等。

4. 如何选择合适的索引?选择合适的索引需要考虑查询的频率、更新的频率、查询的覆盖度等因素。

同时还需要考虑索引的大小以及对于查询的影响。

三、SQL优化1. 请说明常见的SQL调优手段?常见的SQL调优手段包括使用合适的索引、优化SQL语句的写法、使用合适的连接方式、减少数据库的访问次数等。

2. 如何使用执行计划进行SQL优化?执行计划是Oracle数据库为了优化查询语句而生成的查询执行计划,其中包含了查询的操作步骤、连接方式、访问路径等信息。

可以通过查看执行计划来判断查询是否需要进行优化,并通过优化查询的方式来提升性能。

3. 如何优化大表查询?优化大表查询可以通过分页查询、增加条件过滤、创建合适的索引等方式来进行。

同时也可以考虑对大表进行分区或者分表的方式来提高查询效率。

四、资源优化1. 如何优化内存资源?优化内存资源可以通过调整SGA和PGA的大小来实现。

SGA包括共享池、数据库缓存和重做日志缓冲等,可以通过调整参数来合理分配内存。

PGA是为每个会话分配的私有内存区域,可以通过调整PGA_AGGREGATE_TARGET参数来优化。

oracle执行计划怎么看

oracle执行计划怎么看

oracle执行计划怎么看Oracle执行计划怎么看。

Oracle数据库系统是当今世界上应用最广泛的关系型数据库管理系统之一,它的执行计划对于数据库性能的优化和调优起着至关重要的作用。

执行计划是Oracle数据库在执行SQL语句时生成的一种执行策略,它告诉我们数据库是如何执行SQL语句的,通过分析执行计划,我们可以了解SQL语句的执行效率,找到优化的空间,提高数据库的性能。

本文将介绍如何查看Oracle执行计划,以及如何解读执行计划,帮助大家更好地理解和优化SQL语句的执行效率。

一、查看执行计划的方法。

1. 使用EXPLAIN PLAN语句。

在Oracle中,我们可以使用EXPLAIN PLAN语句来获取SQL语句的执行计划。

具体的语法如下:EXPLAIN PLAN FOR。

SQL语句;然后可以使用如下语句来查看执行计划:SELECT FROM TABLE(DBMS_XPLAN.DISPLAY);2. 使用AUTOTRACE。

在SQLPlus或者SQL Developer中,我们可以使用AUTOTRACE功能来查看SQL语句的执行计划。

在SQLPlus中,可以使用如下语句开启AUTOTRACE功能:SET AUTOTRACE ON;然后执行需要查看执行计划的SQL语句即可。

3. 使用SQL Developer。

对于Oracle数据库开发人员来说,SQL Developer是一个非常常用的工具,它提供了直观的图形界面来查看SQL语句的执行计划。

在SQL Developer中,执行SQL语句后,可以通过右键菜单选择“Explain Plan”来查看执行计划。

二、执行计划的解读。

1. 表的访问方式。

在执行计划中,我们可以看到表的访问方式,包括全表扫描、索引扫描、唯一索引扫描等。

全表扫描意味着数据库将会扫描整张表,而索引扫描则表示数据库将会利用索引来快速定位数据,不同的访问方式对于SQL语句的性能影响很大。

Oracle优化之执行计划解析

Oracle优化之执行计划解析

Oracle应用优化
SQL语句的解析过程 什么是SQL执行计划 了解RBO和CBO 如何解读执行计划 NC SQL规范
什么是SQL执行计划
所谓执行计划,就是对一个DML SQL做出一份怎样去 完成任务的执行路径。基于不同的优化方式,执行计划可能 有很大的差异。
什么是SQL执行计划
Oracle应用优化
NC SQL规范
6、避免在索引列上使用计算
使用substr字符串函数的,如: select * from staff_member where substr(last_name,1,4)=’FRED’; ‘%’通配符在第一个字符的,如: select * from staff_member where first_name like ‘%DON’; 字符串连接(||)的,如: select * from staff_member where first_name||’’=’DONALD’
QA
NC SQL规范
8、避免使用IS NULL
设计中尽量避免字段为NULL,不能用NULL代表业 务意义。 例:总帐 凭证的记帐标示等 NC系统里常见(col1=’’ or colx is null)造成诸多效 率问题
NC SQL规范
9、将产生排他锁的操作放到事务的最后
锁等待的避免 死锁产生及其避免
Oracle应用优化
SQL语句的解析过程 什么是SQL执行计划 了解RBO和CBO 如何解读执行计划 NC SQL规范
如何解读执行计划
执行计划阅读方法 执行方法描述 术语解释
执行计划阅读方法
以树状格式进行读取,通过递归进入最底层 ,然后再返回该树的父(第一)。
实际演示
执行方法描述

oracle sql优化常用的15种方法

oracle sql优化常用的15种方法

oracle sql优化常用的15种方法1. 使用合适的索引索引是提高查询性能的重要手段。

在设计表结构时,根据查询需求和数据特点合理地添加索引。

可以通过创建单列索引、复合索引或者位图索引等方式来优化SQL查询。

2. 确保SQL语句逻辑正确SQL语句的逻辑错误可能会导致低效查询。

因此,在编写SQL语句前,需要仔细分析查询条件,确保逻辑正确性。

3. 使用连接替代子查询在一些场景下,使用连接(JOIN)操作可以替代子查询,从而减少查询的复杂度。

连接操作能够将多个数据集合合并为一个结果集,避免多次查询和表的扫描操作。

4. 避免使用通配符查询通配符查询(如LIKE '%value%')在一些情况下可能导致全表扫描,性能低下。

尽量使用前缀匹配(LIKE 'value%')或者使用全文索引进行模糊查询。

5. 注意选择合适的数据类型选择合适的数据类型有助于提高SQL查询的效率。

对于整型数据,尽量使用小范围的数据类型,如TINYINT、SMALLINT等。

对于字符串数据,使用CHAR字段而不是VARCHAR,可以避免存储长度不一致带来的性能问题。

6. 优化查询计划查询计划是数据库在执行SQL查询时生成的执行计划。

通过使用EXPLAIN PLAN命令或者查询计划工具,可以分析查询计划,找出性能瓶颈所在,并对其进行优化。

7. 减少磁盘IO磁盘IO是影响查询性能的重要因素之一。

可以通过增加内存缓存区(如SGA)、使用高速磁盘(如SSD)、使用合适的文件系统(如ASM)等方式来减少磁盘IO。

8. 分区表对于大数据量的表,可以考虑使用分区表进行查询优化。

分区表可以将数据按照某个规则分散到不同的存储区域,从而减少查询范围和加速查询。

9. 批量操作尽量使用批量操作而不是逐条操作,可以减少数据库的事务处理开销,提高SQL执行效率。

可以使用INSERT INTO SELECT、UPDATE、DELETE等批量操作语句来实现。

oracle执行计划

oracle执行计划

oracle执行计划Oracle执行计划。

Oracle执行计划是数据库系统中非常重要的一个概念,它指的是Oracle数据库在执行SQL语句时所选择的最优执行路径。

通过执行计划,我们可以了解到Oracle是如何执行SQL语句的,从而可以对SQL语句进行优化,提高数据库的性能。

在本文中,我们将深入探讨Oracle执行计划的相关内容,包括执行计划的基本概念、执行计划的生成方式、执行计划的解读和优化等方面。

首先,我们来了解一下执行计划的基本概念。

执行计划是Oracle数据库优化器根据SQL语句和数据库对象的统计信息,通过优化算法生成的一种执行路径。

这个执行路径包括了SQL语句的执行顺序、访问方法、连接方式等信息。

通过执行计划,我们可以知道数据库是如何执行SQL语句的,从而可以对SQL语句进行优化,提高数据库的性能。

接下来,我们将介绍执行计划是如何生成的。

在Oracle数据库中,执行计划是由优化器根据SQL语句和数据库对象的统计信息生成的。

优化器会根据SQL语句的复杂度、表的大小、索引的选择等因素,选择最优的执行路径。

在生成执行计划时,优化器会考虑多种执行路径,并选择成本最低的执行路径作为最终的执行计划。

然后,我们将讨论如何解读执行计划。

执行计划通常以树状结构的方式呈现,包括了SQL语句的执行顺序、访问方法、连接方式等信息。

我们可以通过执行计划了解到SQL语句的执行路径,从而可以对SQL语句进行优化。

例如,我们可以通过执行计划了解到是否使用了索引、是否进行了全表扫描等信息,从而可以对SQL语句进行优化,提高数据库的性能。

最后,我们将介绍如何优化执行计划。

通过执行计划,我们可以了解到SQL语句的执行路径,从而可以对SQL语句进行优化。

例如,我们可以通过执行计划了解到是否使用了索引、是否进行了全表扫描等信息,从而可以对SQL语句进行优化,提高数据库的性能。

在优化执行计划时,我们可以考虑对SQL语句进行重写、创建索引、收集统计信息等方式,从而提高数据库的性能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORACLE执行计划和SQL调优
Probed Table
n Probed Table(被探查表):该表又称为内 层表(INNER TABLE)。在我们从驱动表中 得到具体一行的数据后,在该表中寻找 符合连接条件的行。所以该表应当为大 表(实际上应该为返回较大row source的 表)且相应的列上应该有索引。
ORACLE执行计划和SQL调优
可选择性(selectivity)
n 比较一下列中唯一键的数量和表中的行 数,就可以判断该列的可选择性。如果 该列的”唯一键的数量/表中的行数”的 比值越接近1,则该列的可选择性越高, 该列就越适合创建索引,同样索引的可 选择性也越高。在可选择性高的列上进 行查询时,返回的数据就较少,比较适 合使用索引查询。
ORACLE执行计划和 SQL调优
2020/11/3
ORACLE执行计划和SQL调优
内容安排
n 第一部分:背景知识 n 第二部分:SQL调优 n 第三部分:工具介绍
ORACLE执行计划和SQL调优
第一部分 背景知识
执行计划的相关概念
ORACLE执行计划和SQL调优
Rowid的概念
n rowid是一个伪列,既然是伪列,那么这个列 就不是用户定义,而是系统自己给加上的。对 每个表都有一个rowid的伪列,但是表中并不 物理存储ROWID列的值。不过你可以像使用其 它列那样使用它,但是不能删除改列,也不能 对该列的值进行修改、插入。一旦一行数据插 入数据库,则rowid在该行的生命周期内是唯 一的,即即使该行产生行迁移,行的rowid也 不会改变。
n 索引唯一扫描(index unique scan) n 索引范围扫描(index range scan) n 索引全扫描(index full scan) n 索引快速扫描(index fast full scan)
ORACLE执行计划和SQL调优
表访问方式
n 全表扫描:读取表中每一条记录,顺序 读取;
ORACLE执行计划和SQL调优
Row Source and Predicate
n Row Source(行源):用在查询中,由上 一操作返回的符合条件的行的集合,即 可以是表的全部行数据的集合;也可以 是表的部分行数据的集合;也可以为对 上2个row source进行连接操作(如join连 接)后得到的行数据集合。
ORACLE执行计划和SQL调优
oracle访问数据的存取方法
n 全表扫描(Full Table Scans, FTS) n 通过ROWID的表存取 (Table Access by
ROWID ) n 索引扫描(Index Scan)
ORACLE执行计划和SQL调优
索引扫描(Index Scan)
ORACLE执行计划和SQL调优
n Predicaቤተ መጻሕፍቲ ባይዱe(谓词):一个查询中的WHERE 限制条件
ORACLE执行计划和SQL调优
Driving Table
n Driving Table(驱动表):该表又称为外层表(OUTER TABLE)。这个概念用于嵌套与HASH连接中。如果该 row source返回较多的行数据,则对所有的后续操作 有负面影响。注意此处虽然翻译为驱动表,但实际上 翻译为驱动行源(driving row source)更为确切。一般 说来,是应用查询的限制条件后,返回较少行源的表 作为驱动表,所以如果一个大表在WHERE条件有有限 制条件(如等值限制),则该大表作为驱动表也是合适的, 所以并不是只有较小的表可以作为驱动表,正确说法 应该为应用查询的限制条件后,返回较少行源的表作 为驱动表。在执行计划中,应该为靠上的那个row source,后面会给出具体说明。
ORACLE执行计划和SQL调优
Recursive SQL概念
n 有时为了执行用户发出的一个sql语句,Oracle必须执 行一些额外的语句,我们将这些额外的语句称之为 ‘recursive calls’或‘recursive SQL statements’。如 当一个DDL语句发出后,ORACLE总是隐含的发出一些 recursive SQL语句,来修改数据字典信息,以便用户 可以成功的执行该DDL语句。当需要的数据字典信息 没有在共享内存中时,经常会发生Recursive calls,这 些Recursive calls会将数据字典信息从硬盘读入内存中。 用户不比关心这些recursive SQL语句的执行情况,在 需要的时候,ORACLE会自动的在内部执行这些语句。 当然DML语句也都可能引起recursive SQL。简单的说, 我们可以将触发器视为recursive SQL。
n 散列获取:使用符号散列主键来为带有 匹配散列值表中的记录创建ROWID ;
n ROWID访问:通过指定的ROWID的方式 在表中选定一个单独的记录;是访问记 录的最快方式;
ORACLE执行计划和SQL调优
表之间的连接
n row source(表)之间的连接顺序对于查询 的效率有非常大的影响。通过首先存取 特定的表,即将该表作为驱动表,这样 可以先应用某些限制条件,从而得到一 个较小的row source,使连接的效率较 高,这也就是我们常说的要先执行限制 条件的原因。一般是在将表读入内存时, 应用where子句中对该表的限制条件。
ORACLE执行计划和SQL调优
组合索引(concatenated index)
n 由多个列构成的索引,如create index idx_emp on emp(col1, col2, col3, ……),则我们称idx_emp索 引为组合索引。在组合索引中有一个重要的概念: 引导列(leading column),在上面的例子中,col1 列为引导列。当我们进行查询时可以使用”where col1 = ? ”,也可以使用”where col1 = ? and col2 = ?”,这样的限制条件都会使用索引,但 是”where col2 = ? ”查询就不会使用该索引。所 以限制条件中包含先导列时,该限制条件才会使用 该组合索引。
相关文档
最新文档