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

在这里插入图片描述
好的,我们来对 Oracle 19C 数据库中的 V$PGA_TARGET_ADVICE_HISTOGRAM 动态性能视图进行一次极其详细和准确的解析。这个视图提供了比 V$PGA_TARGET_ADVICE 更为细粒度的 PGA 内存调优信息。


1. 作用与概述

V$PGA_TARGET_ADVICE_HISTOGRAM 视图的主要作用是通过预测模型,以直方图(Histogram)的形式,模拟在不同大小的 PGA_AGGREGATE_TARGET 值下,不同所需内存量的工作区(Work Area)预计将以何种模式(最优、单次、多道)执行

核心概念:工作区执行模式预测

  • V$PGA_TARGET_ADVICE 告诉你整体的缓存命中率。
  • V$PGA_TARGET_ADVICE_HISTOGRAM 则告诉你,为了实现那个整体命中率,有多少数量的、需要特定内存大小的工作区操作将在哪种模式下运行。

它回答了更细致的问题:“如果将PGA调整到X MB,那么有多少个需要Y MB内存的排序操作可以在内存中完成?” 这帮助你理解性能提升或下降的具体来源。


2. 使用场景

  1. 深度PGA性能诊断
    V$PGASTAT 显示缓存命中率低时,使用此视图定位是哪些大小范围的工作区(如 1-2MB 的排序还是 10MB+ 的哈希连接)导致了大量的磁盘I/O(单次/多道模式执行)。

  2. 精细化调优
    确认增加PGA内存的收益。例如,发现将目标值从2GB增加到3GB,主要能让需要 2MB-4MB 工作区的操作从“单次模式”升级为“最优模式”,从而量化性能提升。

  3. 容量规划验证
    判断当前或规划的PGA内存是否足以覆盖绝大多数的工作区操作需求。例如,如果系统有大量需要 64MB 工作区的操作,但建议值下这些操作仍无法在“最优模式”下完成,则说明负载非常沉重。

  4. 理解工作负载特征
    分析数据库负载的内存需求分布。是大量的小操作,还是少量的大操作?这对于整体资源规划至关重要。


3. 字段含义详解

以下是 V$PGA_TARGET_ADVICE_HISTOGRAM 视图中每个字段的精确说明。所有 ESTD_* 开头的字段都是预测值

字段名数据类型含义说明
PGA_TARGET_FOR_ESTIMATENUMBER用于进行此次预测的模拟PGA聚合目标值(单位:字节)。这是“假设”的目标值。
LOW_OPTIMAL_SIZENUMBER此直方图桶(bucket)的下限边界(单位:字节)。表示工作区所需的内存大小范围起始值。
HIGH_OPTIMAL_SIZENUMBER此直方图桶(bucket)的上限边界(单位:字节)。表示工作区所需的内存大小范围结束值。LOW_OPTIMAL_SIZE <= 工作区大小 < HIGH_OPTIMAL_SIZE
ESTD_OPTIMAL_EXECUTIONSNUMBER在模拟的PGA目标值下,预计落入此内存大小范围的工作区操作中,能够在 最优模式 (Optimal) 下执行的数量
ESTD_ONEPASS_EXECUTIONSNUMBER在模拟的PGA目标值下,预计落入此内存大小范围的工作区操作中,能够在 单次模式 (One-pass) 下执行的数量
ESTD_MULTIPASSES_EXECUTIONSNUMBER在模拟的PGA目标值下,预计落入此内存大小范围的工作区操作中,将在 多道模式 (Multi-pass) 下执行的数量应极力避免此值大于0
CON_IDNUMBER包含此数据的容器的ID。在CDB环境中,指示该数据属于哪个PDB。

4. 相关视图与基表

  • 相关动态性能视图

    • V$PGA_TARGET_ADVICE:提供汇总的建议信息(总体命中率)。这是本视图的汇总版,两者结合分析效果最佳。
    • V$SQL_WORKAREA_HISTOGRAM:显示当前工作负载下,不同大小工作区在不同执行模式下的实际执行次数。V$PGA_TARGET_ADVICE_HISTOGRAM 是其预测版
    • V$PGASTAT:提供PGA的总体运行统计,是顾问功能进行预测的数据基础。
    • V$SQL_WORKAREA_ACTIVE:查看当前正在执行的、消耗PGA的工作区。
  • 底层基表与原理
    V$PGA_TARGET_ADVICE_HISTOGRAMV$PGA_TARGET_ADVICE 共享相同的数据源和预测引擎。

    • 数据源:其预测基于实例启动后收集在SGA中的工作区执行历史数据(类似于 V$SQL_WORKAREA_HISTOGRAM 中的实际数据)。
    • 预测模型:Oracle 顾问功能不仅模拟总体内存分配,还会将历史工作负载按工作区所需内存大小进行分桶,然后对每个桶内的操作单独模拟在不同PGA目标值下的执行模式。
    • 持久化:同样由MMON进程定期采样至AWR仓库。
    • 底层结构:其底层来源于内部的 X$ 表(如 X$KSMMPAH),在查询时动态填充。

5. 详细原理与知识点

1. 直方图桶(Histogram Buckets)的含义:
该视图将工作区按它们所需要的最佳内存量(OPTIMAL_SIZE) 划分到不同的桶中。每个桶代表了一个内存范围(例如 2MB-4MB)。这并不是指Oracle分配给它们的内存量,而是指它们为了能在最优模式下运行所需要的内存量

