oracle10g自动搜集统计信息

本文介绍了Oracle数据库中自动搜集统计信息的Job及其内部机制。该Job名为GATHER_STATS_JOB,通常设定在每晚10点至次日6点运行,用于收集数据库中未统计或更新超过10%的表的信息。通过DBMS_STATS包提供的过程实现,能够根据表的更新频率智能调整统计顺序。

这里讲下 oracle 的每晚自动搜集 统计信息的一个job和过程

SELECT job_name,program_name from Dba_Scheduler_Jobs WHERE job_name='GATHER_STATS_JOB';

SELECT PROGRAM_NAME,PROGRAM_ACTION FROM DBA_SCHEDULER_PROGRAMS WHERE PROGRAM_NAME='GATHER_STATS_PROG';

可以通过如上的语句查到 job 调用的过程。

该作业在创建数据库的自动创建,并且设置为每天晚上10点到第二天早上6点和周六周日的全天为运行窗口期。在运行窗口期内,该作业都会运行,根据stop_on_window_close属性来决定,如在窗口期结束以后,该作业如果还没有运行完毕,是继续运行还是结束运行。

GATHER_DATABASE_STATS_JOB_PROC是内部的存储过程,基本上跟DBMS_STATS.GATHER_DATABASE_STATS[番茄花园1] 的功能一样,但是有内部的优先顺序考虑,更新越多的表将会越优先收集统计信息。

Index monitoring tells you if an index was used to ACCESS DATA.Table monitoring tells us when about 10% of the tables data has been modified.

收集统计信息的表对象是,之前从来没有收集过的或者是更新的(包括insert,update,delete,truncate)记录数超过当前总记录数10%的表。记录数的更改量由Oracle数据库自动监控,在初始化参数statistics_level设置为TYPICAL或者ALL时,自动监控即会生效。

USER_TAB_MODIFICATIONS表中记录了所有被监控的表的数据量更改信息。该信息的更新将会稍微滞后于真实的修改,可以通过DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO存储过程来立刻将更改的信息更新到USER_TAB_MODIFICATIONS表中。对于更新之后再rollback的记录,仍然算为已经受影响的记录,Oracle不会在rollback之后再去更新USER_TAB_MODIFICATIONS表。

这里再贴出一些比较有参考价值的网址:

http://space.itpub.net/12778571/viewspace-608633

DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC存储过程  --详细讲解了自动job

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:68126314591741

http://zhouwf0726.itpub.net/post/9689/265243  -- oracle10g自动分析任务 有个例子

http://dbsnake.com/2009/03/10g-auto-stats-collect.html --job 的一些内部机制

 [番茄花园1]This procedure gathers statistics for all objects in the database

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14730395/viewspace-680560/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14730395/viewspace-680560/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值