41、自动化作业、Resource Manager(JOB、并行度)
自动化作业 job
主要体现下面两点:
1、做什么 program
1、可以是现写的一个PL/SQL语句块
2、提前编译好的存储过程
3、操作系统层面的shell脚本,或者程序
2、什么时候做 schedule
周期性的执行(每周三,晚上十点)
自动化作业就是job,有两个东西组成:
1、program
2、schedule
操作示例
使用 PLSQL_BLOCK 创建一个 program(收集用户 U1 的统计信息)
Sever --》 Programs --》Create
定义一个 schedule(每周六晚上十点执行)
Sever --》 Schedules --》Create
建立一个 job(Sever --》 Jobs --》Create)
查询 JOB 的相关信息
select * from DBA_JOBS
select * from DBA_JOBS_RUNNING
select * from DBA_SCHEDULER_JOBS
select * from DBA_SCHEDULER_JOB_LOG
select * from DBA_SCHEDULER_JOB_RUN_DETAILS
select * from DBA_SCHEDULER_RUNNING_JOBS
Job 的资源控制:将 Job 放入一个作业类(job class),该作业类属于一个资源用户组
自动化作业
11g 数据库建立以后,会自动建立一些自动化作业
1、收集统计信息
2、对段进行信息收集
3、自动优化 SQL
Sever --》 Automated Maintenance Tasks
通过 SQL 查看自动作业
select * from DBA_AUTOTASK_JOB_HISTORY
select * from DBA_AUTOTASK_WINDOW_HISTORY
select * from DBA_AUTOTASK_SCHEDULE
resource manager资源控制
控制粒度
1、用户
2、会话
数据库有这么一种情况:一个sql执行,消耗了大量的IO,导致整个数据库变得很慢,甚至于无法工作,而且这种情况会经常出现
可以使用resource manager将这个sql取消掉或者去除掉什么的
建立两个组(rm1,rm2)
- Round Robin:轮询。获得 CPU 以后,组中的成员依次使用
- Round to Completion:等待完成。获得 CPU 以后,第一个成员使用完成以后,第二个成员才能使用
建立两个用户(urm1,urm2)
Sever --》Security --》Users
将用户添加到组中
在操作的时候,选中用户后点击apply
应用一下
设置用户的默认组
urm1 用户的默认组是 rm1,urm2 用户的默认组是 rm2
选择默认组之后,点击apply
应用一下
定义一个 plan
RM1、RM2 组中的用户登录数据库时,同时工作的时候按照 7:3 的比例获得资源
如果 RM1 组中的用户登录数据库后不工作,RM2 可以获得 100% 的 CPU。如果 RM1、RM2 组中的用户不登录数据库或登录后不工作,则其他组的成员可以获得 100% 的 CPU
Max Utilization Limit
的含义:只能使用可以获得的资源的 50%
并行度
最大并行度:RM1 组中的成员执行 SQL语句的并行度 <=4;调整是为了避免过度使用并行
最大并行服务器目标百分比:parallel_servers_target
值的 60%
并行队列超时:如果指定了超时时间,超过之后会出现报错,不再执行 SQL
也就是说,RM1 组中的成员连接数据库,SQL 的并行度都 <=4,当总的并行度超过 parallel_servers_target
*60% 时,就需要去排队
parallel_servers_target
指的是最大并行服务进程
- 如果并行要生效的话,需要修改一个参数
alter system set parallel_degree_policy='AUTO';
最大活跃会话数:RM1 组中最多有 10个会话可以执行 SQL,其他的会话需要去排队
active
是指会话当前正在执行 SQL,可以通过 v$session
的 STATUS 列查看会话的状态
这样调整的话有风险,有可能会出现一个会话挂着,因为它无法获得 active session
,所以一般不调整
执行时间限制、I/O 限制(MB)、I/O 请求限制(请求数)
Action:超过其中任何一个限制所采取的操作(取消执行、切换到其他的用户组、杀掉会话)
是否在调用后还原:RM1 执行 SQL的时间超过 10秒,会切换到 RM2 执行,执行完成后会再切换回 RM1
是否预估:在执行 SQL 之前先预估一下,如果超过限制,直接不执行该 SQL;一般不使用预估
最大空闲时间:一个会话登录数据库后,1000s 内不执行 SQL,就 kill 掉会话
阻塞其他会话的最大空闲时间:一个会话登录数据库后,执行 SQL 后不提交、不回滚、也不执行其它 SQL,阻塞了其它会话,即空闲又阻塞其它会话,10s 后就 kill 掉会话
查看 plan 是否生效
查看参数resource_manager_plan
的值
使用 urm1 登录数据库,然后使用 sys 用户查询 select RESOURCE_CONSUMER_GROUP from v$session where username='URM1';
,可以发现RESOURCE_CONSUMER_GROUP 的值是 RM1
将 dba 角色授予 urm1、urm2
urm1 登录数据库
create table t1 as select * from dba_tables;
select /*+parallel(a 10)*/ count(*) from t1 a,t1 b; // 以并行度 10 执行 SQL
Sever --》Resource Manager --》Statistics 查看
操作系统层面使用 ps -ef|grep ora_p
,ora_pXXX 的就是并行进程
查看并行查询(parallel queries)的相关信息
select * from v$pq_sesstat;
select * from v$pq_tqstat;
窗口(windows)
使用场景
有两个资源计划(plan1、plan2),8:00 -- 18:00 让 plan1 生效,18:00 -- 到次日 8:00 让 plan2 生效
可以定义两个窗口:将 plan1、plan2 分别和一个窗口关联
创建窗口:窗口有开始时间和持续时间
还可以定义窗口组(Window Groups):将多个窗口添加到窗口组中