执行计划基础 统计信息

我们知道ORACLE 对sql查询是基于CBO的即根据代价来进行优化。根据代价进行优化的基础是基于统计信息。

如果统计信息不准确,那么oracle sql查询就没有规则可依,导致查询计划出问题。

1.ORACLE 11G 默认启动了统计信息收集的任务,默认运行时间是周一到周五晚上10点和周6,周天的早上6点.

2.你也可以关闭自动统计新收集任务,选择手工收集的方式,但是一般不建议这样操作。

  select window_name,
         window_next_time,
         autotask_status,
         optimizer_stats
    from DBA_AUTOTASK_WINDOW_CLIENTS;

WINDOW_NAME         WINDOW_NEXT_TIME                              AUTOTASK OPTIMIZE
------------------- ------------------------------------------------ -------- -----
MONDAY_WINDOW       13-1月 -14 10.00.00.000000 下午 +08:00        ENABLED  ENABLED
TUESDAY_WINDOW      14-1月 -14 10.00.00.000000 下午 +08:00        ENABLED  ENABLED
WEDNESDAY_WINDOW    15-1月 -14 10.00.00.000000 下午 +08:00        ENABLED  ENABLED
THURSDAY_WINDOW     16-1月 -14 10.00.00.000000 下午 +08:00        ENABLED  ENABLED
FRIDAY_WINDOW       17-1月 -14 10.00.00.000000 下午 +08:00        ENABLED  ENABLED
SATURDAY_WINDOW     11-1月 -14 06.00.00.000000 上午 +08:00        ENABLED  ENABLED
SUNDAY_WINDOW       12-1月 -14 06.00.00.000000 上午 +08:00        ENABLED  ENABLED

查询是否允许自动收集统计信息

select client_name,status from dba_autotask_client
 where client_name=‘auto optimizer stats collection‘;

CLIENT_NAME                           STATUS
--------------------------------------------
auto optimizer stats collection      ENABLED

禁止收集

dbms_auto_task_admin.disable(client_name=>‘auto optimizer stats collection‘,operation=>NULL,window_name=>NULL);

启用

begin
  dbms_auto_task_admin.enable;
  dbms_auto_task_admin.enable(‘auto optimizer stats collection‘, null,null);
end;
begin
  dbms_auto_task_admin.enable(‘auto optimizer stats collection‘, null,‘WEDNESDAY_WINDOW‘);
  dbms_auto_task_admin.enable(‘auto optimizer stats collection‘, null,‘FRIDAY_WINDOW‘);
  dbms_auto_task_admin.enable(‘auto optimizer stats collection‘, null,‘SATURDAY_WINDOW‘);
  dbms_auto_task_admin.enable(‘auto optimizer stats collection‘, null,‘THURSDAY_WINDOW‘);
  dbms_auto_task_admin.enable(‘auto optimizer stats collection‘, null,‘TUESDAY_WINDOW‘);
  dbms_auto_task_admin.enable(‘auto optimizer stats collection‘, null,‘SUNDAY_WINDOW‘);
  dbms_auto_task_admin.enable(‘auto optimizer stats collection‘, null,‘MONDAY_WINDOW‘);
end;

查询运行情况

--跟踪job运行情况:
--可以通过查询视图DBA_AUTOTASK_HISTORY追踪job运行情况:
select client_name,job_name,job_start_time
     from dba_autotask_job_history where client_name=‘auto optimizer stats collection‘
     order by job_start_time desc;

执行计划基础 统计信息

时间: 2024-10-11 18:02:15

执行计划基础 统计信息的相关文章

为准确生成执行计划更新统计信息-analyze与dbms_stats

如果我们想让CBO利用合理利用数据的统计信息,正确判断执行任何SQL查询时的最快途径,需要及时的使用analyze命令或者dbms_stats重新统计数据的统计信息. 例如索引跳跃式扫描(INDEX SKIP SCAN)例子中,如果不对表EMPLOYEE 及索引收集一下统计信息,就不是INDEX SKIP SCAN策略了. 分析统计信息 analyze table 一般可以指定分析: 表,所有字段,所有索引字段,所有索引. 若不指定则全部都分析. ---table统计信息 analyze tab

