`
liulanghan110
  • 浏览: 1077811 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

高水位线

阅读更多

 

所有的 oracle 段都有一个在段内容纳数据的上限,我们把这个上限称为 "high water mark" HWM 。这个 HWM 是一个标记,用来说明已经有多少没有使用的数据块分配给这个 segment

 

  HWM 通常增长的幅度为一次 5 个数据块, 原则上 HWM 只会增大,不会缩小,即使将表中的数据全部删除, HWM 还是为原值,由于这个特点,使 HWM 很象一个水库的历史最高水位,这也就是 HWM 的原始含义,当然不能说一个水库没水了,就说该水库的历史最高水位为 0 。但是如果我们在表上使用了 truncate 命令,则该表的 HWM 会被重新置为 0

 

HWM 的一些特性

 

1 oracle HWM 来界定一个段中使用的块和未使用的块。

 

  当我们创建一个表 :A ,ORACLE 就会为这个对象分配一个段 . 在这个段中 , 即使我们未插入任何记录 , 也至少有一个区 (64bit, 也就是 8 个块 ) 被分配 , 第一个区的第一个块就称为段头 (SEGMENT HEADE), 段头中就储存了一些信息 , 基中 HWM 的信息就存储在此 . 此时 , 因为第一个区的第一块用于存储段头的一些信息 , 虽然没有存储任何实际的记录 , 但也算是被使用 , 此时 HWM 是位于第 2 个块 . 当我们不断插入数据到 A , 1 个块已经放不下后面新插入的数据 , 此时 ,ORACLE 将高水位之上的块用于存储新增数据 , 同时 ,HWM 本身也向上移 . 也就是说 , 当我们不断插入数据时 ,HWM 会不断上移 , 这样 , HWM 之下的 , 就表示使用过的块 ,HWM 之上的就表示已分配但从未使用过的块 .

 

2 HWM 在插入数据时 , 当现有空间不足而进行空间的扩展时会向上移 , 但删除数据时不会往下移 .

 

  这就好比是水库的水位 , 当涨水时 , 水位往上移 , 当水退出后 , 最高水位的痕迹还是清淅可见 .

 

  删除数据后便存在浪费的空间, ORACLE 不会释放空间以供其他对象使用,有一条简单的理由:由于空间是为新插入的行保留的,并且要适应现有行的增长。被占用的最高空间称为最高使用标记 (HWM)

 

3 HWM 的信息存储在段头当中 .

 

  HWM 本身的信息是储存在段头 . 在段空间是手工管理方式时 ,ORACLE 是通过 FREELIST( 一个单向链表 ) 来管理段内的空间分配 . 在段空间是自动管理方式时 (ASSM),ORACLE 是通过 BITMAP 来管理段内的空间分配 .

 

4 ORACLE 的全表扫描是读取高水位标记 (HWM) 以下的所有块

 

  当用户发出一个全表扫描时, ORACLE 始终必须从段一直扫描到 HWM ,即使它什么也没有发现。该任务延长了全表扫描的时间。

 

5 、如何查看 HWM

select blocks, empty_blocks from dba_tables where table_name='xxx' and owner='xx';

 

BLOCKS 列代表该表中曾经使用过得数据库块的数目,即水线。 EMPTY_BLOCKS 代表分配给该表,但是在水线以上的数据库块,即从来没有使用的数据块

 

查看 HWM 例子

create table STUDENT

(

  ID    NUMBER primary key ,

  CODE VARCHAR2 ( 10 ),

  NAME VARCHAR2 ( 50 )

);

 

创建表后查询

select blocks, empty_blocks from dba_tables where table_name= 'STUDENT' and owner= 'TEST' ;

发现 blocks empty_blocks 都为空

 

插入数据

insert into student values ( 1 , '0000000001' , ' 张飞 ' );

插入数据后查询

select blocks, empty_blocks from dba_tables where table_name= 'STUDENT' and owner= 'TEST' ;

发现 blocks empty_blocks 都为空

 

收集统计信息

exec DBMS_STATS.GATHER_TABLE_STATS(ownname=> 'TEST' , tabname=> 'STUDENT' ,estimate_percent=> 100 , degree => 1 , cascade => TRUE );

 

收集统计信息后查询

select blocks, empty_blocks from dba_tables where table_name= 'STUDENT' and owner= 'TEST' ;

发现 blocks 5 empty_blocks 0

 

要特别注意使用 analyze 命令而不是 dbms_stats 包。因为 dbms_stats 包只分析对 CBO 有帮助的统计信息,对于 space usage information 这些信息对 CBO 没有帮助,是不会统计的,所以要用 analyze

analyze table TEST.STUDENT compute statistics ; 

 

但其实真正的查看方式应该是通过 dump 来查看。具体做法如下:

a 、查找到该表 segment 的第一个数据块

select header_file , header_block from dba_segments where owner= 'TEST' and segment_name= 'STUDENT' ;  

     

HEADER_FILE HEADER_BLOCK  

----------- ------------  

5          51  

b dump 该数据块 找到 trace 文件

alter system dump datafile 5 block 51;

udump 文件夹中找到刚刚产生的 TRC 文件,打开就能看到详细信息。   

 

6. 如何降低HWM

 

a.  重建表

alter   table   STUDENT  move ;

move 后索引会失效,需要重建索引

alter index SYS_C005160 rebuild ;

再次分析表

analyze table TEST.STUDENT compute statistics ;

 

b.  Shrink

alter table STUDENT enable row movement ;

alter table STUDENT shrink space ;

再次分析表

analyze table TEST.STUDENT compute statistics ;

 

c.       Truncate

truncate table STUDENT;

再次分析表

analyze table TEST.STUDENT compute statistics ;

分享到:
评论

相关推荐

    高水位线详解

    在 Oracle 数据的存储中,可以把存储空间想象为一个水库,数据想象为水 库中的水。水库中的水的位置有一条线叫做水位线,在 Oracle 中,这条线被称为`高水位线(High-warter mark, HWM)

    oracle高水位线

    Oracle 高水位线 Oracle 高水位线(High Water Mark,HWM)是 Oracle 段中一个重要的概念,它标志着段中已经使用的数据块的上限。在 Oracle 中,每个段(包括表、索引等)都有一个高水位线,用于记录该段已经使用的...

    Oracle19c数据库高水位线(HWM)详解与操作指南

    内容概要:本文详细介绍了 Oracle 19c 数据库中的高水位线 (High Water Mark, HWM) 概念及其操作。首先解释了 HWM 的定义和特点,随后探讨了 HWM 对全表扫描和插入操作的影响。文中通过具体的 SQL 示例,展示了如何...

    浅谈ORACLE高水位线的解决方法.pdf

    浅谈ORACLE高水位线的解决方法.pdf

    oracle高水位.txt

    简单来说,高水位线以下的空间是已经被使用过的空间,而高水位线以上的空间则是从未被使用过的新空间。 #### 高水位线的影响 - **性能问题**:随着数据的不断插入、删除和更新,高水位线以下的空间可能会变得碎片化...

    如何降低DB2的管理表空间的高水位标记

    对于DB2数据库管理(DMS)表空间的高水位标记(HWM)是指该表空间曾经使用到的最大数据页数。如果使用:db2 list tablespaces show detail,看到某个DMS表空间的已用页数低于高水位标记,则有可能通过如下方法降低高...

    基于深度学习的水位线检测算法.pdf

    深度学习技术的出现为水位线检测提供了新思路,基于卷积神经网络(CNN)的水位检测算法可以输入一张包含水位线的静态图像,并输出水位线与检测图像左侧边界交点的预测坐标及水位线与水平方向的夹角预测值。...

    基于深度学习的水位线检测算法_廖赟1

    《基于深度学习的水位线检测算法》这篇文章探讨了如何利用深度学习技术,特别是卷积神经网络(CNN),来实现对河道、水库等开放水域的水位监测。传统的水位监测方式依赖于特殊设备,如水位标尺或压力传感器,而这种...

    基于单片机的水位控制系统设计

    设计一种基于单片机水塔水位检测控制系统。该系统能实 现水位检测、电机故障检测、处理和报警等功能,...查水位情况,以防止水量超过最高水位线;所有这一切问题的 存在,都在呼唤一种简单经济的水位控制系统的诞生。

    C# opencv 液体水位检测、高度水位检测

    5. 水位线识别:分析液体边缘,找到水与容器之间的交界线,即水位线。 四、高度水位检测 高度水位检测是在水位检测基础上,进一步计算出液体相对于容器底部的高度。这可能涉及到以下技术: 1. 目标坐标转换:通过...

    根据库容水位曲线和泄流过程反算入库流量

    而在水位较高时,库容的增加则相对快速。这条曲线不仅有助于确定水库在特定水位下的储水量,也为计算入库流量提供了必要的数据支持。 泄流过程是水库调节过程中非常重要的一个环节。它描述了水库在某一特定时间内的...

    Oracle Freelist和HWM原理及性能优化

    Oracle的Freelist(自由列表)和HWM(高水位线)是数据库管理中的关键概念,它们直接影响到数据存储的效率和SQL查询性能。本文将深入解析这两个概念及其原理,并探讨相关的性能优化策略。 首先,Oracle的Freelist是...

    Oracle 12c体系结构学习实验笔记

    Oracle 12c实验-段和高水位线.pdf Oracle 12c实验-管理表空间.pdf Oracle 12c实验-管理归档重做日志.pdf Oracle 12c实验-管理控制文件.pdf Oracle 12c实验-管理数据文件和临时文件.pdf Oracle 12c实验-管理重做日志....

    flink中的时间语义和水位线及迟到处理

    ### Flink中的时间语义、水位线及迟到数据处理详解 #### 一、窗口的作用与分类 **1.1 窗口的作用** 在Flink的流处理中,窗口是一种重要的机制,它将无限的数据流分割成有限的片段来进行处理。这种分割使得流处理...

    Oracle 表的扫描方式及连接方法

    在做 Delete 操作的时候,即使把表中的数据都删掉了,高水位线不会降低,这样在做全表扫描的时候效率依然不会提高。 二、通过 ROWID 的表存取(Table Access by ROWID) 通过 ROWID 的表存取是 Oracle 存取单行...

    新课标版2019高考地理一轮复习区域地理第一篇区域地理读图基础第一单元地球与地图第2课时地图与等高线地形图课时作业

    8. **水库建设**:水库的水深和面积可以通过最高水位线与等高线的相对位置来计算。如题目中的8题,甲养殖场临近的水库最深可能为10-15米。 9. **山脊走向判断**:山脊的走向可以通过等高线的延伸方向来确定。如9题...

    系统垃圾清理-课件大纲归类.pdf

    回收站功能的理解和正确使用,能避免误删除数据,而对高水位线问题的认知有助于防止数据库空间不足。此外,日常的数据文件操作管理也需要注意,以确保数据的安全性和完整性。 **日常系统运行管理注意事项**强调了...

    云计算-基于DEM的溃坝洪水演进计算及风险分析方法研究.pdf

    (2) 根据极端瞬间全溃的情况计算出的流量过程,采用了近似求解计算的方法,先后计算出下游河道内最高水位线,以及最高水位出现的时间。(3) 根据上述结果,结合流溪河流域的DEM数据,一方面通过VB语言中的绘图命令,...

    电热水壶安全使用提示.docx

    1. **注水注意事项**:在向电热水壶注水时,需严格遵循水位线指示,不可超过最高水位线,以防水沸腾时溢出造成烫伤或损坏电器。同时,切记不能在未关闭开关的情况下就插上电源。 2. **电源操作**:在连接电源前,...

    Pass4side Oracle 1z0-033

    这是因为当执行 `DEALLOCATE UNUSED` 命令时,Oracle会尝试回收高水位线之后的未使用空间,但不会减少高水位线之前的已分配空间。 #### 知识点三:位图索引在DML操作下的性能退化原因 当对具有位图索引的表进行...

Global site tag (gtag.js) - Google Analytics