Oracle 10g隆重推出了自动统计CBO统计功能,但实际使用起来却是鸡肋,bug一大堆。现简单介绍一下。
1、查看GATHER_STATS_JOB执行情况
select JOB_NAME,LAST_START_DATE,ENABLED,state from dba_scheduler_jobs;
引用
JOB_NAME LAST_START_DATE ENABL STATE
------------------------------ ---------------------------------------- ----- ----------
PURGE_LOG 20-MAR-10 03.00.00.150147 AM PST8PDT TRUE SCHEDULED
FGR$AUTOPURGE_JOB FALSE DISABLED
GATHER_STATS_JOB 20-MAR-10 06.00.04.025944 AM +08:00 TRUE SCHEDULED
AUTO_SPACE_ADVISOR_JOB 20-MAR-10 06.00.04.025793 AM +08:00 TRUE SCHEDULED
RLM$EVTCLEANUP 21-MAR-10 02.09.59.099412 AM -07:00 TRUE SCHEDULED
RLM$SCHDNEGACTION 21-MAR-10 04.26.59.146700 PM +08:00 TRUE SCHEDULED
6 rows selected.
可以看到GATHER_STATS_JOB在3月20日6点自动被调度执行。
查看调度脚本
引用
SQL> SELECT program_action, number_of_arguments, enabled
2 FROM dba_scheduler_programs
3 WHERE owner = 'SYS'
4 AND program_name = 'GATHER_STATS_PROG';
PROGRAM_ACTION
--------------------------------------------------------------------------------
NUMBER_OF_ARGUMENTS ENABL
------------------- -----
dbms_stats.gather_database_stats_job_proc
0 TRUE
查看调度窗口
引用
SQL> SELECT w.window_name, w.repeat_interval, w.duration, w.enabled
2 FROM dba_scheduler_wingroup_members m, dba_scheduler_windows w
3 WHERE m.window_name = w.window_name
4 AND m.window_group_name = 'MAINTENANCE_WINDOW_GROUP';
WINDOW_NAME
------------------------------
REPEAT_INTERVAL
--------------------------------------------------------------------------------
DURATION
---------------------------------------------------------------------------
ENABL
-----
WEEKNIGHT_WINDOW
freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; bysecond=0
+000 08:00:00
TRUE
WINDOW_NAME
------------------------------
REPEAT_INTERVAL
--------------------------------------------------------------------------------
DURATION
---------------------------------------------------------------------------
ENABL
-----
WEEKEND_WINDOW
freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0
+002 00:00:00
TRUE
进一步可以查出数据库统计的历史信息
引用
SQL> SELECT operation, start_time,
2 (end_time-start_time) DAY(1) TO SECOND(0) AS duration
3 FROM dba_optstat_operations
4 ORDER BY start_time DESC;
OPERATION
----------------------------------------------------------------
START_TIME
---------------------------------------------------------------------------
DURATION
---------------------------------------------------------------------------
gather_database_stats(auto)
18-6月 -10 05.57.02.501000 下午 +08:00
+0 00:00:04
2、GATHER_STATS_JOB存在诸多bug,很多情况下需要关闭自动收集CBO统计信息
引用
SQL> exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
PL/SQL procedure successfully completed.
可以看到该job已经被禁用了
引用
SQL> select ENABLED,state from dba_scheduler_jobs where job_name='GATHER_STATS_JOB';
ENABL STATE
----- ----------
FALSE DISABLED
或者更改隐含参数,注意更改隐含参数存在风险,不建议在生产系统上实施。
引用
SQL> alter system set "_optimizer_autostats_job"=false scope=spfile;
System altered.
更多关于GATHER_STATS_JOB信息可以查看metalink。
分享到:
相关推荐
为了确保统计信息的准确性和时效性,Oracle 11g引入了一个名为DBMS_STATS的新包,并提供了一种称为“自动统计信息收集”的机制,该机制可以在预定的时间自动运行。 #### 自动统计信息收集的时间安排 根据题目中的...
- **estimate_percent选项**:控制统计样本的百分比,使用`estimate_percent => dbms_stats.auto_sample_size`可以让Oracle自动选择最佳样本百分比。一般情况下,Oracle会选择5%至20%之间的样本比例,以确保统计数据...
- **DBMS_STATS.AUTO_SAMPLE_SIZE**:这是一个非常重要的参数,用于指定自动统计信息收集过程中的样本大小。默认情况下,Oracle首先采集5500行数据作为样本,如果评估认为这些样本不足以代表整个数据集,则会继续...
Oracle的Cost-Based Optimizer (CBO) 是一种自动选择最优执行计划的机制,它通过评估不同执行路径的成本来决定如何执行SQL查询。CBO会考虑各种因素,包括表的大小、索引的存在、数据分布等,以确定最有效率的查询...
CBO的主要特点是基于数据的统计信息来决定执行计划,这包括表和索引的分析结果。使用CBO时,开发者无需过于关注FROM子句中表的顺序或WHERE子句中条件的顺序,因为CBO会自动计算成本最低的执行路径。CBO能够利用如...
分析工具会自动生成更新统计信息的SQL脚本。你可以选择立即执行这些脚本,或者将其保存下来,以便在需要时手动执行。脚本可能包括`ANALYZE TABLE`或`ANALYZE INDEX`等命令,用于收集和更新对象的统计信息。 6. **...
CBO统计信息的准确性和完整性直接影响着优化器的决策质量。Oracle推荐使用DBMS_STATS包收集统计信息,因为它支持并行收集、分区对象的全局统计信息收集,以及其他优化收集操作的方式。然而,对于与成本优化器无关的...
- **定义**:CBO是从Oracle 8i开始引入的一种新的优化方式,它基于对表和索引的统计信息来评估执行计划的成本。 - **特点**: - 更加智能,能够根据实际数据情况动态选择最佳执行计划。 - 需要定期更新表和索引...
从Oracle Database 10g开始,系统会自动创建GATHER_STATS_JOB任务来定期收集统计信息。 Oracle索引是提升查询速度的关键结构,它由根节点、分支节点和叶子节点构成。根节点指向分支节点,分支节点再指向叶子节点,...
ORACLE SQL性能优化 通过init.ora文件中OPTIMIZER_MODE声明 RULE (基于规则) 所遵循的是Oracle内部...如果用户要查的数据不在数据高速缓冲区时,Oracle自动从磁盘中去读取。 init.ora中为这个区域设置合适的参数
Oracle提供了`dbms_stats.auto_sample_size`来自动计算合适的采样比例,确保统计信息既准确又不会因为全表扫描而消耗过多资源。 #### 五、`degree`参数 用于设置并行度。通过增加这个值可以加快统计信息的收集速度...
这些统计信息通过DBA或开发人员使用DBMS_STATS包手动收集,或者在DML操作后自动更新。 3. 执行计划: 优化器分析查询的语法树,生成可能的执行计划,然后评估每个计划的成本。最终,选择成本最低的计划作为最优...
CBO根据统计信息和成本估算来选择执行计划,而RBO则基于预定义的规则。现代Oracle系统默认使用CBO,因为它的优化效果通常更佳。 理解Oracle内存管理的这些核心概念,对于监控、调整和优化数据库性能至关重要。通过...
从 Oracle Database 10g 开始,Oracle 在建库后就默认创建了一个名为 GATHER_STATS_JOB 的定时任务,用于自动收集 CBO 的统计信息,调用 DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC 收集统计信息。默认情况下在工作...