拓扑园

  • O&M
    • Universal部署
    • PHP+VUE+Laravel相关
  • Oracle性能优化
  • Oracle项目案例
    • Oracle近期项目案例(目录)
    • Oracle实战问题解析(目录)
    • Oracle数据库名变更流程(2种方式)
    • Oracle数据库目录更换流程(使用Oracle的clone工具)
    • Oracle数据库迁移方案(目录)
    • 标准化文档系列
  • Oracle基础知识
    • LLL的Oracle培训(分类)
    • LLL的docker培训(分类)
    • 标准化文档系列--(分类)
    • Oracle核心经典分析(分类)
    • 图灵小队----(分类并包含以下文章)
    • --MySQL8.0/Oracle/Memcached/Redis等安装配置于RHEL/OL6/7/8.X系列-运行环境最优配置
    • --PG安装配置于RHEL/9X系列-运行环境最优配置
    • --自动维护任务详解-开启、关闭信息统计收集(统计信息)
    • --图灵小队—Oracle/PostgreSQL下创建一个用户测试表(自行定义数据行)
    • --图灵小队-Oracle存储过程导出表的明细_UTL_FILE(文章)
    • --图灵小队-Oracle数据库删除/卸载操作指南(文章)
    • --图灵小队-Oracle常用性能查询SQL语句(文章)
    • --图灵小队-Oracle数据库上线前检查(文章)
    • --图灵小队-Oracle常用SQL语句(文章)
    • --图灵小队—Linux/Oracle脚本/MySQL合集(持续更新)
    • --图灵小队-Oracle技巧记录(文章)
    • ADG
    • RAC
    • ASM
    • OGG
    • RMAN
    • EXPDP/IMPDP
    • 工厂数据导入导出系列
  • MySQL
    • MySQL数据库规范
    • MySQL项目案例
    • MySQL安装配置
    • MYSQL集群项目
    • MySQL常见处理
    • MySQL-Sysbench专题
    • MySQL-Percona Toolkit专题
  • Linux
    • Shell编程
    • kubernetes
    • docker
    • Linux
    • PHP
    • Nginx
    • haproxy
    • mail
    • 网站
    • 域名
    • 网址收藏
  • 数据中心
    • 新框架系统集合
    • 工作文档
    • EBS数据文件扩容
    • VMware虚拟化
    • EBS系列
    • 大数据
    • SVN
    • zabbix
    • SAP
    • 备份相关
    • FC交换机
    • SVN
  • K-Studing
    • D8-Python学习
    • Oracle/MySQl等面试题
    • LG-MySQL
    • LG-Docker/K8S
    • LG-PostgreSQL
    • LG-ORACLE_BBED
    • LG-ORACLE
    • LG-Elasticsearch(ES)+ELK
    • Oracle-19C-OCP
    • WERN_ORACLE培训
    • redis数据库
    • Nginx培训学习系列
  • 其他
    • 外研英语4年级下册-听力
    • 影视系列
    • 如何使用iTunes软件通过抓包下载旧版本的ios的app
天高任鸟飞
Oracle/MySQL数据库恢复/数据迁移/生产规范报告技术交流:TEL:18562510581(微信同号);加微信入群
  1. 首页
  2. Oracle基础知识
  3. 图灵小队
  4. 正文

Oracle 11g 每晚22点默认开始的自动维护任务详解——开启、关闭信息统计收集(统计信息)

2022年1月20日 5166点热度 1人点赞 0条评论

