
好的,我们来对 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. 使用场景
此视图在以下多租户环境管理场景中至关重要:
-
PDB 状态监控与生命周期管理:
- 快速查看所有 PDB 的当前状态(
OPEN_MODE)是MOUNTED,READ WRITE, 还是READ ONLY。这是进行拔插、克隆、备份等操作的基础。
- 快速查看所有 PDB 的当前状态(
-
性能问题诊断与资源监控:
- 识别哪个 PDB 消耗了最多的 I/O(
IO_BYTES,IO_REQUESTS)、产生了最多的重做日志(REDO_BYTES)或使用了最多的并发资源(CURRENT_UTILIZATION)。 - 当实例出现性能瓶颈时,快速定位到资源消耗最大的租户(PDB)。
- 识别哪个 PDB 消耗了最多的 I/O(
-
连接管理与会话排查:
- 查看每个 PDB 的当前会话数(
SESSIONS_CURRENT),判断连接负载分布。 - 结合
V$SESSION进行诊断时,通过CON_ID字段关联到V$PDBS,可以将会话归属到具体的 PDB。
- 查看每个 PDB 的当前会话数(
-
资源计划执行情况监控:
- 监控 PDB 的资源使用量是否接近其在 CDB 资源计划(CDB Resource Plan)中设置的份额(Share)或限制(Limit)。
3. 字段含义详解
V$PDBS 视图的字段涵盖了 PDB 的标识、状态、资源使用量和限制等多个方面。
| 字段类别 | 字段名称 | 数据类型 | 含义说明 |
|---|---|---|---|
| 标识信息 | CON_ID | NUMBER | 容器的唯一ID。这是在整个CDB中标识一个容器的关键。CDBROOT=1,PDBROOT=1,PDBROOT=1,PDBSEED=2,其他PDB从3开始。 |
| CON_UID | NUMBER | 容器的唯一UID。在整个CDB生命周期中永不改变,即使PDB被拔插到另一个CDB中也不会变。 | |
| GUID | RAW(16) | 容器的全局唯一标识符(Global Unique Identifier)。 | |
| NAME | VARCHAR2(128) | 可插拔数据库(PDB)的名称。 | |
| 状态信息 | OPEN_MODE | VARCHAR2(10) | PDB的当前打开模式。这是最关键的字段之一。 • MOUNTED: PDB 已加载但未打开,不可访问。• READ ONLY: PDB 处于只读模式。• READ WRITE: PDB 处于读写模式。• MIGRATE: 正在升级或迁移。 |
| RESTRICTED | VARCHAR2(3) | 指示PDB是否处于受限模式 (YES/NO)。在受限模式下,只有具有 RESTRICTED SESSION 权限的用户才能连接。 | |
| OPEN_TIME | DATE | PDB最后一次被打开的时间。 | |
| RECOVERY_STATUS | VARCHAR2(10) | 恢复状态。例如 ENABLED, DISABLED。 | |
| BLOCKED | VARCHAR2(3) | 指示PDB的操作是否被阻塞 (YES/NO)。 | |
| 资源使用量 | SESSIONS_CURRENT | NUMBER | 当前连接到该PDB的会话数量。 |
| SESSIONS_HIGHWATER | NUMBER | 自实例启动以来,该PDB达到的最大并发会话数。 | |
| IO_BYTES | NUMBER | 该PDB累计已执行的I/O字节数。 | |
| IO_REQUESTS | NUMBER | 该PDB累计已发出的I/O请求次数。 | |
| REDO_BYTES | NUMBER | 该PDB累计生成的重做日志字节数。 | |
| CPU_TIME | NUMBER | 该PDB所有会话消耗的CPU时间(单位:厘秒)。 | |
| CPU_COUNT | NUMBER | 可用于CDB的CPU数量(通常反映主机CPU数)。 | |
| 资源管理 | SHARES | NUMBER | 在CDB资源计划中分配给该PDB的份额数。份额越大,在资源竞争时分配到的资源越多。 |
| UTILIZATION_LIMIT | NUMBER | 该PDB的CPU利用率限制百分比。例如,100表示可以使用100%的CDB资源。 | |
| MEMORY_LIMIT | NUMBER | 该PDB的内存使用限制(单位:字节)。 | |
| MEMORY_MIN | NUMBER | 该PDB保证的最小内存量(单位:字节)。 | |
| MEMORY_MAX | NUMBER | 该PDB可使用的最大内存量(单位:字节)。 | |
| DEFAULT_PERFORMANCE_PROFILE | VARCHAR2(128) | 与此PDB关联的默认性能配置文件。 | |
| 其他 | PROXY_SESSIONS_CURRENT | NUMBER | 当前的代理会话数(用于DG Broker等)。 |
| PROXY_SESSIONS_HIGHWATER | NUMBER | 代理会话的高水位标记。 | |
| LAST_STATUS_CHANGE_TIME | DATE | 最后一次状态改变的时间。 |
4. 相关视图与基表
-
相关数据字典和动态性能视图:
DBA_PDBS: 最重要的关联视图。DBA_PDBS存储了 PDB 的静态元数据(如创建时间、DBID、恢复状态),而V$PDBS存储了运行时动态信息(如当前状态、资源使用量)。通常通过CON_ID或GUID关联查询。V$CONTAINERS: 这是一个更基础的视图,显示所有容器(包括CDBROOT和PDBROOT和PDBROOT和PDBSEED)的核心信息(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$PDBS和V$CONTAINERS所依赖的底层内存结构(基表)。它们存储了容器在内存中的实时状态信息。 - **XRSRCPDBMETRIC∗∗:是‘VRSRCPDBMETRIC**: 是 `VRSRCPDBMETRIC∗∗:是‘VRSRCPDBMETRIC
的基表,可能为V$PDBS` 提供资源使用数据。 - 这些 X$ 表是内部的、未公开的,严禁直接查询。
- 视图定义查询:
SELECT view_definition FROM v$fixed_view_definition WHERE view_name = 'GV$PDBS';
- XCDBCONTAINERS∗∗/∗∗XCDB_CONTAINERS** / **XCDBCONTAINERS∗∗/∗∗XCDB_CONTAINER_INFO: 这些是
5. 底层详细原理
-
多租户架构与容器注册:
- 当 CDB 实例启动时,它会加载所有 PDB 的元数据,并在内存中(
X$CDB_CONTAINER_INFO)为每个容器创建一个“槽位”(Slot)来跟踪其运行时状态。 - 当一个 PDB 被
ALTER PLUGGABLE DATABASE ... OPEN命令打开时,实例会:- 检查其一致性。
- 为其分配必要的内存结构。
- 将其状态在内存基表中更新为
READ WRITE或READ ONLY。 - 使其数据文件和 undo 表空间在线(对于读写模式的PDB,会使用共享的undo表空间或自己的undo表空间)。
- 当 CDB 实例启动时,它会加载所有 PDB 的元数据,并在内存中(
-
资源统计收集:
- Oracle 后台进程(尤其是 MMON 及其奴隶进程)会定期(例如每秒)采样每个活动 PDB 的资源使用情况(CPU、I/O、内存)。
- 这些采样数据被聚合后,更新到
X$RSRCPDBMETRIC等底层结构中。 V$PDBS视图查询时,会从这些内存结构中获取数据,并可能展示其瞬时值或一段时间内的聚合值(如IO_BYTES是累计值)。
-
资源管理(Resource Manager)集成:
- CDB 资源计划监控每个 PDB 的资源消耗(
CPU_TIME,IO_REQUESTS等)。 - 当发生资源争用时,资源管理器会根据
V$PDBS中显示的SHARES和UTILIZATION_LIMIT等配置来仲裁和分配资源(如CPU时间)。 V$PDBS中的资源使用量数据既是监控的输出,也是资源管理器决策的输入。
- CDB 资源计划监控每个 PDB 的资源消耗(
6. 相关知识点介绍
-
PDB 打开模式:
- MOUNTED: PDB 的控制文件被打开,数据文件未被打开。不能进行任何数据访问。这是
ALTER PLUGGABLE DATABASE ... CLOSE后的状态。 - READ ONLY: 数据文件以只读方式打开。允许查询,禁止任何DML和DDL。适用于静态报表库或容灾备库。
- READ WRITE: 正常的读写模式。允许所有操作。
- MOUNTED: PDB 的控制文件被打开,数据文件未被打开。不能进行任何数据访问。这是
-
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》
Oracle动态性能视图V$PDBS解析
679

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



