有朋友会问“为什么我的在每天晚上10点钟运行的非常缓慢?”。有经验的朋友会想到为CBO提供了自动收集数据库对象统计信息的功能,称之为“”。与之对应的Job正是在周一至周五的晚上10:00到第二天早上的6:00以及周六周日全天这个中来完成的。

我们探索一下Automatic Statistics Collection的维护窗口在数据库中的定义。

1.统计信息自动采集对应的Job信息
数据库创建过程中创建的“GATHER_STATS_JOB”便是用于自动搜集统计数据的Job。该Job可以从dba_scheduler_jobs视图中获得。
sys@ora10g> col JOB_NAME for a16
sys@ora10g> col PROGRAM_NAME for a17
sys@ora10g> col SCHEDULE_NAME for a24
sys@ora10g> col JOB_CLASS for a20
sys@ora10g> select job_name, program_name, schedule_name, job_class from dba_scheduler_jobs where job_name = 'GATHER_STATS_JOB';

JOB_NAME         PROGRAM_NAME      SCHEDULE_NAME            JOB_CLASS
---------------- ----------------- ------------------------ --------------------
GATHER_STATS_JOB GATHER_STATS_PROG MAINTENANCE_WINDOW_GROUP AUTO_TASKS_JOB_CLASS

sys@ora10g> select  program_action from dba_scheduler_programs where PROGRAM_NAME = 'GATHER_STATS_PROG';

PROGRAM_ACTION
-------------------------------------------------------------------
dbms_stats.gather_database_stats_job_proc

据以上信息可知,Job“GATHER_STATS_JOB”是使用program“GATHER_STATS_PROG”在维护窗口“MAINTENANCE_WINDOW_GROUP”中被调用。
“GATHER_STATS_PROG”使用存储过程“dbms_stats.gather_database_stats_job_proc”完成统计数据的收集。

2.确定执行窗口
目标出现了,我们仅需要知道“MAINTENANCE_WINDOW_GROUP”是如何定义的,便可以知道统计信息自动采集的调度时间。
sys@ora10g> select * from dba_scheduler_wingroup_members where window_group_name = 'MAINTENANCE_WINDOW_GROUP';

WINDOW_GROUP_NAME              WINDOW_NAME
------------------------------ ------------------------------
MAINTENANCE_WINDOW_GROUP       WEEKNIGHT_WINDOW
MAINTENANCE_WINDOW_GROUP       WEEKEND_WINDOW

可见,使用的是“WEEKNIGHT_WINDOW”和“WEEKEND_WINDOW”这两个时间窗口。

进一步通过dba_scheduler_windows视图便可以得到具体维护窗口的定义信息。
sys@ora10g> select window_name, repeat_interval, duration from dba_scheduler_windows where window_name = 'WEEKNIGHT_WINDOW';

WINDOW_NAME
------------------------------
REPEAT_INTERVAL
-------------------------------------------------------------------
DURATION
-------------------------------------------------------------------
WEEKNIGHT_WINDOW
freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; bysecond=0
+000 08:00:00

WEEKNIGHT_WINDOW时间窗口定义内容为:每周的一、二、三、四、五的22:00:00开始持续8小时。即,工作日每天晚上的22:00到第二天早上6:00,共8个小时可以用来完成统计数据自动采集的任务。

sys@ora10g> select window_name, repeat_interval, duration from dba_scheduler_windows where window_name = 'WEEKEND_WINDOW';

WINDOW_NAME
------------------------------
REPEAT_INTERVAL
-------------------------------------------------------------------
DURATION
-------------------------------------------------------------------
WEEKEND_WINDOW
freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0
+002 00:00:00

WEEKEND_WINDOW时间窗口定义内容为:每周的六、日的00:00:00开始持续2天。即,周六周日的全天都可以用来完成统计数据自动采集的任务。

以上便是统计信息自动采集Job执行窗口在数据库中的定义信息。