2. 执行模式(Execution Mode)的优先级:
顾问的预测逻辑是:在给定的模拟PGA目标值下,Oracle会尽可能让工作区在最优模式下运行。如果总内存不足,则会根据一些内部算法(如优先级)决定哪些工作区被降级到单次甚至多道模式。这个视图预测了每个桶内“牺牲”掉的操作数量。

3. 如何解读——“寻找关键桶”:
调优的关键是识别那些“ESTD_ONEPASS_EXECUTIONS”或“ESTD_MULTIPASSES_EXECUTIONS”数值较高的桶。这些桶代表了导致性能问题的主力军。

  • 案例:当前PGA目标为2GB,查询发现 LOW_OPTIMAL_SIZE=4MB, HIGH_OPTIMAL_SIZE=8MB 这个桶的 ESTD_ONEPASS_EXECUTIONS 很高。而当PGA目标设为3GB时,这个桶的 ESTD_OPTIMAL_EXECUTIONS 大幅上升,ESTD_ONEPASS_EXECUTIONS 降为0。这说明将PGA从2GB增加到3GB,主要效益是让所有需要4-8MB内存的操作从单次模式提升到了最优模式

4. 与V$SQL_WORKAREA_HISTOGRAM的关系:

  • V$SQL_WORKAREA_HISTOGRAM:告诉你已经发生的事情。“过去24小时,有1000个需要2-4MB的操作在单次模式下运行。”
  • V$PGA_TARGET_ADVICE_HISTOGRAM:告诉你可能发生的事情。“如果我把PGA增大到3GB,预计那1000个操作里的90%将来可以在最优模式下运行。”

6. 常用查询SQL

1. 查询特定PGA目标值下的预测明细(例如,当前值的2倍)

SELECT 
    ROUND(low_optimal_size/1024/1024) AS low_mb,
    ROUND(high_optimal_size/1024/1024) AS high_mb,
    estd_optimal_executions AS optimal,
    estd_onepass_executions AS onepass,
    estd_multipasses_executions AS multipass
FROM v$pga_target_advice_histogram
WHERE pga_target_factor = 2 -- 查看当前目标2倍大小的预测
  AND estd_total_executions != 0 -- 忽略没有执行的桶
ORDER BY low_mb;

2. 对比不同PGA目标值的预测(当前值 vs 推荐值)
此查询比较当前设置和另一个设置(如3GB)下,各内存区间的执行模式变化。

WITH current_setting AS (
    SELECT low_optimal_size, high_optimal_size,
           estd_optimal_executions   AS curr_optimal,
           estd_onepass_executions   AS curr_onepass,
           estd_multipasses_executions AS curr_multipass
    FROM v$pga_target_advice_histogram
    WHERE pga_target_factor = 1 -- 当前设置
),
proposed_setting AS (
    SELECT low_optimal_size, high_optimal_size,
           estd_optimal_executions   AS prop_optimal,
           estd_onepass_executions   AS prop_onepass,
           estd_multipasses_executions AS prop_multipass
    FROM v$pga_target_advice_histogram
    -- 假设通过V$PGA_TARGET_ADVICE找到3GB是个好选择,这里指定绝对字节值
    WHERE pga_target_for_estimate = 3 * 1024 * 1024 * 1024
)
SELECT 
    ROUND(c.low_optimal_size/1024/1024) AS low_mb,
    ROUND(c.high_optimal_size/1024/1024) AS high_mb,
    c.curr_optimal, c.curr_onepass, c.curr_multipass,
    p.prop_optimal, p.prop_onepass, p.prop_multipass,
    (p.prop_optimal - c.curr_optimal) AS gain_in_optimal -- 优化模式的增益
FROM current_setting c
JOIN proposed_setting p ON (c.low_optimal_size = p.low_optimal_size AND c.high_optimal_size = p.high_optimal_size)
WHERE c.curr_onepass > 0 OR c.curr_multipass > 0 -- 关注当前有问题的桶
ORDER BY gain_in_optimal DESC;

3. 定位问题最严重的桶(在当前设置下)

SELECT 
    ROUND(low_optimal_size/1024/1024) AS low_mb,
    ROUND(high_optimal_size/1024/1024) AS high_mb,
    estd_optimal_executions AS optimal,
    estd_onepass_executions AS onepass,
    estd_multipasses_executions AS multipass,
    (estd_onepass_executions + estd_multipasses_executions) AS total_suboptimal
FROM v$pga_target_advice_histogram
WHERE pga_target_factor = 1 -- 当前设置
  AND (estd_onepass_executions > 0 OR estd_multipasses_executions > 0)
ORDER BY total_suboptimal DESC, low_optimal_size;

总结

V$PGA_TARGET_ADVICE_HISTOGRAM 是 Oracle 提供的 PGA 内存调优的“显微镜”。它将整体的性能建议分解到不同粒度的工作区级别,使你能够:

  1. 精准定位:确切知道是哪些大小的工作区操作在“拖后腿”,导致性能下降。
  2. 量化收益:清晰地量化调整PGA内存大小所带来的具体性能收益,使调优决策更有说服力。
  3. 深度洞察:深入了解数据库工作负载的内存需求分布特征。

对于追求极致性能和数据驱动的DBA来说,在使用了 V$PGA_TARGET_ADVICE 进行宏观决策后,使用本视图进行微观分析,是彻底解决PGA相关性能问题的标准流程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值