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

Oracle动态性能视图V$PDBS解析

在这里插入图片描述
好的,我们来对 Oracle 19C 数据库中的 V$PDBS 动态性能视图进行一次全面、深入的解析。这个视图是 Oracle Multitenant(多租户)架构的核心视图之一,提供了关于可插拔数据库(Pluggable Databases, PDBs)的实时状态和性能信息。


1. 作用与概述

V$PDBS 视图用于动态展示当前容器数据库(CDB)实例中所有可插拔数据库(PDB)的运行时状态、配置信息和资源使用情况

  • 核心目的: 为数据库管理员(DBA)提供一个中心化的控制台,以监控和管理 CDB 内所有 PDB 的生命周期、性能特征和健康状况。它回答了“我的各个 PDB 当前状态如何?打开了没有?资源用了多少?”等关键问题。
  • 数据特性: 该视图提供的是实时、动态的数据,来源于实例的内存结构。它与提供静态元数据DBA_PDBS 数据字典视图形成互补。
  • 重要性: 在多租户环境中,传统的许多 V$ 视图(如 V$DATABASE)只显示根容器(CDBROOT)的信息。‘VROOT)的信息。`VROOT)的信息。VPDBS` 专门用于填补这一空白,为每个独立的 PDB 提供实例级别的洞察。

2. 使用场景

此视图在以下多租户环境管理场景中至关重要:

  1. PDB 状态监控与生命周期管理

    • 快速查看所有 PDB 的当前状态(OPEN_MODE)是 MOUNTED, READ WRITE, 还是 READ ONLY。这是进行拔插、克隆、备份等操作的基础。
  2. 性能问题诊断与资源监控

    • 识别哪个 PDB 消耗了最多的 I/O(IO_BYTES, IO_REQUESTS)、产生了最多的重做日志(REDO_BYTES)或使用了最多的并发资源(CURRENT_UTILIZATION)。
    • 当实例出现性能瓶颈时,快速定位到资源消耗最大的租户(PDB)。
  3. 连接管理与会话排查

    • 查看每个 PDB 的当前会话数(SESSIONS_CURRENT),判断连接负载分布。
    • 结合 V$SESSION 进行诊断时,通过 CON_ID 字段关联到 V$PDBS,可以将会话归属到具体的 PDB。
  4. 资源计划执行情况监控

    • 监控 PDB 的资源使用量是否接近其在 CDB 资源计划(CDB Resource Plan)中设置的份额(Share)或限制(Limit)。

3. 字段含义详解

V$PDBS 视图的字段涵盖了 PDB 的标识、状态、资源使用量和限制等多个方面。

字段类别字段名称数据类型含义说明
标识信息CON_IDNUMBER容器的唯一ID。这是在整个CDB中标识一个容器的关键。CDBROOT=1,PDBROOT=1,PDBROOT=1PDBSEED=2,其他PDB从3开始。
CON_UIDNUMBER容器的唯一UID。在整个CDB生命周期中永不改变,即使PDB被拔插到另一个CDB中也不会变。
GUIDRAW(16)容器的全局唯一标识符(Global Unique Identifier)。
NAMEVARCHAR2(128)可插拔数据库(PDB)的名称
状态信息OPEN_MODEVARCHAR2(10)PDB的当前打开模式。这是最关键的字段之一。
MOUNTED: PDB 已加载但未打开,不可访问。
READ ONLY: PDB 处于只读模式。
READ WRITE: PDB 处于读写模式。
MIGRATE: 正在升级或迁移。
RESTRICTEDVARCHAR2(3)指示PDB是否处于受限模式 (YES/NO)。在受限模式下,只有具有 RESTRICTED SESSION 权限的用户才能连接。
OPEN_TIMEDATEPDB最后一次被打开的时间
RECOVERY_STATUSVARCHAR2(10)恢复状态。例如 ENABLED, DISABLED
BLOCKEDVARCHAR2(3)指示PDB的操作是否被阻塞 (YES/NO)。
资源使用量SESSIONS_CURRENTNUMBER当前连接到该PDB的会话数量
SESSIONS_HIGHWATERNUMBER自实例启动以来,该PDB达到的最大并发会话数
IO_BYTESNUMBER该PDB累计已执行的I/O字节数
IO_REQUESTSNUMBER该PDB累计已发出的I/O请求次数
REDO_BYTESNUMBER该PDB累计生成的重做日志字节数
CPU_TIMENUMBER该PDB所有会话消耗的CPU时间(单位:厘秒)
CPU_COUNTNUMBER可用于CDB的CPU数量(通常反映主机CPU数)。
资源管理SHARESNUMBER在CDB资源计划中分配给该PDB的份额数。份额越大,在资源竞争时分配到的资源越多。
UTILIZATION_LIMITNUMBER该PDB的CPU利用率限制百分比。例如,100表示可以使用100%的CDB资源。
MEMORY_LIMITNUMBER该PDB的内存使用限制(单位:字节)
MEMORY_MINNUMBER该PDB保证的最小内存量(单位:字节)
MEMORY_MAXNUMBER该PDB可使用的最大内存量(单位:字节)
DEFAULT_PERFORMANCE_PROFILEVARCHAR2(128)与此PDB关联的默认性能配置文件
其他PROXY_SESSIONS_CURRENTNUMBER当前的代理会话数(用于DG Broker等)。
PROXY_SESSIONS_HIGHWATERNUMBER代理会话的高水位标记
LAST_STATUS_CHANGE_TIMEDATE最后一次状态改变的时间

