Oracle数据库自己会例行做一些定时任务,比如会自动进行统计信息收集等作业任务。如果统计信息收集的时间正好赶上业务的高峰期,那就有可能由此引发一系列性能故障。

那么,我们该如何查看这些数据库自动去做的任务执行计划和执行情况呢?

1.计划窗口调整

首先,通过查询dba_scheduler_windows,可以看到有关窗口的定义详情。

SQL>

col window_name for a30

col REPEAT_INTERVAL for a60

set lines 180

select window_name,repeat_interval,duration,enabled from dba_scheduler_windows;

如果数据库是10g版本,结果如下:

SQL> select window_name,repeat_interval,duration,enabled from dba_scheduler_windows;

WINDOW_NAME                    REPEAT_INTERVAL                                              DURATION                                                                    ENABL
------------------------------ ------------------------------------------------------------ --------------------------------------------------------------------------- -----
WEEKNIGHT_WINDOW freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; b +000 08:00:00 TRUE
ysecond=0 WEEKEND_WINDOW freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0 +002 00:00:00 TRUE

如果数据库是11g和12c版本,则是类似这样的结果:

SQL> select window_name,repeat_interval,duration,enabled from dba_scheduler_windows;

WINDOW_NAME                    REPEAT_INTERVAL                                              DURATION                                                                    ENABL
------------------------------ ------------------------------------------------------------ --------------------------------------------------------------------------- -----
WEEKEND_WINDOW freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0 +002 00:00:00 FALSE
WEEKNIGHT_WINDOW freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; b +000 08:00:00 FALSE
ysecond=0 SUNDAY_WINDOW freq=daily;byday=SUN;byhour=6;byminute=0; bysecond=0 +000 20:00:00 TRUE
SATURDAY_WINDOW freq=daily;byday=SAT;byhour=6;byminute=0; bysecond=0 +000 20:00:00 TRUE
FRIDAY_WINDOW freq=daily;byday=FRI;byhour=22;byminute=0; bysecond=0 +000 04:00:00 TRUE
THURSDAY_WINDOW freq=daily;byday=THU;byhour=22;byminute=0; bysecond=0 +000 04:00:00 TRUE
WEDNESDAY_WINDOW freq=daily;byday=WED;byhour=22;byminute=0; bysecond=0 +000 04:00:00 TRUE
TUESDAY_WINDOW freq=daily;byday=TUE;byhour=22;byminute=0; bysecond=0 +000 04:00:00 TRUE
MONDAY_WINDOW freq=daily;byday=MON;byhour=22;byminute=0; bysecond=0 +000 04:00:00 TRUE

可以看到,在11g之后,oracle将之前只区分工作日和休息日的分类,细化到一周中的每一天。而且默认值的收集时间也比10g有大幅度的减少。

修改窗口启动时间和duration:

--修改窗口启动时间
EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('MONDAY_WINDOW','repeat_interval','freq=daily;byday=MON;byhour=22;byminute=0;bysecond=0');
EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('TUESDAY_WINDOW','repeat_interval','freq=daily;byday=TUE;byhour=22;byminute=0;bysecond=0');
EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('WEDNESDAY_WINDOW','repeat_interval','freq=daily;byday=WED;byhour=22;byminute=0;bysecond=0');
EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('THURSDAY_WINDOW','repeat_interval','freq=daily;byday=THU;byhour=22;byminute=0;bysecond=0');
EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('FRIDAY_WINDOW','repeat_interval','freq=daily;byday=FRI;byhour=22;byminute=0;bysecond=0'); EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('SATURDAY_WINDOW','repeat_interval','freq=daily;byday=SAT;byhour=6;byminute=0;bysecond=0');
EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('SUNDAY_WINDOW','repeat_interval','freq=daily;byday=SUN;byhour=6;byminute=0;bysecond=0'); --修改窗口duration
exec dbms_scheduler.set_attribute('MONDAY_WINDOW','duration',numtodsinterval(240,'minute'));
exec dbms_scheduler.set_attribute('TUESDAY_WINDOW','duration',numtodsinterval(240,'minute'));
exec dbms_scheduler.set_attribute('WEDNESDAY_WINDOW','duration',numtodsinterval(240,'minute'));
exec dbms_scheduler.set_attribute('THURSDAY_WINDOW','duration',numtodsinterval(240,'minute'));
exec dbms_scheduler.set_attribute('FRIDAY_WINDOW','duration',numtodsinterval(240,'minute')); exec dbms_scheduler.set_attribute('SATURDAY_WINDOW','duration',numtodsinterval(1200,'minute'));
exec dbms_scheduler.set_attribute('SUNDAY_WINDOW','duration',numtodsinterval(1200,'minute'));

