`

在sqlplus中如何开启并读懂执行计划

阅读更多



 1 如何启用sqlplus的autotrace功能?【pl/sql dev不支持这个功能】
要用sys用户登入并下列步骤:
(1)@?\rdbms\admin\utlxplan  --建立plan_table表
(2)10G之前plan_table是没有同义词的,所以要加上create public synonym plan_table for plan_table。【此步:option】因为:In 10g, you don't need to create plan_table in your schema to explain plan. It uses the table plan_table$ belonging to SYS through a public synonym. The table is a session duration-based global temporary table. Makes perfect sense!
(3)grant all on plan_table to public
(4)@?\sqlplus\admin\plustrce
到此为止,DBA用户首先被授予了plustrace角色,然后我们可以把plustrace授予public。如果你需要限制Autotrace权限,可以把对public的授权改为对特定user的授权。例如:grant plustrace to scott。
【倘若根据以上步骤不行,则:
1.

         1.)什么用户执行的set autotrace
         2.)plan_table和plustrace是否按照要求创建和授权
2. 如果都已经按照要求做过,还报错的话,可以grant select any dictionary to your_user,再验证一下是否可以使用。
3. 再不行drop plan_table重建呢?

Notice:
(1)Explain 唯一的限制是用户必须是所解释事物的所有者,否则可能报错。
(2)在pl/sql dev中,我们可以使用explain plan for+ select字句,然后再执行select * from table(DBMS_XPLAN.display)。

关于Autotrace几个常用选项的说明:
Set autotrace off :缺省值。
Set autotrace on :含查询输出,执行计划,统计信息
On后有两个可选参数:
Explain:含查询输出,执行计划
Statistics:含查询输出,统计信息
Set autotrace traceonly:含执行计划,统计信息



2 如何看懂oracle执行计划?
(1)什么是执行计划
             答:当执行查询操作时对搜索路径(access path)的显示
           (2)如何访问数据
  答:逻辑上oracle通过以下三种方式获得数据:
A    全表扫描(FTS)
B    索引扫描(逻辑ROWID)
C    物理ROWID
Notice:
FTS:全表扫描会使表使用上升到HWM。当我们不断插入数据时,HWM会往不断上移,这样,在HWM之下的,就表示使用过的块,HWM之上的就表示已分配但从未使用过的块.原则上HWM只增不减,即使表中数据全删,HWM还是原值。出于这个特点,HWM很像一个水库的最高水位,不能说一个水库没水了,就说该水库的历史最高水位为0.但如果我们使用truncate命令,则该表的HWM会被重新置为0。
(3) 执行计划层次关系
采用最右最上最先执行的原则



 

看执行计划的operation列,每列值的左面有空格作为缩进字符。在该列值左边的空格越多,说明该列值的缩进越多,该列值也越靠右。如上面的执行计划所示:id=4的行的缩进最多,即该行最靠右,应该最先执行;若行的缩进一样,其靠右的程度也一样,此时看谁在上面了,最上最先执行,注意:谈论上下关系时,只对连续的、缩进一致的行有效。

优化模式是CHOOSE的情况下,看Cost参数是否有值来决定采用CBO还是RBO:
SELECT STATEMENT [CHOOSE] Cost=1234 --Cost有值,采用CBO
SELECT STATEMENT [CHOOSE]           --Cost为空,采用RBO(9I是如此显示的)

(4) 统计信息
          0 recursive calls(循环递归次数。一般原因:dictionary cache未命中;动态存储扩展;PL/SQL语句)
      8 db block gets(buffer中读取的block数量,用于insert,update,delete,select for update)
     6 consistent gets(回滚段中读的block数量)
     0 physical reads(物理读:从磁盘读到buffer cache中的数据块数量)
     0 redo size      (写到redo logs的数据量)
    551 bytes sent via SQL*Net to client
    430 bytes received via SQL*Net from client
     2 SQL*Net roundtrips to/from client
     2 sorts (memory) (在内存中发生的排序)
     0 sorts (disk)   (在硬盘中发生的排序,与sort_area_size有关)

Notice:逻辑读指的是Oracle从内存读到的数据块数量。一般来说是'consistent gets' + 'db block gets'。当在内存中找不到所需的数据块的话就需要从磁盘中获取,于是就产生了'phsical reads'。


Refer:
http://www.eygle.com/faq/AutoTrace.htm
http://wenku.it168.com/d_000147651.shtml
http://space.itpub.net/35489/viewspace-430027

 

  • 大小: 13.8 KB
分享到:
评论

相关推荐

    sqlplus中批量执行sql文件

    1. **启动SQLPlus**:打开CMD命令提示符窗口,输入以下命令来启动SQLPlus并连接到指定的数据库实例: ```sql sqlplus username/password@database ``` 其中`username`是数据库用户名,`password`是密码,`...

    SQLPlus中的复制和粘贴技巧

    - 如果你有多个SQLPlus会话同时打开,可以在一个会话中复制查询结果,然后在另一个会话中粘贴执行。这种方法对于比较不同数据库或表的状态非常有用。 5. **剪切和撤销**: - 使用`Ctrl+X`可以剪切(即复制并删除...

    在SQLPlus中改变字体和字符集

    在 SQLPlus 中改变字体和字符集 摘要:本文主要介绍了在 SQLPlus 中改变字体和字符集的方法,对于 Oracle 数据库管理员来说,这是一项非常重要的技能。通过对注册表的修改,可以改变 SQLPlus 中的字体大小和字符集...

    sqlplus中文插件

    在实际应用中,熟练使用SQLPlus不仅可以进行数据查询,还可以创建和修改数据库对象,执行数据库备份和恢复,以及进行性能优化等高级任务。因此,熟悉SQLPlus及相关的中文插件对于从事Oracle数据库管理工作的专业人士...

    Java调用sqlplus执行定制的sql脚本

    本文将深入探讨如何在Java中调用SQL*Plus来执行定制的SQL脚本。 首先,SQL*Plus是Oracle数据库提供的一个命令行工具,用于执行SQL语句和PL/SQL块。在Java中调用SQL*Plus,通常有两种方式:一种是通过操作系统命令行...

    解决oracle下非oracle用户下执行sqlplus

    通常linux下用安装oracle后,只有切换至oracle用户下方可执行相关的数据库的sqlplus及imp\exp相关命令的操作,经过这里的此配置后方可解决此问题,所有用户下均可以执行上述相关操作

    批处理打开oracle登陆sqlplus

    在IT行业中,批处理是一种自动化执行一系列命令或任务的技术,常用于简化日常的系统管理操作。在Windows操作系统中,批处理脚本(.bat文件)是实现这一目标的常用工具。针对“批处理打开Oracle登录SQL*Plus”的主题...

    sqlplus教程(中文)

    本教程旨在详细介绍SQLPlus的使用方法以及SQL语言在Oracle环境中的应用技巧。 一、SQLPlus的基础操作 1. 启动与退出:在命令行界面输入`sqlplus 用户名/密码@连接标识`启动SQLPlus,如`sqlplus scott/tiger@orcl`...

    SQL执行计划简单分析

    在 SQLPLUS 中,可以使用 SET AUTOTRACE ON 命令来查看执行计划。当我们执行一个 SQL 语句时,SQLPLUS 将在查询结果后显示执行计划。例如,执行以下语句: ```sql SET AUTOTRACE ON SELECT * FROM hr.employees; ``...

    SQLPLUS命令的使用大全

    - 使用此命令可以在SQLPLUS内置编辑器中打开一个新的会话,允许用户编写或修改SQL语句。这对于长时间的查询编写或调试非常有帮助。 #### 3. 执行当前编辑的SQL语句 - **SQL> /** - 此命令用于执行在编辑模式下...

    Oracle中SQLPLUS的常用指令技巧

    SQLPLUS提供两种方式执行存储在文本文件中的SQL脚本: - `start file_name`:启动并执行指定文件中的脚本。 - `@ file_name`:同上,也用来执行SQL脚本。 5. **编辑输入**: 使用`edit`命令可以打开内置的文本...

    sqlplus 批处理

    在SQLPLUS中,这意味着可以将多条SQL语句写入一个文本文件,然后通过SQLPLUS命令行一次性执行这个文件,从而减少重复输入和提高工作效率。 3. 创建批处理脚本: 首先,我们需要创建一个包含SQL语句的文本文件,例如...

    sqlplus11.2 rpm安装包

    总结来说,"sqlplus11.2 rpm安装包"是为了在Linux环境中安装和使用Oracle SQLPlus 11.2版的工具,提供了一种便捷的方式来管理Oracle数据库并执行SQL和PL/SQL命令。通过RPM包管理,用户可以轻松地安装、更新和卸载...

    ORACLE命令行查看实际的执行计划

    `SET AUTOTRACE ON`是开启SQLPLUS的自动跟踪功能,它会在你执行SQL语句后显示执行计划和性能统计。在SQLPLUS中输入此命令,系统会记录接下来执行的SQL语句的详细信息,包括解析、执行和收获阶段的信息。 3. **执行...

    Sqlplus_登录数据库

    在 Sqlplus 中,用户可以使用两种方式连接到 Oracle 数据库。第一种方式是直接敲 sqlplus 命令,并输入用户名和密码。这将启动 Sqlplus 工具,并连接到缺省的数据库。例如: C:\Documents and Settings\...

    SQLPLUS在Bash_shell的使用

    在Bash Shell脚本中,我们可以利用SQLPLUS的这些特性来执行一系列数据库操作。例如,创建一个Shell脚本,其中包含SQLPLUS命令行,可以实现数据备份、查询、更新等任务。使用`system()`或`echo`命令将SQLPLUS命令传递...

    SQLPlus使用教程

    SQLPlus是Oracle数据库管理系统中的一个命令行工具,用于执行SQL查询、DML操作以及PL/SQL块。在Oracle 10g版本中,SQLPlus提供了一个直观的接口,让用户能够与数据库进行交互,无需图形用户界面。这个使用教程将帮助...

    Oracle中常用的SqlPlus命令

    - autot[race]{on|off|trace[only]}:用于性能诊断,开启SQL执行计划跟踪。 ### 结论 以上仅是SqlPlus中部分常用命令的概述,这些命令在Oracle数据库的日常管理和开发工作中扮演着重要角色。熟练掌握它们,不仅...

    SQLPLUS命令查询文档

    2. **SQL命令执行**:在SQLPLUS中,可以直接输入SQL语句,如`SELECT * FROM table_name`来查询表中的所有数据。`/`用于提交当前语句,`RUN`或`@`可以执行保存在外部文件中的SQL脚本。 3. **PL/SQL块执行**:除了SQL...

    SQLPlus Usage Guide

    `可分析SQL执行计划。 13. **用户管理**:SQLPlus也可以用于创建、修改和删除用户,管理权限,如`CREATE USER`, `GRANT`, `REVOKE`等。 ### SQLPlusIII进阶指南 可能涵盖更高级的主题,如存储过程的开发与调试,...

Global site tag (gtag.js) - Google Analytics