4. 相关视图与基表

  • 相关数据字典和动态性能视图

    • DBA_PDBS最重要的关联视图DBA_PDBS 存储了 PDB 的静态元数据(如创建时间、DBID、恢复状态),而 V$PDBS 存储了运行时动态信息(如当前状态、资源使用量)。通常通过 CON_IDGUID 关联查询。
    • V$CONTAINERS: 这是一个更基础的视图,显示所有容器(包括CDBROOT和PDBROOT和PDBROOTPDBSEED)的核心信息(CON_ID, NAME, OPEN_MODE)。V$PDBS 可以看作是 V$CONTAINERS 的增强版,包含了丰富的性能指标。
    • V$RSRCPDBMETRIC提供更细粒度、更实时的资源指标(如每秒的CPU消耗、I/O速率),这些数据是用于实现CDB资源管理的原始数据。V$PDBS 中的一些资源数据可能来源于此。
    • V$SESSION: 通过 CON_ID 字段关联,可以查看每个PDB内的具体会话活动。
    • GV$PDBS: 在 Oracle RAC 环境中,显示所有集群节点上的 PDB 信息。
  • 基表(Underlying Base Table)

    • XCDBCONTAINERS∗∗/∗∗XCDB_CONTAINERS** / **XCDBCONTAINERS/XCDB_CONTAINER_INFO: 这些是 V$PDBSV$CONTAINERS 所依赖的底层内存结构(基表)。它们存储了容器在内存中的实时状态信息。
    • **XRSRCPDBMETRIC∗∗:是‘VRSRCPDBMETRIC**: 是 `VRSRCPDBMETRIC:是VRSRCPDBMETRIC的基表,可能为V$PDBS` 提供资源使用数据。
    • 这些 X$ 表是内部的、未公开的,严禁直接查询
    • 视图定义查询:
      SELECT view_definition FROM v$fixed_view_definition WHERE view_name = 'GV$PDBS';
      

5. 底层详细原理

  1. 多租户架构与容器注册

    • 当 CDB 实例启动时,它会加载所有 PDB 的元数据,并在内存中(X$CDB_CONTAINER_INFO)为每个容器创建一个“槽位”(Slot)来跟踪其运行时状态。
    • 当一个 PDB 被 ALTER PLUGGABLE DATABASE ... OPEN 命令打开时,实例会:
      • 检查其一致性。
      • 为其分配必要的内存结构。
      • 将其状态在内存基表中更新为 READ WRITEREAD ONLY
      • 使其数据文件和 undo 表空间在线(对于读写模式的PDB,会使用共享的undo表空间或自己的undo表空间)。
  2. 资源统计收集

    • Oracle 后台进程(尤其是 MMON 及其奴隶进程)会定期(例如每秒)采样每个活动 PDB 的资源使用情况(CPU、I/O、内存)。
    • 这些采样数据被聚合后,更新到 X$RSRCPDBMETRIC 等底层结构中。
    • V$PDBS 视图查询时,会从这些内存结构中获取数据,并可能展示其瞬时值或一段时间内的聚合值(如 IO_BYTES 是累计值)。
  3. 资源管理(Resource Manager)集成

    • CDB 资源计划监控每个 PDB 的资源消耗(CPU_TIME, IO_REQUESTS等)。
    • 当发生资源争用时,资源管理器会根据 V$PDBS 中显示的 SHARESUTILIZATION_LIMIT 等配置来仲裁和分配资源(如CPU时间)。
    • V$PDBS 中的资源使用量数据既是监控的输出,也是资源管理器决策的输入。

