oracle 高水位线(hwm)

转载 2011年11月09日 10:08:59

 在Oracle数据的存储中,可以把存储空间想象为一个水库,数据想象为水库中的水。水库中的水的位置有一条线叫做水位线,在Oracle中,这条线被称为高水位线(High-warter mark, HWM)。在数据库表刚建立的时候,由于没有任何数据,所以这个时候水位线是空的,也就是说HWM为最低值。当插入了数据以后,高水位线就会上涨,但是这里也有一个特性,就是如果你采用delete语句删除数据的话,数据虽然被删除了,但是高水位线却没有降低,还是你刚才删除数据以前那么高的水位。也就是说,这条高水位线在日常的增删操作中只会上涨,不会下跌。


  下面我们来谈一下Oracle中Select语句的特性。Select语句会对表中的数据进行一次扫描,但是究竟扫描多少数据存储块呢,这个并不是说数据库中有多少数据,Oracle就扫描这么大的数据块,而是Oracle会扫描高水位线以下的数据块。现在来想象一下,如果刚才是一张刚刚建立的空表,你进行了一次Select操作,那么由于高水位线HWM在最低的0位置上,所以没有数据块需要被扫描,扫描时间会极短。而如果这个时候你首先插入了一千万条数据,然后再用delete语句删除这一千万条数据。由于插入了一千万条数据,所以这个时候的高水位线就在一千万条数据这里。后来删除这一千万条数据的时候,由于delete语句不影响高水位线,所以高水位线依然在一千万条数据这里。这个时候再一次用select语句进行扫描,虽然这个时候表中没有数据,但是由于扫描是按照高水位线来的,所以需要把一千万条数据的存储空间都要扫描一次,也就是说这次扫描所需要的时间和扫描一千万条数据所需要的时间是一样多的。所以有时候有人总是经常说,怎么我的表中没有几条数据,但是还是这么慢呢,这个时候其实奥秘就是这里的高水位线了。


  那有没有办法让高水位线下降呢,其实有一种比较简单的方法,那就是采用TRUNCATE语句进行删除数据。采用TRUNCATE语句删除一个表的数据的时候,类似于重新建立了表,不仅把数据都删除了,还把HWM给清空恢复为0。所以如果需要把表清空,在有可能利用TRUNCATE语句来删除数据的时候就利用TRUNCATE语句来删除表,特别是那种数据量有可能很大的临时存储表。


  在手动段空间管理(Manual Segment Space Management)中,段中只有一个HWM,但是在Oracle9iRelease1才添加的自动段空间管理(Automatic Segment Space Management)中,又有了一个低HWM的概念出来。为什么有了HWM还又有一个低HWM呢,这个是因为自动段空间管理的特性造成的。在手段段空间管理中,当数据插入以后,如果是插入到新的数据块中,数据块就会被自动格式化等待数据访问。而在自动段空间管理中,数据插入到新的数据块以后,数据块并没有被格式化,而是在第一次在第一次访问这个数据块的时候才格式化这个块。所以我们又需要一条水位线,用来标示已经被格式化的块。这条水位线就叫做低HWM。一般来说,低HWM肯定是低于等于HWM的。

相关文章推荐

ORACLE高水位线(HWM)和shrink table(表空间收缩)

一、ORACLE高水位线(HWM)   二、SHRINK TABLE

Oracle高水位线(HWM)及性能优化

说到HWM,我们首先要简要的谈谈ORACLE的逻辑存储管理.我们知道,ORACLE在逻辑存储上分4个粒度:表空间,段,区和块. (1)块:是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每...
  • xyz846
  • xyz846
  • 2012年04月19日 09:58
  • 379

Oracle高水位线(HWM)及性能优化[转]

http://blog.csdn.net/wanglinchuan/archive/2008/11/21/3344552.aspx  (资料来自互联网,由本人整理发布。出处列在最后参考资料中)  ...

Oracle高水位线(HWM)及性能优化[转]

说到HWM,我们首先要简要的谈谈ORACLE的逻辑存储管理.我们知道,ORACLE在逻辑存储上分4个粒度:表空间,段,区和块.    (1)块:是粒度最小的存储单位,现在标准的块大小是...

DELETE、TRUNCATE与高水位线(HWM)

我们知道,当通过DELETE方式删除表数据时,表段的HWM不会降低,Truncate缺省的会回收空间,降低HWM。 以下是一则案例,用户Delete了表数据,通过show_space来查看空间,发现...

高水位线HWM!

如何知道一个表的HWM? 1、首先对表进行分析: analyze table compute/estimate statistics; compute:是全表分析。 estimate :是抽样分析。...

oracle高水位线

  • 2015年01月11日 12:52
  • 23KB
  • 下载

很精辟的oracle高水位线,终于知道DELETE和TRUNCATE为什么不一样了

一、Oracle表段中的高水位线HWM 在Oracle数据的存储中,可以把存储空间想象为一个水库,数据想象为水库中的水。水库中的水的位置有一条线叫做水位线,在Oracle中,这条线被称为高水位线(H...

Oracle中的高水位线

高水位线(High Water Mark, HWM)类似于一个指针,用来标识分配给段(segment)的块(block)状态。块是Oracle中数据分配和操作的最小单位,段是类似于表、索引这样的数据库...
  • pingao
  • pingao
  • 2016年03月25日 09:37
  • 148

Oracle之降低高水位线

从10g开始,Oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理(ASSM),就可以使用这个特性缩小段,即降低HWM。这里需要强调一点,10g的这个新特性,仅对ASSM表空间...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle 高水位线(hwm)
举报原因:
原因补充:

(最多只允许输入30个字)