
Oracle 19C V$SCHEDULER_RUNNING_JOBS 动态性能视图详解
1. 视图概述与作用
V$SCHEDULER_RUNNING_JOBS 是 Oracle 19C 数据库中一个重要的动态性能视图,它显示当前正在运行的所有调度器作业(Scheduler Jobs)的实时信息。该视图提供了作业执行的运行时状态、资源消耗和进度等关键信息。
主要作用:
- 实时监控当前正在执行的调度器作业
- 诊断作业执行性能和资源消耗问题
- 识别长时间运行或挂起的作业
- 监控作业执行进度和状态变化
2. 使用场景与应用价值
使用场景:
- 实时作业监控:查看当前正在运行的作业及其状态
- 性能诊断:识别执行时间过长或消耗资源过多的作业
- 故障排查:检查作业是否挂起或遇到错误
- 资源管理:监控作业对系统资源的使用情况
- 作业依赖分析:了解作业执行的先后关系和依赖
应用价值:
- 提供作业执行的实时快照
- 帮助DBA及时发现和解决作业执行问题
- 为作业性能优化提供数据支持
- 辅助进行容量规划和资源分配
3. 字段详解与数据类型
以下是 V$SCHEDULER_RUNNING_JOBS 视图的字段详细说明:
| 字段名 | 数据类型 | 描述 |
|---|---|---|
| LOG_ID | NUMBER | 作业运行日志的唯一标识符 |
| JOB_NAME | VARCHAR2(128) | 正在运行的作业名称 |
| OWNER | VARCHAR2(128) | 作业所有者 |
| INSTANCE_ID | NUMBER | 运行作业的实例ID(RAC环境) |
| SESSION_ID | NUMBER | 执行作业的会话ID |
| SLAVE_PROCESS_ID | NUMBER | 从属进程ID(如果使用) |
| SLAVE_OS_PROCESS_ID | VARCHAR2(24) | 从属操作系统的进程ID |
| ELAPSED_TIME | INTERVAL DAY TO SECOND | 作业已运行的时间 |
| CPU_USED | INTERVAL DAY TO SECOND | 作业使用的CPU时间 |
| DESTINATION | VARCHAR2(128) | 作业运行的目标(RAC环境) |
| ERROR# | NUMBER | 错误代码(如果有错误) |
| CREDENTIAL_OWNER | VARCHAR2(128) | 凭证所有者 |
| CREDENTIAL_NAME | VARCHAR2(128) | 凭证名称 |
| DEGREE | NUMBER | 作业的并行度 |
| ADDITIONAL_INFO | VARCHAR2(4000) | 附加信息(通常为XML格式) |
| RUN_POSITION | NUMBER | 在作业链中的运行位置 |
| JOB_SUBNAME | VARCHAR2(128) | 作业子名称(对于分区作业) |
| JOB_DESTINATION | VARCHAR2(128) | 作业目标位置 |
| JOB_SCOPE | VARCHAR2(128) | 作业范围 |
| JOB_DESCRIPTION | VARCHAR2(128) | 作业描述 |
| CON_ID | NUMBER | 容器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 作业执行流程
- 作业触发:根据调度定义或手动触发,作业开始执行
- 进程创建:调度器创建作业进程(协调进程CJQ0和作业进程Jnnn)
- 状态跟踪:作业执行过程中,各种状态信息被记录到内存结构中
- 日志记录:作业开始、结束和重要事件被记录到作业日志中
- 资源监控:系统监控作业的资源使用情况并更新统计信息
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》
1710

被折叠的 条评论
为什么被折叠?