目录

  • 一、自动优化任务(SYS_AUTO_SQL_TUNING_TASK)
    • 1、查看自动优化任务的参数值
    • 2、修改优化执行时间
      • (1)每条sql最大时间--Time limit per statement in a SQL Tuning Set
      • (2)整个分析任务执行时间--The maximum time that an analysis can execute
    • 3、查看是否已经完成
    • 4、手动执行sql_tuning任务
      • (2)pl/sql developer执行
    • 5、取消正在进行的sql_tuning任务
      • (1)sqlplus执行;
      • (2)pl/sql developer执行
  • 二、计划维护任务
    • 1、Oracle 11g 三种预定义的自动维护任务:
      • (1) 自动优化器统计收集(auto optimizer stats collection)
      • (2)自动分段顾问:(auto space advisor)
      • (3)自动SQL调整顾问:(sql tuning advisor)
    • 2、什么是维护窗口
    • 3、维护窗口查看
  • 三、启用/禁用自动维护任务
    • 1、启用或禁用所有自动维护任务的所有窗口
      • (1)禁用
      • (2)启用
    • 2、启用或禁止某个自动维护任务的所有窗口(默认有3个任务):
      • (1)如:禁用所有的sql tuning advisor任务
      • (2)启用所有的sql tuning advisor任务(如:sql tuning advisor)
    • 3、启用或禁用某个自动维护任务的某个维护窗
      • (1)禁用(如:sql tuning advisor的周一窗口)
      • (2)启用(如:sql tuning advisor的周一窗口)
  • 四、维护窗口属性:
    • 1、修改窗口的属性步骤
      • (1)首先禁用维护窗口
      • (2)修改维护窗口属性:
      • (3)启用维护窗口:
    • 2、创建新窗口:
      • 3、删除窗口:
  • 五、立即停止正在运行的任务
    • 1、查看当前正在运行的任务
      • (1)JOBS:
      • (2)DBMS_JOBS: 
    • 2、立即停止任务
      • (1)sqlplus执行
      • (2)pl/sql执行
  • 六、跟踪job运行历史情况:
  • 七、跟踪job运行历史情况:
    • 1、问题现象:
      • (1)查看当时的日志发现:
      • (2)查看trc文件发现:
    • 2、分析
    • 3、解决思路:
    • 4、解决方式:

一、自动优化任务(SYS_AUTO_SQL_TUNING_TASK)

任务包含了三项内容:

自动优化器统计收集(auto optimizer stats collection)

自动分段顾问:(auto space advisor)

自动SQL调整顾问:(sql tuning advisor)

1、查看自动优化任务的参数值

select * from dba_advisor_parameters 
where task_name like 'SYS_AUTO_SQL_TUNING%' and (parameter_name like '%TIME_LIMIT%' or parameter_name like '%TIME_LIMIT%');

默认自动优化任务是1200秒(20分钟)。如果超时了,就会自动停止。

2、修改优化执行时间

(1)每条sql最大时间--Time limit per statement in a SQL Tuning Set

设置10800s=3小时。

begin
dbms_sqltune.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK', 'LOCAL_TIME_LIMIT', 10800);
end;

(2)整个分析任务执行时间--The maximum time that an analysis can execute

设置36000s=10小时。

begin 
dbms_sqltune.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK', 'TIME_LIMIT', 36000); 
end;

3、查看是否已经完成

status是状态。可以查看开始运行时间和结束时间。

 select * from dba_advisor_tasks where task_name = 'SYS_AUTO_SQL_TUNING_TASK';

4、手动执行sql_tuning任务

sqlplus执行;

exec dbms_sqltune.execute_tuning_task(task_name=>'SYS_AUTO_SQL_TUNING_TASK');

(2)pl/sql developer执行

begin 
exec dbms_sqltune.execute_tuning_task(task_name=>'SYS_AUTO_SQL_TUNING_TASK');
end; /

5、取消正在进行的sql_tuning任务

(1)sqlplus执行;

 exec dbms_sqltune.cancel_tuning_task('SYS_AUTO_SQL_TUNING_TASK');

(2)pl/sql developer执行

begin
 exec dbms_sqltune.cancel_tuning_task('SYS_AUTO_SQL_TUNING_TASK');
end;
/

二、计划维护任务

自动维护任务是一种按规则自动启动的数据库维护操作任务。

比如自动收集为查询优化器使用的统计信息。

自动维护任务按维护窗口自动运行。

1、Oracle 11g 三种预定义的自动维护任务:

任务查看:

SQL>select * from dba_autotask_client;
SQL> select client_name,status,window_group from dba_autotask_client;

(1) 自动优化器统计收集(auto optimizer stats collection)

为所有方案对象收集陈旧的或缺少的统计数据,所收集的统计信息将被用来提高sql的执行的性能,任务名是“auto optimizer stats collection”

(2)自动分段顾问:(auto space advisor)

标识数据库中的段是否有可以回收的空间,并以此信息统计为基础做出怎样整理段的碎片以节约空间。

你也可以手动的执行此job来获取最新的建议信息,或者获取自动段advisor 不检测的但又可以回收的段的信息,任务名是“auto space advisor”

(3)自动SQL调整顾问:(sql tuning advisor)

