`

SQL执行计划--HIT、SQLPLAN

阅读更多
方法1EXPLAIN FOR

EXPLIAN FOR SELECT * FROM XXXX;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

这种方式查询的是一种仅供参考性的执行计划,而真正的执行计划是存储在Liburary Cache中的。

 

方法2SET AUTOT ON

SET AUTOT ON EXP STATUS

完整语法:

SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]

加上STATUS是查看实际执行的统计信息,如果不加则是预查看执行计划。

再执行SQL语句,就会打印出执行计划了。

 

方法3、从Library Cache中直接获取
这个方法效果最真实。它属于DBMS_XPLAN系列方法。其查询的视图包括:
V$SQL_PLAN

V$SQL_PLAN_STATISTICS

V$SQL_WORKAREA

V$SQL_PLAN_STATISTICS_ALL

另外相关视图还有:
V$SQL

V$SQLAREA

V$SQL_SHARED_CURSOR

V$SQL_PLAN
存储的就是Library Cache中的执行计划。其中的运行统计信息是在Parse阶段估算的
V$SQL_PLAN_STATISTICS
存储执行计划每一步运行时的统计信息,包括花费时间,处理数据行数。是真实统计结果。默认报流程,需要开启STATISTICS_LEVELALL才可以收集。或对SQL语句添加GATHER_PLAN_STATISTICS提示。
V$SQL_WORKAREA
提供SQL运行时的SQL Workarea内存的消耗。
V$SQL_PLAN_STATISTICS_ALL
是前三个视图的汇总,提用户完成了复杂的JOIN操作。
V$SESSION
记录会话信息,是性能调整时的最初入口。10g以后版本也整合了V$SESSION_WAIT的内容。

DBMS_XPLAN包有以下方法

方法

版本

DISPLAY

9i

DISPLAY_CURSOR

10g

DISPLAY_AWR

10g

DISPLAY_SQLSET

10g

DISPLAY_SQL_PLAN_BASELINE

11g

 

使用DISPLAY_CURSOR(sql_id, child­_number, format)查询

SQL>执行一个SQL语句

SQL> select SQL_TEXT, SQL_ID from v$sql where sql_text like 'xxxx';

SQL>select * from table(dbms_xplan.display_cursor('xxxxxxxxx', null, 'BASIC'));

--利用BASIC格式查看执行计划

SQL>select * from table(dbms_xplan.display_cursor('xxxxxxx',null, 'TYPICAL'));

--利用TYPICAL格式查看执行计划

SQL>select * from table(dbms_xplan.display_cursor('xxxxxxx',null, 'ALL'));

 

DBMS_XPLAN.DISPLAY_CURSOR参数介绍

FORMAT

格式

说明

BASIC

只有最基本的计划,不需要度量信息

TYPICAL

缺省值

SERIAL

TYPICAL基本相同,没有并行相关信息

ALL

TYPICAL增加语句过滤信息

 

FORMAT小粒度参数

格式

说明

ROWS

显示/隐藏ROWS

BYTES

显示/隐藏BYTES

COST

显示/隐藏COST

PARTITION

显示/隐藏分区信息

PARALLEL

显示/隐藏并行信息

PREDICATE

显示/隐藏谓词部分(即条件查询)

PROJECTION

显示/隐藏投影部分

ALIAS

显示/隐藏ALIAS部分

REMOTE

显示/隐藏远程SQL

NOTE

显示/隐藏NOTE部分

OUTLINE

显示/隐藏OUTLINE部分

 

FORMAT加项

格式

说明

IOSTATS

显示IO数据

MEMSTATS

如果PGA手动管理,会有相关内存内容

ALLSTATS

同时显示IOSTATSMEMSTATS

SQL> select * from table(dbms_xplan.display_cursor(‘xxxxxxx’,null,’ALL,+IOSTATS’));

SQL> select * from table(dbms_xplan.display_cursor(‘xxxxxxx’,null,’ALL, -ROWS, -COST’));

 

 

方法4、使用DISPLAY_AWR(sql_id, plan_hash_value, db_id, format)

获得AWR中的执行计划,信息来自于DBA_HIST_SQL_PLANDBA_HIST_SQLTEXT

SQL>select * from table(dbms_xplan.display_awr(‘xxx’)); --传入SQL ID

另外AWR还提供两个脚本用来分析某个SQL语句的执行计划是否发生都忙完以及性能变化信息,位置在$ORACLE_HOME/rdbms/adminawrsqrpt.sqlsprepsql,两个脚本。

 

执行计划分为5个部分。

SQL概要,执行计划,QB (Query Block)、数据过滤(谓词)、列投影。

 

SQL概要:

包括SQL_ID( Parent Cursor )Child Number( Child Cursor )、完整的SQL文本。

 

执行计划:

Hash值,表连接方式。

 

QB

对于每一个简单的SINGLE SQL语句(整个语句只有一层SELECT,并且查询对象都是真实的物理表),都有一个Query Block存在,形如SEL$1。这种格式是Prefix$n

Prefix种类如下:

Prefix

操作

CRI$

Create Index

DEL$

Delete

INS$

Insert

MEG$

Merge

SEL$

Select

SET$

集合操作

UPD$

Update

MISC$

其他,比如Lock Table

也可以自己对Prefix进行命名,要通过qb_name提示来做,

SQL>select * from table1, table2 where …

这样产生的QB部分中,SEL$1就变成了S_VIEW1.

 

复杂SQL包括视图、子查询、集合操作。

对于复杂SQL,首先做转换,变成等价简单SQL

对于视图(Inline ViewView),这个操作叫合并Merge

对于子查询,这个操作叫展开Unnest Subquery

10053事件可以跟踪SQL语句的Parse全过程。)

转换的过程将采用基于成本的查询转换(Cost Based Query Transformation),转换结束后取而代之的是一个新的简单SQL语句,这个新SQL对应一个Query Block。这个新Query Block的命名是SEL$????????

InExistsNot InNot Exists肯定会进行转换。

 

 

查询

alter system set statistics_level=all;

select* from TABLE(DBMS_XPLAN.diplay_cursor(null,null,"allstats +alias +outline"));

 

分享到:
评论

相关推荐

    SQLServer内存使用分析方法.doc

    - **Plan Cache**:存储查询计划。 - **Lock Manager**:管理锁定机制。 - **Optimizer Memory**:用于查询优化。 - **Connection Memory**:用于维护客户端连接。 - **其他组件**:如日志缓冲区等。 #### 三、重要...

    SQL性能监视的有用文档(全部摘自于微软官方)

    2. `execution plan`分析:通过查看执行计划,我们可以发现可能导致性能问题的索引缺失或不当使用。 五、等待类型 SQL Server的等待事件(如`Latch Waits`,`Lock Waits`)提供了诊断资源争用的线索,通过`sys.dm_...

    Oracle调优简要手册

    总的来说,Oracle调优是一个综合性的任务,需要对数据库结构、SQL执行效率、内存管理等多个方面有深入理解。遵循手册中的指导,并结合实际情况进行调整,可以显著提升Oracle数据库的性能和稳定性。

    Oracle性能调整的十大要点

    可以通过查询`v$sql_plan`来查看执行计划。 **3. Large Object Management** - 为了减少内存碎片,需要保留常用的大对象在Shared Pool中,如: - 经常使用的存储过程 - 经常操作的表上的已编译触发器 - ...

    sqlserver中关于WINDOWS性能计数器的介绍

    6. **SQLServer Plan Cache: Cache Hit Ratio**: 缓存命中率反映了计划重用的程度。理想情况下,这个比率应超过70%,低于这个值可能意味着重用率低,增加了资源消耗。 7. **Extended Stored Procedures, Object ...

    Oracle设置系统参数进行性能优化

    - **执行计划管理** (Execution Plan Management): 使用`v$sql_plan`视图来监控SQL执行计划的使用情况。 - **大对象处理** (Large Objects Handling): - 大对象可能会导致共享池碎片化问题,可以通过以下几种方式...

    SQL-optimize:主要用于oracle数据库性能优化和数据库集成分析

    2. **持续改进**: 性能优化不是一次性的任务,应定期进行性能审查,跟踪SQL执行计划的变化,确保系统持续高效运行。 综上所述,Oracle数据库的SQL优化涉及多个层面,包括SQL语句优化、数据库结构优化以及使用...

    oracle performance tuning

    1. **检查Get Hit Ratio (获取命中率)**:首先,检查`v$librarycache`中的SQL Area的`get hit ratio`是否超过90%。若低于90%,则需要进一步分析并优化应用代码。 ```sql SELECT get_hit_ratio FROM v$library...

    ORACLEDBA面试题集.pdf

    - 执行计划分析SQL查询如何执行,可使用EXPLAIN PLAN、DBMS_XPLAN或SQL Developer等工具查看。 - Nest Loop与Hash Join是两种不同的连接操作,Nest Loop适合小数据集,Hash Join适合大数据集且能有效利用内存。 - DB...

    Oracle基于C-S的性能调整.doc

    通过使用 EXPLAIN PLAN 功能,可以分析 SQL 查询的执行计划,找出慢查询并进行优化。避免全表扫描,利用索引,减少临时表的使用,以及使用绑定变量可以有效提升 SQL 性能。 2. 应用程序层面的调整 应用程序的设计和...

    Oracle性能优化10大要点.pdf

    通过v$sql_plan可以监测特定SQL语句的执行计划缓存命中率。如果发现有大量缓存未命中的情况,需要进一步检查PL/SQL相关的保持(keep)设置。 共享池的保留大小(reserved size)也是一个重要的考量点,应当确保free...

    Oracel 调优工具概述

    除了SQL Trace,EXPLAIN PLAN也是一个强大的工具,用于分析SQL执行计划。它可以在不实际执行SQL的情况下揭示Oracle如何处理表连接。通过`EXPLAIN PLAN INTO table_name`或设置AUTOTRACE(如`SET AUTOTRACE ON`),...

    性能优化篇之Oracle10g_性能分析及优化思路

    2. **问题诊断**:分析Trace文件、SQL执行计划等找出问题根源。 3. **解决方案设计**:根据问题类型选择合适的优化策略。 4. **实施方案**:修改SQL、调整参数、优化硬件或架构。 5. **验证效果**:实施后通过监控...

    oracle性能调整的十大要点

    `v$sql_plan`视图可以显示这些计划。 7. **保留大对象**:大对象可能导致内存碎片,影响性能。常见的大对象如存储过程、触发器和序列应保留在Shared Pool中。可以使用`dbms_shared_pool.keep()`来保持特定对象。 8...

Global site tag (gtag.js) - Google Analytics