以上实际都是Oracle默认的值(周一到周五每晚10点开始收集统计信息,duration是4h;周六周日早上6点开始收集统计信息,duration是20h),可以根据实际业务需求进行调整。

很多周六日业务量也很大的企业,一定要注意调整这个默认值。

2.自动任务调整

10g版本没有这些自动维护任务,以下都是以11g以上版本为例,主要介绍如何关闭/启用自动任务(默认是关闭的。)。

查询: select client_name,status from dba_autotask_client;

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

关闭自动维护任务:

--关闭sql tuning advisor,避免消耗过多的资源
BEGIN
DBMS_AUTO_TASK_ADMIN.disable(
client_name => 'sql tuning advisor',
operation => NULL,
window_name => NULL);
END;
/ --关闭auto space advisor,避免消耗过多的IO,还有避免出现这个任务引起的library cache lock
BEGIN
DBMS_AUTO_TASK_ADMIN.disable(
client_name => 'auto space advisor',
operation => NULL,
window_name => NULL);
END;
/ --光闭自动统计信息收集,(慎用,除非有其他手工收集统计信息的完整方案,否则不建议关闭)
BEGIN
DBMS_AUTO_TASK_ADMIN.disable(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => NULL);
END;
/

启动自动维护任务:

--启动sql tuning advisor
BEGIN
DBMS_AUTO_TASK_ADMIN.enable(
client_name => 'sql tuning advisor',
operation => NULL,
window_name => NULL);
END;
/ --启动auto space advisor
BEGIN
DBMS_AUTO_TASK_ADMIN.enable(
client_name => 'auto space advisor',
operation => NULL,
window_name => NULL);
END;
/ --启动自动统计信息收集
BEGIN
DBMS_AUTO_TASK_ADMIN.enable(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => NULL);
END;
/

3.任务执行情况

主要查询这个视图:dba_scheduler_job_run_details
SQL>
col job_name for a30
col ACTUAL_START_DATE for a40
col RUN_DURATION for a30
set lines 180 pages 100
--10g
select owner, job_name, status, ACTUAL_START_DATE, RUN_DURATION from dba_scheduler_job_run_details where job_name = 'GATHER_STATS_JOB' order by 4;

10g版本查询结果类似如下:

OWNER                          JOB_NAME                       STATUS                         ACTUAL_START_DATE                        RUN_DURATION
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- ------------------------------
SYS GATHER_STATS_JOB SUCCEEDED 31-OCT-17 10.00.02.512503 AM +08:00 +000 00:00:41
SYS GATHER_STATS_JOB SUCCEEDED 01-NOV-17 10.00.03.102893 AM +08:00 +000 00:00:53
SYS GATHER_STATS_JOB SUCCEEDED 02-NOV-17 10.00.02.822735 AM +08:00 +000 00:02:19
SYS GATHER_STATS_JOB SUCCEEDED 03-NOV-17 10.00.03.635398 AM +08:00 +000 00:00:54
SYS GATHER_STATS_JOB SUCCEEDED 04-NOV-17 10.00.04.819712 AM +08:00 +000 00:01:25
SYS GATHER_STATS_JOB SUCCEEDED 04-NOV-17 06.00.03.443851 PM +08:00 +000 00:00:16
SYS GATHER_STATS_JOB STOPPED 09-NOV-17 11.00.03.008706 AM +08:00 +005 01:30:12
SYS GATHER_STATS_JOB SUCCEEDED 15-NOV-17 11.00.01.423370 AM +08:00 +000 00:01:39
SYS GATHER_STATS_JOB SUCCEEDED 16-NOV-17 11.00.03.842124 AM +08:00 +000 00:00:43
SYS GATHER_STATS_JOB SUCCEEDED 17-NOV-17 11.00.01.535534 AM +08:00 +000 00:00:43
SYS GATHER_STATS_JOB SUCCEEDED 21-NOV-17 11.00.02.590796 AM +08:00 +000 00:01:04
SYS GATHER_STATS_JOB SUCCEEDED 24-NOV-17 11.00.02.291902 AM +08:00 +000 00:00:44
SYS GATHER_STATS_JOB SUCCEEDED 25-NOV-17 11.00.02.660842 AM +08:00 +000 00:01:04
SYS GATHER_STATS_JOB SUCCEEDED 25-NOV-17 07.00.02.587985 PM +08:00 +000 00:00:40
SYS GATHER_STATS_JOB SUCCEEDED 28-NOV-17 11.00.01.916662 AM +08:00 +000 00:01:08
SYS GATHER_STATS_JOB SUCCEEDED 29-NOV-17 11.00.03.060642 AM +08:00 +000 00:00:38
SYS GATHER_STATS_JOB SUCCEEDED 30-NOV-17 11.00.00.737144 AM +08:00 +000 00:01:45