自动标识并尝试调整高负载的SQL,任务名是“sql tuning advisor”

缺省情况下,这三个任务配置为在所有维护窗口运行。

2、什么是维护窗口

所谓自动维护窗口是按照预定义的间隔时间窗口。

维护窗口是一个连续的时间间隔,用于管理自动维护任务所用。

维护窗口是oracle 调度窗口,属于窗口组MAINTENANCE_WINDOW_GROUP。

3、维护窗口查看

select window_name,resource_plan,start_date,repeat_interval,duration,next_start_date,enabled,active from dba_scheduler_windows;

三、启用/禁用自动维护任务

1、启用或禁用所有自动维护任务的所有窗口

(1)禁用

begin
  EXECUTE DBMS_AUTO_TASK_ADMIN.DISABLE;
end;
/

(2)启用

begin
  EXECUTE DBMS_AUTO_TASK_ADMIN.enable;
end;
/

2、启用或禁止某个自动维护任务的所有窗口(默认有3个任务):

使用DBMS_AUTO_ADMIN pl/sql包来启用或禁用任务:

(1)如:禁用所有的sql tuning advisor任务

BEGIN
 dbms_auto_task_admin.disable(
 client_name => 'sql tuning advisor',
 operation => NULL,
 window_name => NULL);
END;

(2)启用所有的sql tuning advisor任务(如:sql tuning advisor)

BEGIN
 dbms_auto_task_admin.enable(
 client_name => 'sql tuning advisor',
 operation => NULL, 
 window_name => NULL);
END;

这里client_name参数可以通过数据字典视图DBA_AUTOTASK_CLIENT来查询。

sys@ORCL11> select client_name from dba_autotask_client;
CLIENT_NAME
------------------------------------------------------------
auto optimizer stats collection
auto space advisor
sql tuning advisor

3、启用或禁用某个自动维护任务的某个维护窗

缺省情况下,所有维护任务在所有预定义的维护窗口都运行。可以对某一个维护窗口启用或禁用自动化任务。

(1)禁用(如:sql tuning advisor的周一窗口)

BEGIN
  dbms_auto_task_admin.disable(
  client_name => 'sql tuning advisor',
  operation => NULL,
  window_name => 'MONDAY_WINDOW');
END;

(2)启用(如:sql tuning advisor的周一窗口)

BEGIN
  dbms_auto_task_admin.enable(
  client_name => 'sql tuning advisor',
  operation => NULL,
  window_name => 'MONDAY_WINDOW');
END;

四、维护窗口属性:

可是使用DBMS_SCHEDULER 包来修改窗口属性。

1、修改窗口的属性步骤

(1)首先禁用维护窗口

BEGIN
  dbms_scheduler.disable
  (
     name => 'SATURDAY_WINDOW'
  );
END;
/

(2)修改维护窗口属性:

--修改周六的窗口属性(修改value,间隔4小时进行一次)

begin
dbms_scheduler.set_attribute
 (
     name => 'SATURDAY_WINDOW',
     attribute => 'DURATION',
     value => numtodsinterval(4, 'hour')
 );
end;
/

--修改周五的窗口属性(修改value值,每周五11点40开始)

begin
  dbms_scheduler.set_attribute
  (
    name => 'FRIDAY_WINDOW',
    attribute => 'REPEAT_INTERVAL',
    value => 'freq=daily;byday=FRI;byhour=11;byminute=40; bysecond=0'
  );
end;
/

(3)启用维护窗口:

BEGIN
dbms_scheduler.enable
 (
      name => 'SATURDAY_WINDOW'
 );
END;
/
对于当前打开的窗口,你需要首先禁用,然后修改再启用,配置立即生效,如果你不通过这三个过程来修改属性,属性是不会生效的,直到下一次窗口打开。

2、创建新窗口:

BEGIN
dbms_scheduler.create_window(
                     window_name => 'EARLY_MORNING_WINDOW',
                     duration => numtodsinterval(1, 'hour'),
                     resource_plan => 'DEFAULT_MAINTENANCE_PLAN',
                     repeat_interval => 'FREQ=DAILY;BYHOUR=5;BYMINUTE=0;BYSECOND=0');
                     dbms_scheduler.add_window_group_member(
                     group_name => 'MAINTENANCE_WINDOW_GROUP',
                     window_list => 'EARLY_MORNING_WINDOW');
