当前位置: 首页 > news >正文

DBMS_SCHEDULER修改资源调度总结

DBMS_SCHEDULER修改资源调度总结:
相关的视图:

 select CLIENT_NAME,STATUS from DBA_AUTOTASK_CLIENT;
DBA_AUTOTASK_WINDOW_CLIENTS:显示MAINTENANCE_WINDOW_GROUP时间窗口的相关信息各个作业的状态。
dba_scheduler_windows:显示数据库中所有scheduler的作业窗口
dba_scheduler_wingroup_members:显示数据库中scheduler window group的所有member
dba_scheduler_groups


默认情况下:每天(周一到周五)晚上10点开始,持续4小时。周六(日)早上6点开始,持续20小时。
SQL> set lines 200 pages 1000
SQL> col window_name for a30
SQL> col window_next_time for a45
SQL> col optimizer_stats for a15
SQL> col segment_advisor for a15
SQL> col sql_tune_advisor for a15
SQL> select window_name,window_next_time,optimizer_stats,segment_advisor,sql_tune_advisor from DBA_AUTOTASK_WINDOW_CLIENTS;

 WINDOW_NAME               WINDOW_NEXT_TIME                       OPTIMIZER_STATS SEGMENT_ADVISOR           SQL_TUNE_ADVISO
 ------------------------------   ---------------------------------------------   ---------------               ---------------                         ---------------
 MONDAY_WINDOW        01-JAN-18 10.00.00.000000 PM PRC   ENABLED                 ENABLED                            ENABLED
 TUESDAY_WINDOW       02-JAN-18 10.00.00.000000 PM PRC   ENABLED                 ENABLED                            ENABLED
 WEDNESDAY_WINDOW 03-JAN-18 10.00.00.000000 PM PRC   ENABLED                  ENABLED                           ENABLED
 THURSDAY_WINDOW    28-DEC-17 10.00.00.000000 PM PRC   ENABLED                 ENABLED                           ENABLED
 FRIDAY_WINDOW          29-DEC-17 10.00.00.000000 PM PRC   ENABLED                 ENABLED                           ENABLED
 SATURDAY_WINDOW    30-DEC-17 06.00.00.000000 AM PRC   ENABLED                 ENABLED                           ENABLED
 SUNDAY_WINDOW         31-DEC-17 06.00.00.000000 AM PRC   ENABLED                 ENABLED                           ENABLED

 7 rows selected.

 SQL>

查看自动作业的详细情况
SQL> set lines 200 pages 1000
SQL> col comments for a40
SQL> col window_name for a20
SQL> col next_date for a20
SQL> col repeat_interval for a60
SQL> col duration for a15
SQL> SELECT t3.comments,to_char(t1.next_start_date,'yyyy-mm-dd hh24') next_date,t1.window_name, t1.repeat_interval, t1.duration
2 FROM dba_scheduler_windows t1, dba_scheduler_wingroup_members t2,dba_scheduler_groups t3
3 WHERE t1.window_name = t2.window_name
4 and t2.WINDOW_GROUP_NAME=t3.GROUP_NAME
5 and t3.comments in ('auto optimizer stats collection','auto space advisor','sql tuning advisor') order by 1,2;

