oracle hwm 查询,Oracle HWM( High Water Mark)

Oracle HWM( High Water Mark)

1、什么是HWM

注意:此部分内容请先了解oracle物理结构和逻辑结构

顾名思义,这是一条水位线,oracle的每一个对象都是一个segement,用表来举例,那么这个表你就可以想象成蓄水池,这个HWM就是这条水位线,类比到segement上,水位线以下是存放的数据,水上面就是没有蓄水的水池部分。与传统水池有些许不同,segement的HWM不会下降并且它的高度会自动增加,比如你删除了数据,那么这个HWM是不会下降的,如果你的表存不下数据了,那么他会自动分配新的block到这个segement当中。

segement是一串连续的extend扩展区构成,一个extend扩展区由很多block块构成,一个block由很多rows构成,这个rows就是我们的一条一条的记录。

Above the HWM:these blocks are unformatted and have never been used.

Below the HWM :

Allocated, but currently unformatted and unused

Formatted and contain data

Formatted and empty because the data was deleted

刚开始创建表的时候

a6f0a52d132536026dd48b51a78ee85a.png

插入数据的时候

8be7cc33fa539c938f105ad88f68a6ab.png

删除了数据再插入数据的时候

ce8ad6335b411816fa78695c82c2c105.png

空间不足的时候

db69ef7afad99cbc2bd9070e38631f8b.png

为什么图中会出现Low HWM呢?是因为我们在ASSM(自动段空间管理)当中,数据插入到新的数据块当中的时候,数据块并没有格式化,而是在第一次访问这个数据块的时候才格式化这个快,这个LowHWH就是来标识已经格式化的块。

更加详细介绍见官网,再写在这里也是啰嗦

2、如何理解HWM

当我们在进行查询的时候,会扫描我们的存储数据的block,oracle扫描的是HWM以下的数据块。我们使用一个数据表的时候,会发现一个问题,就是在刚开始使用这个表感觉做一些查询什么的都非常快,当使用时间长了的时候,就会发现这个表无论是查询还是什么操作,都会变得很慢,其实这个时候就关乎这个HWM的事情了。

当我们对整个表进行了多次的crud的时候,那么我们的HWM会变得很高,并且这个HWM是不会自己降低的,而且这个时候,在segement里面的存储空间,因为进行了多次增加删除的操作,会存在很多的碎片空间,这时候我们再次插入一条记录,oracle顺序扫描整个存储空间,找到能放下整个记录的碎片空间,然后把这个记录塞进去,这个时候降低了插入的效率,所以你会感觉操作会变得很慢。

同样的,举一个例子,当我们往一个新表中插入一千万的数据记录,然后使用delete操作删除这些记录,那么我们再次执行查询操作,你同样会发现这个select执行的很慢,虽然表中是没有什么记录的,这个时候其实HWM就变成了一个关键。

同样,再举一个例子,我们往一张表中插入大批量的数据,前面的内容我们已经知道,oracle插入记录会扫描表空间的存储碎片,当然小批量的数据可能不存在性能问题,但是,如果我们使用存储过程,插入大批量数据的时候,性能问题其实是值得关注的。那么我们可不可以不扫描碎片空间直接在LOW HWM高水位线后面插入数据呢?答案是可以的,我们这个时候通过加入Append操作,让插入操作直接在高水位线后插入数据。

3、修正Oracle表的HWM

3.1、重建表

复制要保留的数据到临时表,drop掉原表,然后将临时表重命名为原表名

3.2、释放空闲block

ALTER TABLE table_name Deallocate unused

3.3、移动表空间

ALTER TABLE table_name MOVE TABLESPACE tablespace_name

如果不加表空间,则默认为本空间

3.4 shrink (推荐)

segement shrink分为两个阶段

1、数据重组:insert、delete等操作,尽量将数据排在前面,在这个过程表会加上RX锁,只会在需要移动的行上加锁。由于涉及到rowid的修改,需要enable row movement。

2、HWM调整,释放空闲数据块。此过程需要在表加上X锁,会造成表的dml语句阻塞。

alter table_name shrink space [ | compact| cascade];

alter table table_name shrink space compact; -- 收缩表

alter table table_name shrink space; --收缩表 降低HWM

alter table table_name shrink space cascade; --收缩表,降低HWM ,并且把相关索引收缩

alter index idx_name shrink space;--回缩索引

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值