Oracle执行计划与统计信息的一些总结

[日期:2011-08-05]来源:Linux社区  作者:wangshengfeng1986211[字体:大 中 小] 2010-07-01 15:03 1.SET AUTOTRACE ON EXPLAIN(set autot on exp)SQLPLUS的命令,在执行SQL语句的同时显示执行计划,设置EXP(LAIN)的目的是只显示执行计划而不显示统计信息..2.SQL>explain plan for select ````````;SQL>select * from table(dbm

SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)

本文出处:http://www.cnblogs.com/wy123/p/6008477.html 关于统计信息对数据行数做预估,之前写过对非相关列(单独或者单独的索引列)进行预估时候的算法,参考这里. 今天来写一下统计信息对于复合索引在预估时候的计算方法和潜在问题. 本文原形来自于是个实际业务问题,某SQL在利用一个符合索引做查询的时候,发现始终会出现预估误差较大的情况, 而改变复合索引的列顺序,这个预估行数的误差会发生变化, 也就是说,Create  index idx_index1 ON T

SQL Server 执行计划利用统计信息对数据行的预估原理以及SQL Server 2014中预估策略的改变

前提  本文仅讨论SQL Server查询时, 对于非复合统计信息,也即每个字段的统计信息只包含当前列的数据分布的情况下, 在用多个字段进行组合查询的时候,如何根据统计信息去预估行数的. 利用不同字段的统计信息做数据行数预估的算法原理,以及SQL Server 2012和SQL Server 2014该算法的差异情况, 这里暂时不涉及复合统计信息,暂不涉及统计信息的更新策略及优化相关话题,以及其他SQL Server版本计算方式. 统计信息是什么 简单说就是对某些字段的数据分布的一种描述,让SQ

执行计划基础 动态采样

1. 统计信息默认情况下是每天晚上10点半后收集,如果新建对象还没来得级收集统计信息,就采用动态采样的方式. 2. 具体在set autotrace 跟踪的执行计划中,可以看到类似:- dynamic sampling used for this statement (level=2) 3. 除非你用类似/*+dynamic_sampling(t 0) */的HINT关闭这个动态采样. 4. 在收集过统计信息后,Oracle就不会采用动态采样. 注:建索引过程中,默认会收集索引相关的统计信息.

oracle_执行计划_谓词信息和数据获取(access and filter区别) (转)

These two terms in the Predicate Information section indicate when the data source is reduced. Simply, access means only retrieve those records meeting the condition and ignore others. Filter means *after* you already got the data, go through them al

数据库性能优化、统计信息与对象统计信息概述收集、扩展统计信息、dbms_stats.get_prefs

数据库性能优化 相关书籍: 1.基于成本的Oracle优化法则 2.Oracle性能诊断艺术 3.基于Oracle的SQL优化 ----------------------------------------------------------------------------------------- 两种优化器: CBO  cost-base optimizer 基于cost 更大适应性/灵活性/10g开始 RBO  rule-base optimizer 基于规则 制定了15条/10g以

oracle数据库优化之统计信息

1.统计信息简介 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息.比如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于统计信息.CBO正是根据这些统计信息数据,计算出不同访问路径下,不同join 方式下,各种计划的成本,最后选择出成本最小的计划. 在CBO(基于代价的优化器模式)条件下,SQL语句的执行计划由统计信息来决定,若没有统计信息则会采取动态采样的方式决定执行计划!可以说统计信息关乎sql的执行计划是否正确,

sql-查看执行计划的方法

sql执行计划:把SQL语句拆分为每个的操作步骤组合,按照一定的顺序执行得出结果,查看并看懂执行计划是调优的关键步骤 查看执行计划的方法 DBMS_XPLAN包 sql*plus AUTO trace V$SQL_PLAN.DBA_HIST_SQL_PLAN ?/rdbms/admin/awrsqrpt.sql 工具类:toad.pl/SQL DEV 跟踪dump:10046,10053 大多数人比较喜欢用工具直接看,以下来说明这些方式的不同用处 一.DBMS_XPLAN包 10g以后可以查看A