COMMENTS                                 NEXT_DATE     WINDOW_NAME          REPEAT_INTERVAL                                                                 DURATION
----------------------------------------  -------------------- --------------------            ------------------------------------------------------------                     ---------------
auto optimizer stats collection      2017-12-28 22 THURSDAY_WINDOW   freq=daily;byday=THU;byhour=22;byminute=0; bysecond=0   +000 04:00:00
auto optimizer stats collection      2017-12-29 22 FRIDAY_WINDOW         freq=daily;byday=FRI;byhour=22;byminute=0; bysecond=0    +000 04:00:00
auto optimizer stats collection      2017-12-30 06 SATURDAY_WINDOW   freq=daily;byday=SAT;byhour=6;byminute=0; bysecond=0     +000 20:00:00
auto optimizer stats collection      2017-12-31 06 SUNDAY_WINDOW        freq=daily;byday=SUN;byhour=6;byminute=0; bysecond=0     +000 20:00:00
auto optimizer stats collection      2018-01-01 22 MONDAY_WINDOW       freq=daily;byday=MON;byhour=22;byminute=0; bysecond=0  +000 04:00:00
auto optimizer stats collection      2018-01-02 22 TUESDAY_WINDOW      freq=daily;byday=TUE;byhour=22;byminute=0; bysecond=0   +000 04:00:00
auto optimizer stats collection      2018-01-03 22 WEDNESDAY_WINDOW freq=daily;byday=WED;byhour=22;byminute=0; bysecond=0 +000 04:00:00
auto space advisor                      2017-12-28 22 THURSDAY_WINDOW    freq=daily;byday=THU;byhour=22;byminute=0; bysecond=0   +000 04:00:00
auto space advisor                      2017-12-29 22 FRIDAY_WINDOW          freq=daily;byday=FRI;byhour=22;byminute=0; bysecond=0    +000 04:00:00
auto space advisor                      2017-12-30 06 SATURDAY_WINDOW     freq=daily;byday=SAT;byhour=6;byminute=0; bysecond=0    +000 20:00:00
auto space advisor                      2017-12-31 06 SUNDAY_WINDOW          freq=daily;byday=SUN;byhour=6;byminute=0; bysecond=0    +000 20:00:00
auto space advisor                      2018-01-01 22 MONDAY_WINDOW         freq=daily;byday=MON;byhour=22;byminute=0; bysecond=0 +000 04:00:00
auto space advisor                      2018-01-02 22 TUESDAY_WINDOW        freq=daily;byday=TUE;byhour=22;byminute=0; bysecond=0  +000 04:00:00
auto space advisor                      2018-01-03 22 WEDNESDAY_WINDOW  freq=daily;byday=WED;byhour=22;byminute=0; bysecond=0 +000 04:00:00
sql tuning advisor                        2017-12-28 22 THURSDAY_WINDOW     freq=daily;byday=THU;byhour=22;byminute=0; bysecond=0   +000 04:00:00
sql tuning advisor                        2017-12-29 22 FRIDAY_WINDOW           freq=daily;byday=FRI;byhour=22;byminute=0; bysecond=0     +000 04:00:00
sql tuning advisor                        2017-12-30 06 SATURDAY_WINDOW      freq=daily;byday=SAT;byhour=6;byminute=0; bysecond=0     +000 20:00:00
sql tuning advisor                        2017-12-31 06 SUNDAY_WINDOW          freq=daily;byday=SUN;byhour=6;byminute=0; bysecond=0      +000 20:00:00
sql tuning advisor                        2018-01-01 22 MONDAY_WINDOW         freq=daily;byday=MON;byhour=22;byminute=0; bysecond=0   +000 04:00:00
sql tuning advisor                        2018-01-02 22 TUESDAY_WINDOW        freq=daily;byday=TUE;byhour=22;byminute=0; bysecond=0    +000 04:00:00
sql tuning advisor                        2018-01-03 22 WEDNESDAY_WINDOW  freq=daily;byday=WED;byhour=22;byminute=0; bysecond=0    +000 04:00:00

21 rows selected.

SQL>

 

例子:
开发写的sp中,有时存在ddl语句(例如:EXECUTE IMMEDIATE 'TRUNCATE TABLE test'; test正好是实体表)。在执行sp的时候,可能存在下列的报错ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired 。经过排查,是由于统计信息收集的作业时,影响了sp的正常执行。
下面提供两种解决方法:
方法一:修改统计信息的收集时间段。
方法二:将涉及的表统计信息,进行lock处理。系统在收集统计信息的时候,会跳过该表

方法一例子:将周六的从早上6点开始的统计信息作业,修改到中午12点开始执行,持续时间修改为12个小时。
可以修改原作业的窗口属性。DBMS_SCHEDULER.SET_ATTRIBUTE修改。也可以新建时间窗口。这里我采用新建时间窗口实现
1.禁用周六的统计信息收集作业
BEGIN
dbms_auto_task_admin.disable(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => 'SATURDAY_WINDOW');
END;
/

SQL> select window_name,window_next_time,optimizer_stats,segment_advisor,sql_tune_advisor from DBA_AUTOTASK_WINDOW_CLIENTS;

WINDOW_NAME             WINDOW_NEXT_TIME    OPTIMIZER_STATS SEGMENT_ADVISOR SQL_TUNE_ADVISO
------------------------------ --------------------------------------------- --------------- --------------- ---------------
MONDAY_WINDOW        01-JAN-18 10.00.00.000000 PM PRC ENABLED ENABLED ENABLED
TUESDAY_WINDOW       02-JAN-18 10.00.00.000000 PM PRC ENABLED ENABLED ENABLED
WEDNESDAY_WINDOW 03-JAN-18 10.00.00.000000 PM PRC ENABLED ENABLED ENABLED
THURSDAY_WINDOW    28-DEC-17 10.00.00.000000 PM PRC ENABLED ENABLED ENABLED
FRIDAY_WINDOW          29-DEC-17 10.00.00.000000 PM PRC ENABLED ENABLED ENABLED
SATURDAY_WINDOW    30-DEC-17 06.00.00.000000 AM PRC DISABLED ENABLED ENABLED ---周六收集统计信息的窗口已禁用
SUNDAY_WINDOW         31-DEC-17 06.00.00.000000 AM PRC ENABLED ENABLED ENABLED

7 rows selected.

SQL>
2.新建时间窗口
新建一个周六时间窗口
BEGIN
dbms_scheduler.create_window(
window_name=>'SATURDAY_WINDOW_USER',
resource_plan=>'DEFAULT_MAINTENANCE_PLAN',
repeat_interval=>'freq=daily;byday=SAT;byhour=12;byminute=0;bysecond=0', ---从12点开始
duration=>interval '12' hour, ----持续时间12小时
comments=>'Saturday window tasks by user'); ---comments注释
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
/

