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

在这里插入图片描述

🧠 Oracle 19C V$SHARED_SERVER_MONITOR 视图详解

1. 视图概述与作用

VSHAREDSERVERMONITOR∗∗是Oracle数据库中专门用于∗∗监控共享服务器(SharedServer)整体运行状况和性能指标∗∗的动态性能视图。与‘VSHARED_SERVER_MONITOR** 是 Oracle 数据库中专门用于**监控共享服务器(Shared Server)整体运行状况和性能指标**的动态性能视图。与 `VSHAREDSERVERMONITOROracle数据库中专门用于监控共享服务器(SharedServer)整体运行状况和性能指标的动态性能视图。与VSHARED_SERVER` 关注单个服务器进程不同,此视图提供的是共享服务器环境的全局监控信息历史高水位标记**。

核心作用:

  1. 监控共享服务器负载:提供共享服务器环境的整体负载情况,包括并发连接数、会话数等
  2. 跟踪性能指标:记录共享服务器相关的关键性能指标的最高值和使用趋势
  3. 容量规划:帮助DBA了解共享服务器环境的高峰使用情况,为参数调优提供依据
  4. 诊断性能问题:通过分析历史高水位标记,诊断共享服务器配置是否合理

2. 字段含义详解

下表详细说明了 V$SHARED_SERVER_MONITOR 视图中的各个字段:

字段名 (Column Name)数据类型 (Datatype)描述 (Description)
MAXIMUM_CONNECTIONSNUMBER自实例启动以来,同时存在的最大连接数。这包括了所有通过调度程序建立的连接。
MAXIMUM_SESSIONSNUMBER自实例启动以来,同时存在的最大会话数。一个连接可能对应多个会话。
SERVERS_STARTEDNUMBER自实例启动以来,已启动的共享服务器进程总数。如果这个数值持续快速增长,可能表明 SHARED_SERVERS 设置过低。
SERVERS_TERMINATEDNUMBER自实例启动以来,已终止的共享服务器进程总数
SERVERS_HIGHWATERNUMBER自实例启动以来,同时活动的共享服务器进程数量的最大值(高水位标记)。这是设置 MAX_SHARED_SERVERS 的重要参考依据。
LOGONS_PER_SECONDNUMBER每秒登录次数的最大值
CURRENT_CONNECTIONSNUMBER当前的连接数
CURRENT_SESSIONSNUMBER当前的会话数
CURRENT_SERVERS_ACTIVENUMBER当前正在处理请求的共享服务器进程数量。这是评估当前负载的关键指标。
CURRENT_SERVERS_IDLENUMBER当前空闲的共享服务器进程数量
CURRENT_SERVERS_TOTALNUMBER当前总的共享服务器进程数量(活跃+空闲)。
AVG_WAIT_TIME_IN_QUEUENUMBER请求在公共队列中的平均等待时间(百分之一秒)。较高的值表明共享服务器进程不足。
REQUESTS_ENQUEUEDNUMBER已进入公共队列的请求总数
REQUESDS_DEQUEUEDNUMBER已从公共队列中取出的请求总数
CON_IDNUMBER容器ID。在多租户环境(CDB)中,标识该数据属于哪个容器(PDB)。对于非CDB环境,此值为0。

3. 使用场景

V$SHARED_SERVER_MONITOR 在以下场景中非常重要:

  1. 共享服务器容量规划:通过 SERVERS_HIGHWATER 了解高峰期的服务器进程需求,合理设置 MAX_SHARED_SERVERS 参数
  2. 性能监控:实时监控 CURRENT_SERVERS_ACTIVEAVG_WAIT_TIME_IN_QUEUE 来评估当前系统负载
  3. 参数调优:通过 SERVERS_STARTEDSERVERS_TERMINATED 评估共享服务器进程的创建/销毁频率,调整 SHARED_SERVERS 参数
  4. 系统健康检查:定期检查共享服务器环境的关键指标,预防性能问题
  5. 故障诊断:当共享服务器环境出现性能问题时,使用此视图进行初步诊断

4. 底层原理与相关知识点

4.1 共享服务器架构回顾

共享服务器模式由以下关键组件组成:

  • 调度进程 (Dispatcher):接收客户端请求并将其放入公共请求队列
  • 共享服务器进程:从公共队列获取请求并进行处理
  • 请求队列:存放待处理的客户端请求
  • 响应队列:存放已处理完成的响应

V$SHARED_SERVER_MONITOR 视图监控的是这些组件的整体运行状况,特别是共享服务器进程池的使用情况。

4.2 监控数据收集机制

Oracle 通过以下机制收集共享服务器监控数据:

  1. 实时计数器:维护各种活动的计数(如请求入队、出队数量)
  2. 高水位标记:跟踪关键资源的最高使用量
  3. 性能指标:计算平均等待时间等性能指标

这些数据存储在SGA的固定区域中,并通过V$视图暴露给用户。

4.3 相关重要参数

  • SHARED_SERVERS:共享服务器进程的最小数量
  • MAX_SHARED_SERVERS:共享服务器进程的最大数量
  • DISPATCHERS:调度进程的配置
  • CIRCUITS:虚拟电路的最大数量
  • SHARED_SERVER_SESSIONS:共享服务器会话的最大数量

5. 相关视图

