当前位置: 首页 > news >正文

Oracle 高水位线(High Water Mark, HWM)

1. 高水位线(HWM)的定义

  • 基本概念:HWM 是 Oracle 数据库中一个段(如表、索引)中已分配并被格式化(Formatted)的存储空间的最高位置。它标识了该段历史上曾达到的最大数据块使用量。

  • 物理意义:HWM 以下的块(即使为空)在全表扫描时会被读取,而 HWM 以上的块未被初始化,不会被扫描。

 

2. HWM 的类型

(1) 段级 HWM(Segment HWM)
  • 传统 HWM:用于手动段空间管理(MSSM)和自动段空间管理(ASSM)。

  • 特点:全表扫描时读取所有 HWM 以下的块。

(2) 低 HWM(Low HWM)
  • 仅适用于 ASSM:在自动段空间管理中引入。

  • 特点:标识段中最后一个“完全空闲”的块。全表扫描时,仅扫描低 HWM 以下的块,可能跳过部分空闲块,提升性能。

 3. HWM 的作用

 

  • 空间管理:标记段的存储上限,避免每次插入都重新分配空间。

  • 性能影响

    • 全表扫描效率:HWM 以下的块会被扫描,即使其中无数据。

    • 空间浪费:若表中数据大量删除,HWM 不会自动下降,导致存储空间无法被其他段复用。

 

4. HWM 的管理与调整

(1) HWM 的上升
  • 触发条件

    • 插入新数据导致现有空间不足,Oracle 自动扩展段(分配新区间)。

  • HWM 位置:每次扩展后,HWM 移动到新区间的起始块。

(2) HWM 的下降
  • 默认行为HWM 不会自动下降,即使删除所有数据。

  • 手动降低 HWM

 

-- 方法1:表重组(需要额外空间)
ALTER TABLE <表名> MOVE;

-- 方法2:收缩表空间(需启用行移动)
ALTER TABLE <表名> ENABLE ROW MOVEMENT;
ALTER TABLE <表名> SHRINK SPACE COMPACT;  -- 仅整理碎片
ALTER TABLE <表名> SHRINK SPACE;          -- 整理碎片并重置 HWM

 

  • 限制

    • SHRINK SPACE 要求表位于 ASSM 表空间中。

    • 操作期间会锁定表,可能影响业务。

 

5. HWM 的监控

(1) 查询数据字典视图

 -- 查看表的块分配情况
SELECT 
    table_name,
    blocks,         -- HWM 以下已使用的块数
    empty_blocks,   -- HWM 以上的空闲块数
    num_rows        -- 表中的行数(需统计信息准确)
FROM dba_tables 
WHERE table_name = 'YOUR_TABLE';

 (2) 使用 DBMS_SPACE 包

 -- 分析段的空间使用详情(包括 HWM 信息)
DECLARE
    l_unformatted_blocks  NUMBER;
    l_unformatted_bytes   NUMBER;
    l_fs1_blocks         NUMBER;
    l_fs1_bytes          NUMBER;
    l_fs2_blocks         NUMBER;
    l_fs2_bytes          NUMBER;
    l_fs3_blocks         NUMBER;
    l_fs3_bytes          NUMBER;
    l_fs4_blocks         NUMBER;
    l_fs4_bytes          NUMBER;
    l_full_blocks        NUMBER;
    l_full_bytes         NUMBER;
BEGIN
    DBMS_SPACE.SPACE_USAGE(
        segment_owner          => 'SCOTT',
        segment_name           => 'EMP',
        segment_type           => 'TABLE',
        unformatted_blocks     => l_unformatted_blocks,
        unformatted_bytes      => l_unformatted_bytes,
        fs1_blocks             => l_fs1_blocks,    -- 0-25% 空闲块
        fs1_bytes              => l_fs1_bytes,
        fs2_blocks             => l_fs2_blocks,    -- 25-50% 空闲块
        fs2_bytes              => l_fs2_bytes,
        fs3_blocks             => l_fs3_blocks,    -- 50-75% 空闲块
        fs3_bytes              => l_fs3_bytes,
        fs4_blocks             => l_fs4_blocks,    -- 75-100% 空闲块
        fs4_bytes              => l_fs4_bytes,
        full_blocks            => l_full_blocks,   -- 完全满的块
        full_bytes             => l_full_bytes
    );
    DBMS_OUTPUT.PUT_LINE('HWM 以下的块总数: ' || (l_fs1_blocks + l_fs2_blocks + l_fs3_blocks + l_fs4_blocks + l_full_blocks));