SQL> select window_name,repeat_interval,duration from SYS.DBA_SCHEDULER_WINDOWS t where window_name='SATURDAY_WINDOW_USER';

WINDOW_NAME REPEAT_INTERVAL DURATION
------------------------- ------------------------------------------------------------ -------------------------
SATURDAY_WINDOW_USER freq=daily;byday=SAT;byhour=12;byminute=0;bysecond=0 +000 12:00:00

SQL>
3.将新建的窗口时间加入到window group
BEGIN
dbms_scheduler.add_group_member('MAINTENANCE_WINDOW_GROUP','SATURDAY_WINDOW_USER');
END;
/

4.启动新的时间窗口
BEGIN
dbms_auto_task_admin.enable(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => 'SATURDAY_WINDOW_USER');
END;
/

SQL> select window_name,window_next_time,optimizer_stats,segment_advisor,sql_tune_advisor from DBA_AUTOTASK_WINDOW_CLIENTS;

WINDOW_NAME                     WINDOW_NEXT_TIME OPTIMIZER_STATS SEGMENT_ADVISOR SQL_TUNE_ADVISO
-------------------------                --------------------------------------------- --------------- --------------- ---------------
MONDAY_WINDOW                01-JAN-18 10.00.00.000000 PM PRC ENABLED ENABLED ENABLED
TUESDAY_WINDOW               02-JAN-18 10.00.00.000000 PM PRC ENABLED ENABLED ENABLED
WEDNESDAY_WINDOW         03-JAN-18 10.00.00.000000 PM PRC ENABLED ENABLED ENABLED
THURSDAY_WINDOW            28-DEC-17 10.00.00.000000 PM PRC ENABLED ENABLED ENABLED
FRIDAY_WINDOW                  29-DEC-17 10.00.00.000000 PM PRC ENABLED ENABLED ENABLED
SATURDAY_WINDOW            30-DEC-17 06.00.00.000000 AM PRC DISABLED ENABLED ENABLED
SUNDAY_WINDOW                 31-DEC-17 06.00.00.000000 AM PRC ENABLED ENABLED ENABLED
SATURDAY_WINDOW_USER 30-DEC-17 12.00.00.000000 PM PRC ENABLED DISABLED DISABLED <<<=======新添加的时间窗口

8 rows selected.

SQL>

方法二:
1.首先确定表的统计信息(dbms_stats.set_table_stats+DBMS_STATS.SET_COLUMN_STATS),然后设置表的统计信息(后面可以根据执行计划设置比较靠谱的统计信息)。比如表大概多少行
SQL> execute dbms_stats.set_table_stats( ownname => 'ERWA',tabname =>'EMP',numrows => 5000,numblks => 7,avgrlen => 100);
PL/SQL procedure successfully completed
SQL>
2.将表的统计信息lock住
SQL> execute DBMS_STATS.LOCK_TABLE_STATS('ERWA','EMP')
PL/SQL procedure successfully completed
SQL>


参考资料;

FAQ: Automatic Statistics Collection (文档 ID 1233203.1)
How to Create an Own Maintenance Window for Autotask Jobs in 11g (文档 ID 1300313.1)

 

转载于:https://www.cnblogs.com/erwadba/p/8134334.html

相关文章:

  • mysql5.6整表数据删除binlong恢复
  • 装饰器函数
  • 传奇物品叠加设置方法
  • 使用selenium抓取淘宝的商品信息
  • JAVA-初步认识-常用对象API(集合框架-概述)
  • 九:动态规划-最大的算式
  • ssl1104-USACO 2.1城堡(foodfill)【图论,广搜】
  • C#多线程技术提高RabbitMQ消费吞吐率
  • 2017年总结的前端文章——border属性的多方位应用和实现自适应三角形
  • django之中间件
  • 推荐系统的基本概念及其在各个领域的应用
  • Linux 计划任务
  • 分布式系统事务一致性解决方案
  • Linux如何让进程在后台运行的三种方法详解
  • C#启动或停止 计算机中“服务”
  • Java超时控制的实现
  • Java精华积累:初学者都应该搞懂的问题
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Rancher-k8s加速安装文档
  • vue-router的history模式发布配置
  • XForms - 更强大的Form
  • 基于webpack 的 vue 多页架构
  • 计算机常识 - 收藏集 - 掘金
  • 那些被忽略的 JavaScript 数组方法细节
  • 如何优雅地使用 Sublime Text
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 微服务入门【系列视频课程】
  • 我建了一个叫Hello World的项目
  • 优化 Vue 项目编译文件大小
  • ionic异常记录
  • Semaphore
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #图像处理
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $.ajax,axios,fetch三种ajax请求的区别
  • ()、[]、{}、(())、[[]]命令替换
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (done) 两个矩阵 “相似” 是什么意思?
  • (二十三)Flask之高频面试点
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)计算机毕业设计ssm电影分享网站
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (四)鸿鹄云架构一服务注册中心
  • (转)Sql Server 保留几位小数的两种做法
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .Net程序帮助文档制作
  • .NET分布式缓存Memcached从入门到实战
  • .NET构架之我见