在Oracle的11g版本中提供了统计数据自动收集的功能。在部署安装11g Oracle软件过程中,其中有一个步骤便是提示是否启用这个功能(默认是启用这个功能)。这个功能貌似带来了统计数据采集上的便捷,但是其中却隐藏着性能隐患。在7*24小时的系统中这种自动运行的任务很有可能对系统性能带来冲击。
因此,我们酌情需要禁掉这项功能。本文给出禁止自动收集统计信息的方法。
1.查看自动收集统计信息的任务及状态
sys@ora11g> select client_name,status from dba_autotask_client;
CLIENT_NAME STATUS
------------------------------------- --------
auto optimizer stats collection ENABLED
auto space advisor ENABLED
sql tuning advisor ENABLED
其中“auto optimizer stats collection”便是我们要寻找的自动收集统计信息的任务名称,它的状态目前是启用状态。
2.禁止自动收集统计信息的任务
我们可以使用DBMS_AUTO_TASK_ADMIN包完成这个任务。
sys@ora11g> exec DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
PL/SQL procedure successfully completed.
sys@ora11g> select client_name,status from dba_autotask_client;
CLIENT_NAME STATUS
------------------------------------- --------
auto optimizer stats collection DISABLED
auto space advisor ENABLED
sql tuning advisor ENABLED
此时“auto optimizer stats collection”任务已经被禁用,目的达到。
3.启用自动收集统计信息的任务
sys@ora11g> exec DBMS_AUTO_TASK_ADMIN.ENABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
PL/SQL procedure successfully completed.
sys@ora11g> select client_name,status from dba_autotask_client;
CLIENT_NAME STATUS
------------------------------------- --------
auto optimizer stats collection ENABLED
auto space advisor ENABLED
sql tuning advisor ENABLED
4.10g中查询方法与11g中的不相同
下面是在10g中查看收集统计信息作业的方法
sys@ora10g> col JOB_NAME for a16
sys@ora10g> col PROGRAM_NAME for a18
sys@ora10g> col SCHEDULE_NAME for a20
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
注意10g中的查询方法在11g中是不可用的。
sys@ora11g> select job_name, program_name, schedule_name, job_class from dba_scheduler_jobs where job_name = 'GATHER_STATS_JOB';
no rows selected
5.小结
再一次印证:默认值并不总是最美丽的!我们应该了解每一个新特性带给我们的便捷和优势,更重要的是我们要清醒的认识到它可能带来的弊端和影响。请充分评估和测试后再为我所用。
Good luck.
secooler
10.12.27
-- The End --
因此,我们酌情需要禁掉这项功能。本文给出禁止自动收集统计信息的方法。
1.查看自动收集统计信息的任务及状态
sys@ora11g> select client_name,status from dba_autotask_client;
CLIENT_NAME STATUS
------------------------------------- --------
auto optimizer stats collection ENABLED
auto space advisor ENABLED
sql tuning advisor ENABLED
其中“auto optimizer stats collection”便是我们要寻找的自动收集统计信息的任务名称,它的状态目前是启用状态。
2.禁止自动收集统计信息的任务
我们可以使用DBMS_AUTO_TASK_ADMIN包完成这个任务。
sys@ora11g> exec DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
PL/SQL procedure successfully completed.
sys@ora11g> select client_name,status from dba_autotask_client;
CLIENT_NAME STATUS
------------------------------------- --------
auto optimizer stats collection DISABLED
auto space advisor ENABLED
sql tuning advisor ENABLED
此时“auto optimizer stats collection”任务已经被禁用,目的达到。
3.启用自动收集统计信息的任务
sys@ora11g> exec DBMS_AUTO_TASK_ADMIN.ENABLE(client_name => 'auto optimizer stats collection',operation => NULL,window_name => NULL);
PL/SQL procedure successfully completed.
sys@ora11g> select client_name,status from dba_autotask_client;
CLIENT_NAME STATUS
------------------------------------- --------
auto optimizer stats collection ENABLED
auto space advisor ENABLED
sql tuning advisor ENABLED
4.10g中查询方法与11g中的不相同
下面是在10g中查看收集统计信息作业的方法
sys@ora10g> col JOB_NAME for a16
sys@ora10g> col PROGRAM_NAME for a18
sys@ora10g> col SCHEDULE_NAME for a20
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
注意10g中的查询方法在11g中是不可用的。
sys@ora11g> select job_name, program_name, schedule_name, job_class from dba_scheduler_jobs where job_name = 'GATHER_STATS_JOB';
no rows selected
5.小结
再一次印证:默认值并不总是最美丽的!我们应该了解每一个新特性带给我们的便捷和优势,更重要的是我们要清醒的认识到它可能带来的弊端和影响。请充分评估和测试后再为我所用。
Good luck.
secooler
10.12.27
-- The End --
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-682820/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/519536/viewspace-682820/