--11g

select owner, job_name, status, ACTUAL_START_DATE, RUN_DURATION from dba_scheduler_job_run_details where job_name like 'ORA$AT_OS_OPT_S%' order by 4;

11g版本查询结果类似如下:

OWNER                          JOB_NAME                       STATUS                         ACTUAL_START_DATE                        RUN_DURATION
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- ------------------------------
SYS ORA$AT_OS_OPT_SY_3926 SUCCEEDED 22-NOV-17 10.00.02.384206 PM EST5EDT +000 00:01:41
SYS ORA$AT_OS_OPT_SY_3946 SUCCEEDED 23-NOV-17 10.00.02.078143 PM EST5EDT +000 00:01:54
SYS ORA$AT_OS_OPT_SY_3966 SUCCEEDED 24-NOV-17 10.00.02.684644 PM EST5EDT +000 00:02:03
SYS ORA$AT_OS_OPT_SY_3986 SUCCEEDED 25-NOV-17 06.00.02.592675 AM EST5EDT +000 00:01:54
SYS ORA$AT_OS_OPT_SY_4006 SUCCEEDED 25-NOV-17 10.02.37.976591 AM EST5EDT +000 00:00:39
SYS ORA$AT_OS_OPT_SY_4026 SUCCEEDED 25-NOV-17 02.02.55.191309 PM EST5EDT +000 00:00:36
SYS ORA$AT_OS_OPT_SY_4046 SUCCEEDED 25-NOV-17 06.03.08.913991 PM EST5EDT +000 00:00:36
SYS ORA$AT_OS_OPT_SY_4066 SUCCEEDED 25-NOV-17 10.03.22.624319 PM EST5EDT +000 00:01:12
SYS ORA$AT_OS_OPT_SY_4086 SUCCEEDED 26-NOV-17 06.00.08.274082 AM EST5EDT +000 00:01:14
SYS ORA$AT_OS_OPT_SY_4106 SUCCEEDED 26-NOV-17 10.04.06.172856 AM EST5EDT +000 00:00:46
SYS ORA$AT_OS_OPT_SY_4126 SUCCEEDED 26-NOV-17 02.04.23.754379 PM EST5EDT +000 00:01:04
SYS ORA$AT_OS_OPT_SY_4146 SUCCEEDED 26-NOV-17 06.04.40.989803 PM EST5EDT +000 00:00:54
SYS ORA$AT_OS_OPT_SY_4166 SUCCEEDED 26-NOV-17 10.04.55.633700 PM EST5EDT +000 00:00:56
SYS ORA$AT_OS_OPT_SY_4186 SUCCEEDED 27-NOV-17 10.00.08.203510 PM EST5EDT +000 00:02:25
SYS ORA$AT_OS_OPT_SY_4206 SUCCEEDED 28-NOV-17 10.00.01.365122 PM EST5EDT +000 00:02:16
SYS ORA$AT_OS_OPT_SY_4226 SUCCEEDED 29-NOV-17 11.05.57.084541 PM EST5EDT +000 00:01:58

可以看到,以统计信息收集的JOB_NAME为例,11g版本之后不再是固定的一个名字,而是以ORA$AT_OS_OPT_SY开头的命名。