3.有关该维护窗口的创建脚本
对上述维护窗口的定义有兴趣的朋友可以参考一下catmwin.sql脚本。该脚本详细记录了维护窗口的定义过程。
sys@ora10g> !cat $ORACLE_HOME/rdbms/admin/catmwin.sql
Rem
Rem $Header: catmwin.sql 23-feb-2005.16:21:16 mtakahar Exp $
Rem
Rem catmwin.sql
Rem
Rem Copyright (c) 2003, , Oracle. All rights reserved.
Rem
Rem    NAME
Rem      catmwin.sql - Catalog script. for Maintenance WINdow
Rem
Rem    DESCRIPTION
Rem      Defines maintenance window and stats collection job.
Rem
Rem    NOTES
Rem      Must be run when connected as SYSDBA
Rem
Rem    MODIFIED   (MM/DD/YY)
Rem    mtakahar    02/23/05 - #(4175406) change gather_stats_* comments
Rem    mtakahar    09/15/04 - gather_stats_job termination callback
Rem    ilistvin    07/14/04 - move set_attribute outside exception block
Rem    smuthuli    04/26/04 - auto space advisor
Rem    jxchen      12/19/03 - Set "restartable" attribute for GATHER_STATS_JOB
Rem    schakkap    12/05/03 - stop auto stats collection at end of mgmt window
Rem    evoss       12/02/03 -
Rem    evoss       11/17/03 - add follow_default_timezone attr for and
Rem    rramkiss    06/16/03 - flag system-managed objects
Rem    rramkiss    06/16/03 - suppress already_exists errors
Rem    jxchen      06/12/03 - Add job definition
Rem    jxchen      06/04/03 - jxchen_mwin_main
Rem    jxchen      05/12/03 - Created
Rem

-- Create weeknight window.  Weeknight window is 10pm - 6am Mon - Fri.
BEGIN
   BEGIN
   dbms_scheduler.create_window(
      window_name=>'WEEKNIGHT_WINDOW',
      resource_plan=>NULL,
      repeat_interval=>'freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;' ||
                    'byminute=0; bysecond=0',
      duration=>interval '480' minute,
      comments=>'Weeknight window for maintenance task');
   EXCEPTION
      when others then
        if sqlcode = -27477 then NULL;
        else raise;
        end if;
   END;
   dbms_scheduler.set_attribute('WEEKNIGHT_WINDOW','SYSTEM',TRUE);
   dbms_scheduler.set_attribute('WEEKNIGHT_WINDOW',
                                 'FOLLOW_DEFAULT_TIMEZONE',TRUE);
EXCEPTION
      when others then
        if sqlcode = -27477 then NULL;
        else raise;
        end if;
END;
/

-- Create weekend window.  Weekend window is from 12am Saturday through 12am
-- Monday.
BEGIN
    BEGIN
    dbms_scheduler.create_window(
       window_name=>'WEEKEND_WINDOW',
       resource_plan=>NULL,
       repeat_interval=>'freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0',
       duration=>interval '2880' minute,
       comments=>'Weekend window for maintenance task');
    EXCEPTION
      when others then
        if sqlcode = -27477 then NULL;
        else raise;
        end if;
    END;
    dbms_scheduler.set_attribute('WEEKEND_WINDOW','SYSTEM',TRUE);
    dbms_scheduler.set_attribute('WEEKEND_WINDOW',
                                 'FOLLOW_DEFAULT_TIMEZONE',TRUE);
EXCEPTION
      when others then
        if sqlcode = -27477 then NULL;
        else raise;
        end if;
END;
/

-- Create maintenance window group and add weeknight and weekend windows to it.
BEGIN
   BEGIN
   dbms_scheduler.create_window_group('MAINTENANCE_WINDOW_GROUP');
   dbms_scheduler.add_window_group_member('MAINTENANCE_WINDOW_GROUP',
                    'WEEKNIGHT_WINDOW');
   dbms_scheduler.add_window_group_member('MAINTENANCE_WINDOW_GROUP',
                    'WEEKEND_WINDOW');
   EXCEPTION
     when others then
       if sqlcode = -27477 then NULL;
       else raise;
       end if;
   END;
   dbms_scheduler.set_attribute('MAINTENANCE_WINDOW_GROUP','SYSTEM',TRUE);
EXCEPTION
      when others then
        if sqlcode = -27477 then NULL;
        else raise;
        end if;
END;
/

-- Create gather stats program.
BEGIN
dbms_scheduler.create_program(
  program_name=>'gather_stats_prog',
  program_type=>'STORED_PROCEDURE',
  program_action=>'dbms_stats.gather_database_stats_job_proc',
  number_of_arguments=>0,
  enabled=>TRUE,
  comments
      =>'Oracle defined automatic optimizer statistics collection program');
EXCEPTION
  when others then
    if sqlcode = -27477 then NULL;
    else raise;
    end if;
END;
/

-- Create auto space advisor program.
BEGIN
dbms_scheduler.create_program(
  program_name=>'auto_space_advisor_prog',
  program_type=>'STORED_PROCEDURE',
  program_action=>'dbms_space.auto_space_advisor_job_proc',
  number_of_arguments=>0,
  enabled=>TRUE,
  comments=>'auto space advisor maintenance program');
