简单说说 gather_plan_statistics

DBA的日常核心工作之一是对线上有性能问题的SQL语句进行优化。其中优化SQL语句的最关键的一步是得到SQL的执行计划。那么一个常见的问题来了。如何得到一个SQL语句的真实执行计划?方法有很多。今天说其中一种方法就是使用 gather_plan_statistics(收集计划统计信息)

首先简单说一下oracle sql语句的生成执行计划的过程。当运行 SQL 查询时,数据库将首先解析它并为传入的查询生成 AST(抽象语法树)。解析器验证 SQL 语句的语法并检查查询的对象是否存在等。解析器可以重写查询以优化其执行,而不影响最终的结果。生成的查询树被发送到优化器,优化器需要找出获取当前 SQL 查询所需数据的最佳方式。这个时候。优化器生成了一个执行计划,它是满足 SQL 查询要求所需执行的操作列表。生成的执行计划被发送到执行器,执行器运行它并将获取的数据发送回数据库客户端。

SQL 处理和执行步骤如下图:

评估的执行计划由优化器生成,并没有真正的执行 SQL语句。可以用EXPLAIN PLAN FOR SELECT ..... 这样子生成评估的执行计划。然后数据库会将估计的执行计划存储在关联的 PLAN_TABLE里:

SQL> EXPLAIN PLAN FOR SELECT COUNT(*) FROM T01;
​
Explained.
​
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY (FORMAT=>'ALL +OUTLINE'));
​
PLAN_TABLE_OUTPUT
--------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值