Oracle的窗口和自动任务的更多相关文章

  1. oracle 11g中的自动维护任务管理

    因为人员紧缺,最近又忙着去搞性能优化的事情,有时候真的是不想再搞这个事情,只是没办法,我当前的绩效几乎取决于这个项目的最终成绩,所以不管是人的事还是事的事,都得去让他顺利推进. 前段时间发生还有几台服 ...

  2. Oracle中用触发器实现自动记录表数据被修改的历史信息

    oracle中用触发器实现自动记录表数据被修改的历史信息. 有一些比较重要的表字段每次修改需要做历史记录,以后可以查询这个表中某些字段如何被修改过.由什么改成了什么等,由谁操作,操作时间等. 实例:1 ...

  3. ASPX 关闭子窗口后自动更新父窗口

    Response.Write("<script language:javascript>javascript:window.close();</script>&quo ...

  4. Oracle DB 使用调度程序自动执行任务

    • 使用调度程序来简化管理任务 • 创建作业.程序和调度 • 监视作业执行 • 使用基于时间或基于事件的调度来执行调度程序作业 • 描述窗口.窗口组.作业类和使用者组的用途 • 使用电子邮件通知 • ...

  5. oracle数据本机自动备份

    1.创建三个文件 exp.list  内容:oracle数据库的用户名和密码 name pwd exp.log   主要用于存储在自动备份数据库时的日志信息 exp.sh #!/bin/sh #找到数 ...

  6. 转: Oracle AWR 报告 每天自动生成并发送邮箱

    原贴地址:http://www.cnblogs.com/vigarbuaa/archive/2012/09/05/2671794.html Oracle AWR 介绍http://blog.csdn. ...

  7. oracle分区表按时间自动创建

    表分区是一种思想,分区表示一种技术实现.当表的大小过G的时候可以考虑进行表分区,提高查询效率,均衡IO.oracle分区表是oracle数据库提供的一种表分区的实现形式.表进行分区后,逻辑上仍然是一张 ...

  8. Qt窗口及控件-窗口Close()自动释放

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt-窗口Close()后自动释放空间     本文地址:http://techieliang ...

  9. Oracle或PL/SQL自动断开连接解决参考

    ORACLE自动断开数据库连接解决办法       方法一.直接修改资源配置文件     分三个步骤在sqlplus环境下完成.     第一步,查询资源文件,找到CONNECT_TIME所在的pro ...

随机推荐

  1. win10 uwp 改变鼠标

    经常在应用需要修改光标,显示点击.显示输入,但是有些元素不是系统的,那么如何设置鼠标? 本文主要:UWP 设置光标,UWP 移动鼠标 设置光标 需要写一点代码来让程序比较容易看到,什么光标对于什么. ...

  2. 数据结构与算法--从平衡二叉树(AVL)到红黑树

    数据结构与算法--从平衡二叉树(AVL)到红黑树 上节学习了二叉查找树.算法的性能取决于树的形状,而树的形状取决于插入键的顺序.在最好的情况下,n个结点的树是完全平衡的,如下图"最好情况&q ...

  3. HTML5之window.applicationCache对象

    不知道离线缓存技术的可以参照上一篇文章: HTML5之appcache语法理解/HTML5应用程序缓存/manifest缓存文件官方用法翻译 参考文章 window.applicationCache  ...

  4. UVa1630,Folding

    区间dp,记忆化搜就可以 st为原串 dp[p][q]存st[p]~st[q]的最优长度,f[p][q]存对应的最优串 从(0,len-1)开始搜,f[0][len-1]为所求ans,回溯条件为p== ...

  5. 企业微信开发之向员工付款(C#)

    一.企业微信API 地址:http://work.weixin.qq.com/api/doc#11545 二.参数说明 1.向员工付款 请求方式:POST(HTTPS)请求地址:https://api ...

  6. [Python] 文科生零基础学编程系列三——数据运算符的基本类别

    上一篇:[Python] 文科生零基础学编程系列二--数据类型.变量.常量的基础概念 下一篇: ※ 程序的执行过程,就是对数据进行运算的过程. 不同的数据类型,可以进行不同的运算, 按照数据运算类型的 ...

  7. 【ASP.NET MVC 学习笔记】- 08 URL Routing

    本文参考:http://www.cnblogs.com/willick/p/3343105.html 1.URL Routing告诉MVC如何正确的定位Controller和Action. 2.URL ...

  8. Azure环境中Nginx高可用性和部署架构设计

    前几篇文章介绍了Nginx的应用.动态路由.配置.在实际生产环境部署时,我们需要同时考虑Nginx的高可用性和部署架构. Nginx自身不支持集群以保证自身的高可用性,商业版本的Nginx+推荐: T ...

  9. [Bayes] Variational Inference for Bayesian GMMs

    为了世界和平,为了心知肚明,决定手算一次 Variational Inference for Bayesian GMMs 目的就是达到如下的智能效果,扔进去六个高斯,最后拟合结果成了两个高斯,当然,其 ...

  10. Mr. Frog’s Game

    Mr. Frog’s Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...