EXCEPTION
  when others then
    if sqlcode = -27477 then NULL;
    else raise;
    end if;
END;
/

-- Create resource manager consumer group.
execute dbms_resource_manager.create_pending_area;

BEGIN
  dbms_resource_manager.create_consumer_group(
     consumer_group=>'AUTO_TASK_CONSUMER_GROUP',
     comment=>'System maintenance task consumer group');
EXCEPTION
  when others then
    if sqlcode = -29357 then NULL;
    else raise;
    end if;
END;
/

execute dbms_resource_manager.submit_pending_area;

-- Create autotask job class
BEGIN
   BEGIN
      sys.dbms_scheduler.create_job_class(
        job_class_name=>'AUTO_TASKS_JOB_CLASS',
        resource_consumer_group=>'AUTO_TASK_CONSUMER_GROUP',
        comments=>'System maintenance job class');
    EXCEPTION
      when others then
        if sqlcode = -27477 then NULL;
        else raise;
        end if;
    END;
    dbms_scheduler.set_attribute('AUTO_TASKS_JOB_CLASS','SYSTEM',TRUE);
EXCEPTION
  when others then
    if sqlcode = -27477 then NULL;
    else raise;
    end if;
END;
/

-- Create stats collection job
BEGIN
    BEGIN
    dbms_scheduler.create_job(
      job_name=>'gather_stats_job',
      program_name=>'gather_stats_prog',
      job_class=>'auto_tasks_job_class',
      schedule_name=>'MAINTENANCE_WINDOW_GROUP',
      enabled=>TRUE,
      auto_drop=>FALSE,
      comments
          =>'Oracle defined automatic optimizer statistics collection job');
    EXCEPTION
      when others then
        if sqlcode = -27477 then NULL;
        else raise;
        end if;
    END;
    dbms_scheduler.set_attribute('gather_stats_job','stop_on_window_close',
             true);
    dbms_scheduler.set_attribute('gather_stats_job','restartable', true);
    dbms_scheduler.set_attribute('gather_stats_job',
        'user_operations_callback','dbms_stats.cleanup_stats_job_proc');
    dbms_scheduler.set_attribute('gather_stats_job','user_callback_context',1);
EXCEPTION
  when others then
    if sqlcode = -27477 then NULL;
    else raise;
    end if;
END;
/

-- Create auto space advisor maintenancejob
BEGIN
    BEGIN
    dbms_scheduler.create_job(
      job_name=>'auto_space_advisor_job',
      program_name=>'auto_space_advisor_prog',
      job_class=>'auto_tasks_job_class',
      schedule_name=>'MAINTENANCE_WINDOW_GROUP',
      enabled=>TRUE,
      auto_drop=>FALSE,
      comments=>'auto space advisor maintenance job');
    EXCEPTION
      when others then
        if sqlcode = -27477 then NULL;
        else raise;
        end if;
    END;
    dbms_scheduler.set_attribute('auto_space_advisor_job',
             'stop_on_window_close', true);
    dbms_scheduler.set_attribute('auto_space_advisor_job','restartable', true);
EXCEPTION
  when others then
    if sqlcode = -27477 then NULL;
    else raise;
    end if;
END;
/

4.小结
本文以“既要知其然,又要知其所以然”的原则阐述了有关10g中统计信息自动收集的执行窗口在数据库中的定义。这些时间窗口对于我们有什么样的指导作用呢?恭喜你,问到点子上了。最直接的指导意义在于:切记勿将需长时间才能完成的高压力任务安排在文中所述的时间窗口内;如业务需要必须在这些时间窗口中执行,我们需要酌情停止统计信息的自动采集功能!

Good luck.

11.01.02

-- The End --

转载于:https://blog.51cto.com/liying/968607

