自动统计收集作业在10g和11g中
适用于:
数据库企业版:版本10gr1到11gr2,文档信息适用于各种操作系统平台
目的:
提供一站式自动化信息收集在10g和11g中
问题和解答
收集什么类型统计信息?
写作业用来收集丢失的统计和陈旧的统计
在10g中如何禁用自动统计状态?
BEGIN
DBMS_SCHEDULER.DISABLE ('GATHER_STATS_JOB');
END;
如何开启作业在11g中?
执行exec sys.dbms_scheduler.enable (‘"SYS"."GATHER_STATS_JOB"‘); 开启作业
如何确定参数GATHER_STATS_JOB已经设置完成?
执行SELECT job_name, state FROM dba_scheduler_jobs WHERE job_name='GATHER_STATS_JOB'; 查询语句看是否设置完成
注意:如果一个作业已经运行成功,但是又要被再次运行,那个作业的状态会被设置成“计划”
如果'end_date' or 'max_runs'达到,那么作业将会被标记成完成状态
用DBMS_SCHEDULER改变一个作业下次运行时间,你可以通过下面的代码实现
begin
dbms_scheduler.disable('gather_stats_job');
dbms_scheduler.set_attribute_null('gather_stats_job','schedule_name');
dbms_scheduler.set_attribute(
'gather_stats_job','repeat_interval','freq=minutelty;byminute=1,11,21,31,41,51;byhour=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,22,23;bysecond=0');
dbms_scheduler.enable('gather_stats_job');
end;
在10g罪业的默认运行时间是什么?
夜晚运行时间在每周一到周五的晚上10点到早上6点
周末运行时间占用了整个周六和周日
GATHER_STATS_JOB可以填充CHAIN_CNT分析命令?
作业不能填充整个行的信息。你可以用自动管理段来对目标进行操作,她提供了对行的分析
在11g中有什么新的/修改在自动统计收集上
在11g中,GATHER_STATS_JOB作业不存在了,取而代之的并且包含在自动维护任务当中
在11g中,如何开启自动收集?
我们可以运行下面的语句,调用存储过程的DBMS_AUTO_TASK_ADMIN包中的ENABLE参数,例如
BEGIN
DBMS_AUTO_TASK_ADMIN.ENABLE(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => NULL);
END;
/
在11g中如何关闭自动收集?
如果你想关闭实例,你可以调用DBMS_AUTO_TASK_ADMIN包中的DISABLE参数,例如
BEGIN
DBMS_AUTO_TASK_ADMIN.DISABLE(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => NULL);
END;
/
如何检查自动化运行统计信息的运行状态?
select client_name, JOB_SCHEDULER_STATUS from DBA_AUTOTASK_CLIENT_JOB
where client_name=’ auto optimizer stats collection’;
检索的结果可能会有如下的状态
· DISABLED
· RETRY SCHEDULED
· SCHEDULED
· RUNNING
· COMPLETED
· BROKEN
· FAILED
· REMOTE
· SUCCEEDED
· CHAIN_STALLED
11g如何知道每个作业历史工作状态?
SELECT client_name, window_name, jobs_created, jobs_started, jobs_completed
FROM dba_autotask_client_history WHERE client_name like '%stats%';
CLIENT_NAME WINDOW_NAME JOBS JOBS JOBS
CREATED STARTED COMPLETED
------------------------------- ---------------- ------- -------- ----------
auto optimizer stats collection THURSDAY_WINDOW 1 1 1
auto optimizer stats collection SUNDAY_WINDOW 3 3 3
auto optimizer stats collection MONDAY_WINDOW 1 1 1
auto optimizer stats collection SATURDAY_WINDOW 2 2 2
如何手工执行自动统计信息工具在11g中?
在11g中,我们可以执行exec DBMS_AUTO_TASK_IMMEDIATE.GATHER_OPTIMIZER_STATS来手工收集统计信息
如何查看参数值来被作业调用?
DBMS_STATS.GET_PARAM (
pname IN VARCHAR2)
RETURN VARCHAR2;
如果有一些默认的参数在作业中,执行下卖弄的代码
DBMS_STATS.GET_PREFS (
pname IN VARCHAR2,
ownname IN VARCHAR2 DEFAULT NULL, tabname IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2;
执行的结果可能会显示:
· AUTOSTATS_TARGET
· CASCADE
· DEGREE
· ESTIMATE_PERCENT
· METHOD_OPT
· NO_INVALIDATE
· GRANULARITY
· PUBLISH
· INCREMENTAL
· STALE_PERCENT
如何设置job的运行方式为下一次执行计划?
你可以执行下面的代码实现
BEGIN
DBMS_STATS.SET_GLOBAL_PREFS('STALE_PERCENT','5');
END;
SET_GLOBAL_PREFS使你能够改变默认的参数值通过存储过程DBMS_STATS.GATHER_*_STATS。没有一个存在的表对热河一个已经创建好的对象。SET_DATABASE_PREFS使你能够改变默认的参数通过存储过程DBMS_STATS.GATHER_*_STATS。你可以用系统包含的对象例如sys和system通过设置ADD_SYS参数为TRUE。这样将不会影响到以后创建的对象。
在11g中,什么是全局时间自动目标收集?
这些额外的参数控制对自动收集作业很有照顾。这些参数的值可以设置成all,oracle和auto。All意味着自动收集作业将会收集统计信息在数据库的所有对象。Oracle意味着自动收集作业将会只对数据库拥有的对象进行收集统计。Auto意味着数据库将自己决定哪些对象将被收集统计。目前auto和all模式相同