面试宝典:介绍下Oracle数据库动态性能视图 V$SCHEDULER_RUNNING_JOBS

在这里插入图片描述

Oracle 19C V$SCHEDULER_RUNNING_JOBS 动态性能视图详解

1. 视图概述与作用

V$SCHEDULER_RUNNING_JOBS 是 Oracle 19C 数据库中一个重要的动态性能视图,它显示当前正在运行的所有调度器作业(Scheduler Jobs)的实时信息。该视图提供了作业执行的运行时状态、资源消耗和进度等关键信息。

主要作用:

  • 实时监控当前正在执行的调度器作业
  • 诊断作业执行性能和资源消耗问题
  • 识别长时间运行或挂起的作业
  • 监控作业执行进度和状态变化

2. 使用场景与应用价值

使用场景:

  1. 实时作业监控:查看当前正在运行的作业及其状态
  2. 性能诊断:识别执行时间过长或消耗资源过多的作业
  3. 故障排查:检查作业是否挂起或遇到错误
  4. 资源管理:监控作业对系统资源的使用情况
  5. 作业依赖分析:了解作业执行的先后关系和依赖

应用价值:

  • 提供作业执行的实时快照
  • 帮助DBA及时发现和解决作业执行问题
  • 为作业性能优化提供数据支持
  • 辅助进行容量规划和资源分配

3. 字段详解与数据类型

以下是 V$SCHEDULER_RUNNING_JOBS 视图的字段详细说明:

字段名数据类型描述
LOG_IDNUMBER作业运行日志的唯一标识符
JOB_NAMEVARCHAR2(128)正在运行的作业名称
OWNERVARCHAR2(128)作业所有者
INSTANCE_IDNUMBER运行作业的实例ID(RAC环境)
SESSION_IDNUMBER执行作业的会话ID
SLAVE_PROCESS_IDNUMBER从属进程ID(如果使用)
SLAVE_OS_PROCESS_IDVARCHAR2(24)从属操作系统的进程ID
ELAPSED_TIMEINTERVAL DAY TO SECOND作业已运行的时间
CPU_USEDINTERVAL DAY TO SECOND作业使用的CPU时间
DESTINATIONVARCHAR2(128)作业运行的目标(RAC环境)
ERROR#NUMBER错误代码(如果有错误)
CREDENTIAL_OWNERVARCHAR2(128)凭证所有者
CREDENTIAL_NAMEVARCHAR2(128)凭证名称
DEGREENUMBER作业的并行度
ADDITIONAL_INFOVARCHAR2(4000)附加信息(通常为XML格式)
RUN_POSITIONNUMBER在作业链中的运行位置
JOB_SUBNAMEVARCHAR2(128)作业子名称(对于分区作业)
JOB_DESTINATIONVARCHAR2(128)作业目标位置
JOB_SCOPEVARCHAR2(128)作业范围
JOB_DESCRIPTIONVARCHAR2(128)作业描述
CON_IDNUMBER容器ID(多租户环境)

4. 相关视图与基表

相关动态性能视图:

  • GV$SCHEDULER_RUNNING_JOBS:在RAC环境中的全局视图,显示所有实例上的运行作业
  • V$SCHEDULER_JOB_LOG:显示调度器作业的日志信息
  • V$SCHEDULER_JOB_RUN_DETAILS:显示作业运行的详细信息

数据字典视图:

  • DBA_SCHEDULER_JOBS:显示所有调度器作业的定义信息
  • DBA_SCHEDULER_RUNNING_JOBS:显示所有正在运行的作业信息
  • DBA_SCHEDULER_JOB_LOG:显示作业日志历史
  • DBA_SCHEDULER_JOB_RUN_DETAILS:显示作业运行的详细历史

基表信息:

V$SCHEDULER_RUNNING_JOBS 的数据主要来自SGA中的内存结构。相关的数据字典基表包括:

  • SCHEDULER$_JOB:存储作业定义的基表
  • SCHEDULER$_JOB_LOG:存储作业日志的基表
  • SCHEDULER$_JOB_RUN_DETAILS:存储作业运行详情的基表

5. 底层原理与工作机制

5.1 作业执行流程

  1. 作业触发:根据调度定义或手动触发,作业开始执行
  2. 进程创建:调度器创建作业进程(协调进程CJQ0和作业进程Jnnn)
  3. 状态跟踪:作业执行过程中,各种状态信息被记录到内存结构中
  4. 日志记录:作业开始、结束和重要事件被记录到作业日志中
  5. 资源监控:系统监控作业的资源使用情况并更新统计信息