【Statistics】10g中 Automatic Statistics Collection维护窗口之探查相关推荐

  1. Dynamic Performance Tables not accessible,Automatic Statistics...

    From: http://igogo007.iteye.com/blog/443609 使用的PLSQL Developer 工具在对oracle 10g插入数据或查询数据的时候都会报以下错误: Dy ...

  2. Dynamic Performance Tables not accessible Automatic Statistics disabled for this session

    使用oracle时候统计会出现这个提示 Dynamic Performance Tables not accessible Automatic Statistics disabled for this ...

  3. 网络基础2-3(TCP协议,三次握手,四次挥手,TIME_WAIT状态的作用,TCP如何保证可靠传输,TCP连接中状态转化,滑动窗口,流量控制,快速重传,拥塞窗口,延迟应答,捎带应答,粘包问题)

    TCP协议 TCP协议概念 TCP全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传输进行一个详细的控制 TCP协议 ...

  4. Oracle 10g 中 X$KCVFH 说明

    一. X$表说明 之前整理了一篇有关动态性能视图的blog: Oracle 动态性能视图 http://blog.csdn.net/tianlesoftware/article/details/586 ...

  5. oracle安装 sysi,在Oracle 10g 中如何以sys的身份登录isqlplus页面

    在linux上安装完成Oracle 10g以后,我们常常会用到isqlplus来执行SQL语句.但正常的isqlplus登录界面只支持以普通用户的身份进行登录,而我们有时又必须用到sys身份的权限才能 ...

  6. #14# SCCM管理 - 维护窗口

    维护窗口 本篇文章主要讨论ConfigMgr中维护窗口(Maintenance Windows) 每个维护窗口定义了一个时间周期,用于限制SCCM客户端可执行强制部署的时间窗口,起到避免在用户的工作时 ...

  7. pb 修改数据窗口种指定字段位置_如何在PB数据窗口中修改数据---设置数据窗口的更新属性...

    如何在 PB 数据窗口中修改数据 --- 设置数据窗口的更新属性 数据窗口对象非常强大的原因之一就是能够很容易地修改数据库.当用户修 改了数据窗口中的数据,插入了新的数据行或者删除了数据行以后,只要调 ...

  8. 维护窗口和停机时间 可用率99.99%

    维护窗口和停机时间 可用率99.99% QQ的可用率是 99.99% http://www.sqlskills.com/blogs/paul/survey-target-uptime-planned- ...

  9. SAP MM PR Release Strategy 配置中Classification数据的维护

    SAP MM PR Release Strategy 配置中Classification数据的维护 MM顾问都知道,在标准SAP系统中,采购申请审批策略的配置,有部分数据是不能通过TR传输的方式快捷的 ...

  10. WPF中用于嵌入其他进程窗口的自定义控件(AppContainer)

    原文:WPF中用于嵌入其他进程窗口的自定义控件(AppContainer) 版权声明:本文为博主原创文章,转载请注明作者和出处 https://blog.csdn.net/ZZZWWWPPP11199 ...

最新文章

  1. Select 标签可输入
  2. 用python实现远程复制 (scp + expect )
  3. 初识WEB:输入URL之后的故事
  4. 云南昭通暴雨强度公式_昆明市暴雨强度公式推算与对比
  5. 卡尔曼滤波与扩展卡尔曼滤波(EKF)
  6. 戴尔服务器重装系统识别不到硬盘,戴尔台式机重装系统(戴尔台式机重装系统找不到硬盘)...
  7. 红孩儿编辑器的模块设计15
  8. 如何查看当前分支从哪个支线创建而来
  9. 又爆作弊丑闻?AAAI 2023审稿人被作者找上门,才发现rebuttal阶段审稿人互相可见!...
  10. CentOS7 yum安装tomcat
  11. Spring Data JPA 实战
  12. 如何自学Python,需要多久?【建议收藏】
  13. 小白也能看懂的XML简介
  14. HDU 5669 Road(线段树建树)(分层图最短路)
  15. 2012年9月开学季CSDN高校俱乐部专家巡讲讲师招募
  16. 车辆模型预测控制的概念介绍
  17. 全国高校计算机二级WORD试题,(word)全国计算机等级考试二级笔试试题及答案.doc...
  18. 图像化界面开发之QT入门
  19. ffmpeg通过组播udp推ts流
  20. 【广西大学】考研初试复试资料分享

热门文章

  1. 满月啦,Linux公众号!
  2. slots游戏html5开发,unity自定义游戏框架Custom Slots fr amework 1.4
  3. gets函数没有输入会怎样_如果没有“227事件”,肖战的未来会是怎样的?
  4. 【优化算法】Tent映射的混合灰狼优化算法【含Matlab源码 1570期】
  5. 【数学建模】基于matlab GUI排队系统仿真【含Matlab源码 1253期】
  6. 【模拟信号】基于matlab调相信号产生+解调【含Matlab源码 987期】
  7. 赛车游戏代码大全html,赛车游戏代码
  8. pytorch使用模型预测_使用PyTorch从零开始对边界框进行预测
  9. java 反射 框架_Java——利用反射实现框架类
  10. 例3.1 括号匹配问题 - 九度教程第26题(栈的应用)