END;
/

3、删除窗口:

BEGIN
DBMS_SCHEDULER.REMOVE_WINDOW_GROUP_MEMBER(
       group_name => 'MAINTENANCE_WINDOW_GROUP',
       window_list => 'EARLY_MORNING_WINDOW');
END; 
/

五、立即停止正在运行的任务

1、查看当前正在运行的任务

(1)JOBS:

jobs是oracle数据库的对象,由dbms_scheduler.create_job这个包创建,即使用program,scheduler来配置job

通过视图:

SQL>SELECT * FROM USER_SCHEDULER_RUNNING_JOBS;

(2)DBMS_JOBS: 

dbms_jobs只是jobs对象的一个实例, 就像对于tables, emp和dept都是表的实例。

可以通过视图查询:

SELECT * FROM DBA_JOBS_RUNNING;

停止运行job:

 dbms_job.broken(jobid,true);

2、立即停止任务

(1)sqlplus执行

SQL>exec  dbms_scheduler.stop_job('job_name名称',force=>true);

(2)pl/sql执行

begin
   dbms_scheduler.stop_job('job_name名称',force=>true);
end;
/

六、跟踪job运行历史情况:

可以通过查询视图DBA_AUTOTASK_HISTORY追踪job运行情况:
SQL> select client_name,job_name,job_start_time from dba_autotask_job_history;
CLIENT_NAME JOB_NAME JOB_START_TIME
-------------------- -------------------- ------------------------------------
auto optimizer stats ORA$AT_OS_OPT_SY_1 09-APR-12 10.00.02.039000 PM +08:00
auto space advisor ORA$AT_SA_SPC_SY_2 09-APR-12 10.00.02.050000 PM +08:00
sql tuning advisor ORA$AT_SQ_SQL_SW_3 09-APR-12 10.00.02.015000 PM +08:0

七、跟踪job运行历史情况:

数据库默认sql tuning advisor,导致大量library cache lock

1、问题现象:

客户反映周六周日固定十点钟,一个程序会特别慢(大概10分钟),平时1到2秒。

(1)查看当时的日志发现:

DBMS_STATS: GATHER_STATS_JOB encountered errors. Check the trace file.

Errors in file /oracle/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_j002_51847.trc:
ORA-04021: timeout occurred while waiting to lock object

(2)查看trc文件发现:

ORA-04021: timeout occurred while waiting to lock object 
*** 2015-09-20 10:17:51.129
DBMS_STATS: GATHER_STATS_JOB: GATHER_TABLE_STATS('"CUSTOMERUSER"','"CUSTOM_TABLE"','"CUSTOMER_201509"', ...)
DBMS_STATS: ORA-04021: timeout occurred while waiting to lock object

2、分析

根据经验判断是锁导致,一下是解决方法和分析过程:

经过分析,该问题的原因是Automatic SQL Tuning Advisor Job在尝试调优一个较为复杂的SQL "6ru8vx9kjbv1k" 时,花了太多的时间在CPU上,并且它以S模式持有了
CUSTOMERUSER.CUSTOM_TABLE上的library cache lock,而另外一个收集统计信息的job需要以X模式来
获取CUSTOMERUSER.CUSTOM_TABLE上的library cache lock,S和X不兼容导致阻塞,直到收集统计信息的job超时 。

在此期间,所有的需要在CUSTOMERUSER.CUSTOM_TABLE的hard parse由于都需要以S模式申请表上的library cache lock 而被收集统计信息的那个job阻塞,因此您的数据库会出现大量的library cache lock而拖慢了应用。

3、解决思路:

解决办法是关闭Automatic SQL Tuning Advisor Job,这不会对您的数据库产生任何性能影响,因为 Automatic SQL Tuning Advisor Job只是给出优化建议,并没有执行任何实质性的操作,除非您接受优化建议。

4、解决方式:

根据上述二.2.(1)进行禁用,如:禁用所有的sql tuning advisor任务

BEGIN
 dbms_auto_task_admin.disable(
 client_name => 'sql tuning advisor',
 operation => NULL,
 window_name => NULL);
END;

如果要开启,则enable即可

BEGIN
 dbms_auto_task_admin.enable(
 client_name => 'sql tuning advisor',
 operation => NULL,
 window_name => NULL);
END;

                        
本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2023年9月9日

admin

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号