Oracle 统计信息介绍

统计信息自动执行需要以下条件满足:

  1. dba_autotask_task 字段status值ENABLED
  2. dba_autotask_client 字段status值ENABLED
  3. dba_autotask_window_clients 字段AUTOTASK_STATUS值ENABLED OPTIMIZER_STATS值ENABLED WINDOW_ACTIVE值FALSE
  4. dba_scheduler_windows 字段ENABLED值TRUE 字段ACTIVE值FALSE 字段DURATION值大于10分钟
  5. dba_scheduler_jobs 字段ENABLED值TRUE

总结一下统计信息自动收集任务运行的步骤:

首先是dba_autotask_task-->dba_autotask_client建立自动执行任务

再根据时间窗口及资源组建立自动执行作业

dba_autotask_client-->dba_scheduler_window_groups-->dba_scheduler_windows-->dba_scheduler_jobs

dba_autotask_client-->dba_scheduler_job_classes

1、统计信息执行总任务查看视图dba_autotask_task

2、统计信息调用总过程查看视图dba_scheduler_programs

3、统计信息执行状态dba_autotask_client,可以通过如下进行修改,执行 DBMS_AUTO_TASK_ADMIN包,会更新dba_autotask_client的status字段和dba_autotask_window_clients的OPTIMIZER_STATS,SEGMENT_ADVISOR,SQL_TUNE_ADVISOR字段。

 1 BEGIN
 2   DBMS_AUTO_TASK_ADMIN.enable(client_name => ‘auto optimizer stats collection‘,
 3                               operation   => NULL,
 4                               window_name => ‘MONDAY_WINDOW‘);
 5 END;
 6
 7 BEGIN
 8   DBMS_AUTO_TASK_ADMIN.disable(client_name => ‘auto optimizer stats collection‘,
 9                                operation   => NULL,
10                                window_name => NULL);
11 END;

4、如果执行DBMS_AUTO_TASK_ADMIN包不加参数,则更改dba_autotask_window_clients的AUTOTASK_STATUS字段

1 BEGIN
2   DBMS_AUTO_TASK_ADMIN.enable();
3 END;
4 BEGIN
5   DBMS_AUTO_TASK_ADMIN.disable();
6 END;

5、视图dba_scheduler_windows是统计信息执行的各种细节属性如(执行时间,执行时长等),可以通过如下进行设置

 1 --设置开始时间
 2 BEGIN
 3   DBMS_SCHEDULER.SET_ATTRIBUTE(name      => ‘"SYS"."WEDNESDAY_WINDOW"‘,
 4                                attribute => ‘REPEAT_INTERVAL‘,
 5                                value     => ‘freq=daily;byday=WED;byhour=07;byminute=46;bysecond=0‘);
 6 END;
 7 --设置执行时长,如果设置值小于10分钟,统计信息貌似不能搜集
 8 BEGIN
 9   DBMS_SCHEDULER.SET_ATTRIBUTE(name      => ‘"SYS"."WEDNESDAY_WINDOW"‘,
10                                attribute => ‘DURATION‘,
11                                VALUE     => ‘+000 00:20:00‘);
12 END;
13 --禁用窗口,禁用后dba_autotask_window_clients视图相关信息消失
14 BEGIN
15   dbms_scheduler.disable(name => ‘WEDNESDAY_WINDOW‘, force => TRUE);
16 END;
17 --启用窗口
18 BEGIN
19   dbms_scheduler.enable(name => ‘WEDNESDAY_WINDOW‘);
20 END;
21 --停止JOB
22 BEGIN
23   dbms_scheduler.stop_job(‘ORA$AUTOTASK_CLEAN‘);
24 END;
25 --手动打开窗口
26 BEGIN
27   dbms_scheduler.open_window(‘WEDNESDAY_WINDOW‘);
28 END;
29 --关闭窗口
30 BEGIN
31   dbms_scheduler.close_window(‘WEDNESDAY_WINDOW‘);
32 END;

注:在窗口执行的过程中dba_scheduler_windows视图ACTIVE字段是true状态,dba_autotask_window_clients视图WINDOW_ACTIVE字段也只true状态

