oracle收集统计信息job停止

1)  先来看下oracle 10g中的自动统计任务的问题。 
从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动收集CBO的统计信息。 

这个自动任务默认情况下在工作日晚上10:00-6:00和周末全天开启。调用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集统计信息。该过程首先检测统计信息缺失和陈旧的对象。然后确定优先级,再开始进行统计信息。 

可以通过以下查询这个JOB的运行情况: 
select * from Dba_Scheduler_Jobs where JOB_NAME ='GATHER_STATS_JOB' 
其实同在10点运行的Job还有一个AUTO_SPACE_ADVISOR_JOB: 
SQL> select JOB_NAME,LAST_START_DATE from dba_scheduler_jobs; 
JOB_NAME                      LAST_START_DATE 
------------------------------ ---------------------------------------- 
AUTO_SPACE_ADVISOR_JOB        04-DEC-07 10.00.00.692269 PM +08:00 
GATHER_STATS_JOB              04-DEC-07 10.00.00.701152 PM +08:00 
FGR$AUTOPURGE_JOB 
PURGE_LOG                      05-DEC-07 03.00.00.169059 AM PRC 

然而这个自动化功能已经影响了很多系统的正常运行,晚上10点对于大部分生产系统也并非空闲时段。 
而自动分析可能导致极为严重的闩锁竞争,进而可能导致数据库Hang或者Crash。 

所以建议最好关闭这个自动统计信息收集功能: 
exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB'); 


2)oracle 11g的系统自动job 
   
SQL> select job_name,comments from dba_scheduler_jobs; 


3)10g关闭自动收集job 
select * from Dba_Scheduler_Jobs where JOB_NAME ='GATHER_STATS_JOB' 
所以建议最好关闭自动统计信息收集功能: 
exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB'); 
启动自动统计信息收集功能 
exec DBMS_SCHEDULER.ENABLE('GATHER_STATS_JOB'); 

手工收集统计信息: 
SQL> exec dbms_stats.gather_schema_stats('detail',options=>'gather stale',estimate_percent =>10); 

--收集没有分析过的表的统计信息 
begin 
dbms_stats.gather_schema_stats(ownname=>scott,options=>'gather empty'); 
end; 
--重新分析修改量超过10%的表(这些修改包括插入、更新和删除) 
begin 
dbms_stats.gather_schema_stats(ownname=>scott,options=>'gather stale'); 
end; 

4)11G关系自动收集job 
   对于11g版本的oracle 有三个自动维护定时任务。 
1 自动优化器统计收集:为所有方案对象收集陈旧的或缺少的统计数据,所收集的统计信息将被用来提高sql的执行的性能,任务名是“auto optimizer stats collection” 
2 自动分段顾问:标识数据库中的段是否有可以回收的空间,并以此信息统计为基础做出怎样整理段的碎片以节约空间。你也可以手动的执行此job来获取最新的建议信息,或者获取自动段advisor 不检测的但又可以回收的段的信息,任务名是“auto space advisor” 
3 自动SQL调整顾问:自动标识并尝试调整高负载的SQL,任务名是“sql tuning advisor” 
sys@RAC> select client_name ,status from DBA_AUTOTASK_CLIENT; 
CLIENT_NAME                                                      STATUS 
---------------------------------------------------------------- -------- 
auto optimizer stats collection                                  ENABLED 
auto space advisor                                               ENABLED 
sql tuning advisor                                               ENABLED 
管理自动维护的job 
在oracle 10g中这些job被分别创建并且以DBA_SCHEDULER_JOBS.JOB_NAME的名称出现 
然而在11g中则有所改变,通过视图DBA_AUTOTASK_WINDOW_CLIENTS可以查看他们一周七天的执行情况,包括 
时间窗口,下次执行时间,job的名称,健康检查 
sys@RAC> select * from DBA_AUTOTASK_WINDOW_CLIENTS; 
WINDOW_NAME        WINDOW_NEXT_TIME                   WINDO AUTOTASK OPTIMIZE SEGMENT_ADVISOR SQL_TUNE HEALTH_M 
------------------ ---------------------------------- ----- -------- -------- --------------- -------- -------- 
WEDNESDAY_WINDOW   28-SEP-11 10.00.00.000000 PM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED 
SATURDAY_WINDOW    01-OCT-11 06.00.00.000000 AM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED 
THURSDAY_WINDOW    29-SEP-11 10.00.00.000000 PM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED 
TUESDAY_WINDOW     27-SEP-11 10.00.00.000000 PM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED 
SUNDAY_WINDOW      02-OCT-11 06.00.00.000000 AM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED 
MONDAY_WINDOW      03-OCT-11 10.00.00.000000 PM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED 
FRIDAY_WINDOW      30-SEP-11 10.00.00.000000 PM PRC   FALSE DISABLED ENABLED  ENABLED         ENABLED  DISABLED 
7 rows selected. 

DBMS_AUTO_TASK_ADMIN包的ENABLE和DISABLE存储过程能够实现关闭或者开启的三种job(不要任何参数): 
execute DBMS_AUTO_TASK_ADMIN.DISABLE; 
execute DBMS_AUTO_TASK_ADMIN.ENABLE; 


关闭指定的job 
BEGIN 
  dbms_auto_task_admin.disable( 
  client_name => 'sql tuning advisor', 
  peration => NULL, 
  window_name => NULL); 