视图名称主要用途描述
V$SHARED_SERVER显示各个共享服务器进程的详细信息,包括状态、处理请求数等
V$DISPATCHER提供调度进程的详细信息和统计数据
V$QUEUE显示共享服务器请求队列和响应队列的统计信息
V$CIRCUIT显示虚拟电路的信息
V$SESSION显示所有会话信息,可以过滤出使用共享服务器的会话
V$SGASTAT显示SGA的使用统计,包括共享服务器相关的内存使用

6. 基表信息

V$SHARED_SERVER_MONITOR 视图基于底层的 X$ 表构建,这些表是Oracle内部的虚拟内存表。根据内部结构,它很可能基于 **XKSMSSM∗∗或类似的XKSMSSM** 或类似的XKSMSSM或类似的X表。

重要提示:X表是Oracle的内部结构,没有官方文档支持,其结构和命名可能随版本变化。强烈建议不要直接查询X表是Oracle的内部结构,没有官方文档支持,其结构和命名可能随版本变化。强烈建议不要直接查询X表是Oracle的内部结构,没有官方文档支持,其结构和命名可能随版本变化。强烈建议不要直接查询X表,而是通过公开的V$视图获取信息。

7. 常用查询 SQL

7.1 共享服务器环境概览

SELECT 
    maximum_connections AS max_conn,
    maximum_sessions AS max_sess,
    servers_highwater AS servers_hwm,
    servers_started AS servers_start,
    servers_terminated AS servers_term,
    current_connections AS curr_conn,
    current_sessions AS curr_sess,
    current_servers_active AS curr_active,
    current_servers_idle AS curr_idle,
    current_servers_total AS curr_total,
    avg_wait_time_in_queue AS avg_wait_ms
FROM 
    v$shared_server_monitor;

7.2 共享服务器负载分析

SELECT 
    current_servers_active AS active_servers,
    current_servers_idle AS idle_servers,
    current_servers_total AS total_servers,
    ROUND((current_servers_active / NULLIF(current_servers_total, 0)) * 100, 2) AS utilization_pct,
    avg_wait_time_in_queue AS avg_wait_ms,
    CASE 
        WHEN avg_wait_time_in_queue > 100 THEN 'WARNING: High queue wait time'
        WHEN (current_servers_active / NULLIF(current_servers_total, 0)) > 0.8 THEN 'WARNING: High server utilization'
        ELSE 'NORMAL'
    END AS status
FROM 
    v$shared_server_monitor;

7.3 共享服务器历史统计

SELECT 
    servers_highwater AS peak_servers_used,
    maximum_connections AS peak_connections,
    maximum_sessions AS peak_sessions,
    servers_started AS total_servers_started,
    servers_terminated AS total_servers_terminated,
    requests_enqueued AS total_requests_queued,
    requests_dequeued AS total_requests_processed,
    (servers_started - servers_terminated) AS current_server_churn,
    ROUND(requests_enqueued / NULLIF(requests_dequeued, 0), 4) AS queue_efficiency_ratio
FROM 
    v$shared_server_monitor;

7.4 共享服务器配置建议

SELECT 
    servers_highwater AS highest_servers_needed,
    (SELECT value FROM v$parameter WHERE name = 'max_shared_servers') AS current_max_setting,
    CASE 
        WHEN servers_highwater > TO_NUMBER((SELECT value FROM v$parameter WHERE name = 'max_shared_servers')) THEN
            'WARNING: Peak usage (' || servers_highwater || ') exceeds MAX_SHARED_SERVERS (' || 
            (SELECT value FROM v$parameter WHERE name = 'max_shared_servers') || ')'
        WHEN servers_highwater = TO_NUMBER((SELECT value FROM v$parameter WHERE name = 'max_shared_servers')) THEN
            'INFO: Peak usage matches MAX_SHARED_SERVERS setting'
        ELSE
            'OK: Peak usage below MAX_SHARED_SERVERS setting'
    END AS max_servers_assessment,
    CASE 
        WHEN (servers_started - servers_terminated) > 100 THEN
            'INFO: Consider increasing SHARED_SERVERS to reduce process churn'
        ELSE
            'OK: Server process churn is acceptable'
    END AS shared_servers_assessment
FROM 
    v$shared_server_monitor;

8. 最佳实践与注意事项

  1. 合理设置 MAX_SHARED_SERVERS:根据 SERVERS_HIGHWATER 的值设置 MAX_SHARED_SERVERS,建议设置为比观察到的峰值高20-30%,以应对突发负载。

  2. 优化 SHARED_SERVERS:如果 SERVERS_STARTED 值很高,表明共享服务器进程频繁创建和销毁,应考虑适当增加 SHARED_SERVERS 的值以减少这种开销。

  3. 监控队列等待时间:定期检查 AVG_WAIT_TIME_IN_QUEUE,如果持续较高(如超过100毫秒),可能表明需要增加共享服务器进程数量。

  4. 关注连接数限制:确保 MAXIMUM_CONNECTIONSMAXIMUM_SESSIONS 不会接近数据库或操作系统的连接数限制。

  5. 定期审查:定期运行监控查询,建立性能基线,以便及时发现异常趋势。

  6. 多维度监控:结合 V$DISPATCHERV$QUEUEV$SHARED_SERVER 等视图进行全面监控。

  7. 容量规划:使用历史高水位标记进行容量规划,确保系统能够处理峰值负载。

通过正确使用 V$SHARED_SERVER_MONITOR 视图,DBA可以有效地监控和优化共享服务器环境,确保数据库的性能和稳定性。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值