表统计信息收集标识:

  一个表中被修改的行数超过stale_percent(缺省值10%)时就会认为这个表的统计数据过时了。oracle会监控所有表的DML活动并在SGA中进行记录。监控的信息会定时的刷新到磁盘且可以通过*_tab_modifications视图来查看。

  也可以调用dbms_stats.flush_database_monitoring_info过程来手动刷新这些数据.如果想在查询时得到最新信息(在所有统计数据收集之前内部监控数据会被刷新).可以通过查询user_tab_statistics视图中的stale_stats列来查看哪个表的统计数据过时了。 表的stale_stats被设置为NO,统计数据是最新的.表的stale_stats被设置为YES,统计数据是过时的.表的stale_stats没有被设置说明丢失统计数据.

原文地址:https://www.cnblogs.com/bicewow/p/11263378.html

时间: 2024-11-06 07:42:11

Oracle 统计信息介绍的相关文章

收集oracle统计信息

优化器统计范围: 表统计: --行数,块数,行平均长度:all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN:列统计: --列中唯一值的数量(NDV),NULL值的数量,数据分布:             --DBA_TAB_COLUMNS:NUM_DISTINCT,NUM_NULLS,HISTOGRAM:索引统计:--叶块数量,等级,聚簇因子:             --DBA_INDEXES:LEAF_BLOCKS,CLUSTERING_FACTOR,BLEVEL:

Oracle统计信息不准(谓词越界)造成的性能问题

什么是谓词越界?谓词越界其实就是SQL语句的查询条件超出了数据库统计信息所记录的范围.谓词越界会导致Oracle优化器错误的选择SQL语句的执行计划,导致性能问题. 这里举一个简单的例子说明谓词越界导致优化器选择了错误的执行计划. create table t1 (col1 number); create index idx_t1 on t1(col1); begin for i in 1..10000 loop insert into t1 values (i); end loop; comm

【练习】ORACLE统计信息--直方图

①创建表tSQL> create table t as select * from dba_objects; Table created. --收集直方图 SQL> exec dbms_stats.gather_table_stats(user,'T'); PL/SQL procedure successfully completed. --此时数据库为表上的所有字段收集了缺省的统计信息,每个列两个Bucket: SQL> col column_name for a30 SQL>

oracle统计信息

create table t2 as select * from dba_objects; 建索引: create index idx_t2 on t2(object_id); 2.收集T2的表所有列和表上所有索引的统计信息: exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'T2',estimate_percent=>100,cascade=>true,degree=>4); degree表示并行度: 3

Oracle 统计信息收集

统计信息收集 1:创建分析表 $ cd $ORACLE_HOME/rdbms/admin $ sqlplus / as sysdba > @utlxplan.sql 2:为了方便,可以创建一个同义表(默认情况下只有sys用户可以使用) SQL> create public synonym plan_tables for plan_table; 3:把这个表的权限给所有人,也可以给指定的人 SQL> grant all on plan_tables to public; 4:创建plust

oracle数据库优化之统计信息

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

oracle表统计信息的使用

最近开发处理ECIF相关的项目,使用存储过程跑批处理数据.定期跑批数据,每次存储过程跑批使用临时表进行数据整理,再join这张临时表将数据放入目标表,最后清空临时表. 问题:在join处理这步中执行较慢,有时半天不出结果集. 解决方案:更新数据库表统计信息 + 使用多进程执行 多进程在此不多讲.每次往临时表插入数据,数据达到几百万条,存储过程结束之后又清除表,这样会让数据库误以为该临时表数据一致为0,因数据库表统计信息并非实时.更新表统计信息能良好地估计统计数据(尤其是针对较大的分区表),并能获

Oracle里收集与查看统计信息的方法

Oracle数据库里的统计信息是这样的一组数据:它存储在数据字典里,且从多个维度描述了Oracle数据库里对象的详细信息.CBO会利用这些统计信息来计算目标SQL各种可能的.不同的执行路径的成本,并从中选择一条成本值最小的执行路径来作为目标SQL的执行计划. Oracle数据库里的统计信息可以分为如下6种类型: 表的统计信息 索引的统计信息 列的统计信息 系统统计信息 数据字典统计信息 内部对象统计信息 表的统计信息用于描述Oracle数据库里表的详细信息,它包含了一些典型的维度,如记录数.表块

Oracle之自动收集统计信息

一.Oracle 11g 在Oracle的11g版本中提供了统计数据自动收集的功能.在部署安装11g Oracle软件过程中,其中有一个步骤便是提示是否启动这个功能(默认是启用这个功能). 在这里介绍一下怎么将该功能启用与禁用: 1.查看自动收集统计信息的任务及状态: SQL> select client_name,status from dba_autotask_client; CLIENT_NAME STATUS ---------------------------------------