5.2 内存管理

作业运行时信息存储在SGA的共享池中:

  • 作业状态信息保存在内存结构中
  • 资源使用统计实时更新
  • 作业完成或取消后,相关信息从内存中移除

5.3 协调进程机制

  • CJQ0:作业协调进程,负责管理和调度作业执行
  • Jnnn:作业从属进程,实际执行作业任务
  • 协调进程监控从属进程的状态并更新运行信息

6. 多租户环境中的考虑

在CDB环境中,V$SCHEDULER_RUNNING_JOBS 视图包含 CON_ID 字段,表示作业所属的容器ID:

  • CON_ID = 0:表示根容器(CDB$ROOT)
  • CON_ID > 0:表示可插拔数据库(PDB)
  • 可以连接 V$CONTAINERS 视图获取容器详细信息

7. 常用查询SQL示例

7.1 查看当前所有运行中的作业

SELECT job_name, owner, elapsed_time, cpu_used, session_id
FROM V$SCHEDULER_RUNNING_JOBS
ORDER BY elapsed_time DESC;

7.2 监控长时间运行的作业

SELECT job_name, owner, 
       EXTRACT(SECOND FROM elapsed_time) + 
       EXTRACT(MINUTE FROM elapsed_time) * 60 +
       EXTRACT(HOUR FROM elapsed_time) * 3600 as total_seconds,
       session_id, slave_os_process_id
FROM V$SCHEDULER_RUNNING_JOBS
WHERE EXTRACT(HOUR FROM elapsed_time) > 1
ORDER BY total_seconds DESC;

7.3 检查作业执行的错误信息

SELECT job_name, owner, error#, additional_info
FROM V$SCHEDULER_RUNNING_JOBS
WHERE error# IS NOT NULL;

7.4 分析作业资源消耗

SELECT job_name, owner,
       EXTRACT(SECOND FROM cpu_used) as cpu_seconds,
       EXTRACT(SECOND FROM elapsed_time) as elapsed_seconds,
       ROUND(EXTRACT(SECOND FROM cpu_used) / 
             NULLIF(EXTRACT(SECOND FROM elapsed_time), 0) * 100, 2) as cpu_percent
FROM V$SCHEDULER_RUNNING_JOBS
ORDER BY cpu_seconds DESC;

7.5 关联会话视图获取更多信息

SELECT r.job_name, r.owner, r.elapsed_time, r.cpu_used,
       s.username, s.status, s.sql_id, s.event
FROM V$SCHEDULER_RUNNING_JOBS r
JOIN V$SESSION s ON r.session_id = s.sid
WHERE r.session_id IS NOT NULL;

7.6 在多租户环境中查看作业信息

SELECT r.job_name, r.owner, c.name as pdb_name, r.elapsed_time
FROM V$SCHEDULER_RUNNING_JOBS r
JOIN V$CONTAINERS c ON r.con_id = c.con_id
ORDER BY r.elapsed_time DESC;

8. 实践建议与最佳实践

8.1 监控策略

  • 定期检查长时间运行的作业
  • 设置警报监控异常作业状态
  • 跟踪作业资源消耗趋势

8.2 性能优化建议

  • 对于长时间运行的作业,考虑优化作业逻辑或增加检查点
  • 监控CPU使用率高的作业,考虑调整执行时间或资源限制
  • 使用并行执行提高大作业的执行效率

8.3 故障处理提示

  • 检查ERROR#字段识别作业错误
  • 使用ADDITIONAL_INFO字段获取详细错误信息
  • 关联V$SESSION视图分析会话级别问题

8.4 安全考虑

  • 定期审查作业权限和凭证使用
  • 监控使用凭证的作业执行情况
  • 确保作业不会过度消耗系统资源

9. 总结

V$SCHEDULER_RUNNING_JOBS 视图是Oracle数据库调度器监控的重要工具,提供了作业执行的实时状态信息。通过合理利用这些信息,DBA可以:

  • 实时监控作业执行状态
  • 及时发现和解决作业执行问题
  • 优化作业性能和资源使用
  • 提高作业调度系统的可靠性和效率

该视图特别适用于需要实时监控作业执行状态的场景,是Oracle数据库调度器管理的重要组成部分。结合其他调度器相关视图,可以构建完整的作业监控和管理体系。

欢迎关注我的公众号《IT小Chen

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值