END;  
/ 
开启指定的job: 
BEGIN 
  dbms_auto_task_admin.enable( 
  client_name => 'sql tuning advisor', 
  peration => NULL, 
  window_name => NULL); 
END;  
/ 
关闭周三sql优化器顾问的执行窗口 
sys@RAC> BEGIN 
  2         dbms_auto_task_admin.disable( 
  3         client_name => 'sql tuning advisor', 
  4         peration => NULL, 
  5         window_name => 'MONDAY_WINDOW'); 
  6       END;  
  7      / 
PL/SQL procedure successfully completed. 
sys@RAC> select * from DBA_AUTOTASK_WINDOW_CLIENTS; 

WINDOW_NAME        WINDOW_NEXT_TIME                   WINDO AUTOTASK OPTIMIZE SEGMENT_ADVISOR      SQL_TUNE HEALTH_M 
------------------ ---------------------------------- ----- -------- -------- -------------------- -------- -------- 
WEDNESDAY_WINDOW   28-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED 
SATURDAY_WINDOW    01-OCT-11 06.00.00.000000 AM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED 
THURSDAY_WINDOW    29-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED 
TUESDAY_WINDOW     27-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED 
SUNDAY_WINDOW      02-OCT-11 06.00.00.000000 AM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED 
MONDAY_WINDOW      03-OCT-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              DISABLED DISABLED 
FRIDAY_WINDOW      30-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED 
7 rows selected. 
关闭星期天的自动段顾问job的时间窗口: 
sys@RAC> BEGIN 
  2         dbms_auto_task_admin.disable( 
  3         client_name => 'auto space advisor', 
  4         peration => NULL, 
  5         window_name => 'SUNDAY_WINDOW'); 
  6       END;  
  7      / 
PL/SQL procedure successfully completed. 

sys@RAC> select * from DBA_AUTOTASK_WINDOW_CLIENTS; 

WINDOW_NAME        WINDOW_NEXT_TIME                   WINDO AUTOTASK OPTIMIZE SEGMENT_ADVISOR      SQL_TUNE HEALTH_M 
------------------ ---------------------------------- ----- -------- -------- -------------------- -------- -------- 
WEDNESDAY_WINDOW   28-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED 
SATURDAY_WINDOW    01-OCT-11 06.00.00.000000 AM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED 
THURSDAY_WINDOW    29-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED 
TUESDAY_WINDOW     27-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED 
SUNDAY_WINDOW      02-OCT-11 06.00.00.000000 AM PRC   FALSE ENABLED  ENABLED  DISABLED             ENABLED  DISABLED 
MONDAY_WINDOW      03-OCT-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              DISABLED DISABLED 
FRIDAY_WINDOW      30-SEP-11 10.00.00.000000 PM PRC   FALSE ENABLED  ENABLED  ENABLED              ENABLED  DISABLED 


5) 11G关闭自动job 
SQL> select client_name,status from DBA_AUTOTASK_CLIENT; 

CLIENT_NAME                                                      STATUS 
---------------------------------------------------------------- -------- 
auto optimizer stats collection                                  ENABLED 
auto space advisor                                               ENABLED 
sql tuning advisor                                               ENABLED 

begin 
DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto optimizer stats collection', 
operation => NULL, 
window_name => NULL); 
end; 
/ 
PL/SQL procedure successfully completed. 

SQL>  select client_name,status from DBA_AUTOTASK_CLIENT; 

CLIENT_NAME                                                      STATUS 
---------------------------------------------------------------- -------- 
auto optimizer stats collection                                  DISABLED 
auto space advisor                                               ENABLED 
sql tuning advisor                                               ENABLED 

 

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

转载于:http://blog.itpub.net/22990797/viewspace-750537/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
针对Oracle分区表的收集统计信息可以通过以下步骤完成: 1. 确定需要收集统计信息的分区表。 2. 使用DBMS_STATS包中的GATHER_TABLE_STATS过程收集表的统计信息。例如: ``` EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname=>'schema_name',tabname=>'table_name',partname=>'partition_name',cascade=>TRUE,estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE); ``` 其中,ownname代表分区表所在的schema名称,tabname代表分区表名称,partname代表分区名称,cascade参数指定收集分区表的所有分区的统计信息,estimate_percent参数指定使用自动样本大小。 3. 对于大型分区表,可以考虑使用INCREMENTAL方法收集统计信息,以便节省收集统计信息的时间和资源。例如: ``` EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname=>'schema_name',tabname=>'table_name',partname=>'partition_name',cascade=>TRUE,estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt=>'FOR ALL COLUMNS SIZE AUTO INCREMENTAL ON PARTITION(partition_name)'); ``` 其中,method_opt参数指定了使用INCREMENTAL方法收集统计信息,并且只对指定的分区进行增量收集。 4. 在收集完分区表的统计信息后,可以使用DBMS_STATS.PURGE_TABLE_STATS过程清除过期的统计信息。例如: ``` EXEC DBMS_STATS.PURGE_TABLE_STATS(ownname=>'schema_name',tabname=>'table_name',partname=>'partition_name',cascade=>TRUE); ``` 其中,cascade参数指定清除分区表的所有分区的统计信息。 以上就是收集Oracle分区表统计信息的基本步骤。需要注意的是,统计信息收集频率应该根据分区表数据的变化情况来确定,以便保证查询优化器的准确性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值