END;

 6. HWM 对性能的影响

 

(1) 全表扫描效率
  • 问题:若 HWM 远高于实际数据量(例如表曾存储 100 万行,删除后剩 1 万行),全表扫描仍需读取 HWM 以下所有块,导致 I/O 浪费。

  • 优化:定期收缩表或重组表以降低 HWM。

(2) 空间浪费
  • 问题:HWM 以上的空闲块无法被其他段复用。

  • 优化:使用 SHRINK SPACE 或导出/导入数据释放空间。

7. HWM 与 ASSM 的关系

  • ASSM 的优势

    • 引入低 HWM(Low HWM),允许全表扫描跳过部分空闲块。

    • 自动管理空间分配,减少碎片。

  • ASSM 的局限性

    • 无法完全避免 HWM 问题,仍需手动干预优化。

8. 实际案例

场景:某表频繁删除数据,HWM 过高导致查询变慢。

解决方案

启用行移动并收缩表:

ALTER TABLE orders ENABLE ROW MOVEMENT;
ALTER TABLE orders SHRINK SPACE;

重建索引:

ALTER INDEX orders_pk REBUILD;

 收集统计信息:

EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT', 'ORDERS');

  • HWM 是 Oracle 空间管理的核心机制,直接影响存储利用率和查询性能。

  • 关键操作

    • 定期监控 HWM(通过 DBA_TABLES 或 DBMS_SPACE)。

    • 对频繁删除的大表使用 SHRINK SPACE 或 MOVE 操作。

    • 结合 ASSM 自动管理,减少手动维护成本。

  • 注意事项:HWM 操作可能锁表,需在业务低峰期执行。

相关文章:

  • 【数据结构】线性表--队列
  • Echart地图数据源获取
  • [前端高频]数组转树、数组扁平化、深拷贝、JSON.stringifyJSON.parse等手撕
  • 微波至X射线波段详解2025.5.17
  • EXO 可以将 Mac M4 和 Mac Air 连接起来,并通过 Ollama 运行 DeepSeek 模型
  • 从零开始:使用 PyTorch 构建深度学习网络
  • 线性dp练习(碱基配对)
  • 计算机视觉与深度学习 | Python实现EMD-VMD-LSTM时间序列预测(完整源码和数据)
  • 系统架构设计(十):结构化编程
  • 【嵌入式DIY实例-Arduino篇】-OLED实现乒乓游戏
  • Windows 电脑中 MATLAB 安装常见问题及解决方案
  • 深入理解指针(6)
  • 【Linux网络】内网穿透
  • Java 面向对象进阶:抽象类与接口的舞蹈
  • 前端扫盲HTML
  • 目标跟踪相关综述文章
  • 震荡指标工具
  • 桌面端进程通信
  • 记录算法笔记(2025.5.17)验证二叉搜索树
  • 高效视频理解的临时移位模块(Temporal Shift Module)
  • 舞者王佳俊谈“与AI共舞”:像多了一个舞伴,要考虑它的“感受”
  • 一箭六星,朱雀二号改进型遥二运载火箭发射成功
  • 大外交丨3天拿下数万亿美元投资,特朗普在中东做经济“加法”和政治“减法”
  • 六省会共建交通枢纽集群,中部离经济“第五极”有多远?
  • 贵州仁怀通报“正新鸡排鸡腿里全是蛆”:已对同类产品封存送检
  • 阿联酋与美国达成超过2000亿美元协议