6. 相关知识点介绍

  • PDB 打开模式

    • MOUNTED: PDB 的控制文件被打开,数据文件未被打开。不能进行任何数据访问。这是 ALTER PLUGGABLE DATABASE ... CLOSE 后的状态。
    • READ ONLY: 数据文件以只读方式打开。允许查询,禁止任何DML和DDL。适用于静态报表库或容灾备库。
    • READ WRITE: 正常的读写模式。允许所有操作。
  • CDB 资源计划(CDB Resource Plan)

    • 这是多租户环境的核心特性,允许在PDB之间管理CPU、I/O、并行服务器和内存资源。
    • SHARES: 定义相对重要性。一个拥有2份份额的PDB获得的资源是拥有1份份额的PDB的两倍。
    • UTILIZATION_LIMIT: 设置绝对上限,防止一个PDB耗尽所有CDB资源。
  • PDB 的隔离性与共享性

    • 隔离: 每个PDB有自己的数据字典、用户、Schema对象,从应用视角看如同独立数据库。
    • 共享: 所有PDB共享同一个实例进程(SGA, PGA)、后台进程和控制文件。V$PDBS 视图正是这种“共享实例,多租户”架构的集中体现。

7. 常用查询 SQL

1. 查看所有PDB的基本状态和打开模式(最常用)

SELECT con_id, name, open_mode, restricted, open_time
FROM v$pdbs
ORDER BY con_id;

2. 监控各个PDB的资源消耗情况(性能诊断)

SELECT p.name,
       p.sessions_current,
       p.io_bytes,
       p.io_requests,
       p.redo_bytes,
       ROUND(p.cpu_time / 100, 2) AS cpu_seconds -- 将厘秒转换为秒
FROM v$pdbs p
WHERE p.open_mode != 'MOUNTED'
ORDER BY p.io_bytes DESC;

3. 检查PDB的资源分配限制

SELECT name, shares, utilization_limit, memory_min, memory_max
FROM v$pdbs
ORDER BY con_id;

4. 查找处于受限模式或非正常打开状态的PDB

SELECT name, open_mode, restricted, blocked
FROM v$pdbs
WHERE restricted = 'YES' OR open_mode != 'READ WRITE' OR blocked = 'YES';

5. 关联DBA_PDBS获取更完整信息(静态+动态)

SELECT v.name,
       v.open_mode,
       d.status,          -- 来自DBA_PDBS的静态状态
       v.sessions_current,
       d.creation_time    -- 来自DBA_PDBS的创建时间
FROM v$pdbs v
JOIN dba_pdbs d ON v.con_uid = d.con_uid -- 或使用 v.guid = d.guid
ORDER BY v.con_id;

6. 计算每个PDB的I/O平均请求大小

SELECT name,
       io_bytes,
       io_requests,
       ROUND(io_bytes / NULLIF(io_requests, 0), 2) AS avg_io_request_bytes
FROM v$pdbs
WHERE io_requests > 0
ORDER BY avg_io_request_bytes DESC;

总结

V$PDBS 动态性能视图是 Oracle 多租户架构的“指挥中心”视图。它成功地将传统单实例数据库的监控视角,扩展到了一个共享实例下的多个逻辑数据库集合上。

通过此视图,DBA 可以:

  • 一目了然 地掌握所有 PDB 的实时运行状态。
  • 精准定位 资源消耗的热点租户,快速诊断性能问题。
  • 有效实施 和监控多租户资源管理策略,保证服务质量(QoS)。
  • 无缝衔接 动态性能监控与静态元数据管理。

掌握 V$PDBS 是管理和运维 Oracle Multitenant 数据库的必备技能,它与其他 CDB 相关的视图(如 DBA_PDBS, V$RSRCPDBMETRIC)共同构成了多租户环境下完整的监控体系。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值