oracle数据库表_笔记1:术语高水位线
高水位线
存储在数据库中的表段使用了这个术语。
高水位线(high-water mark,HWM)就是包含了数据的最右边的块。
HWM首先位于新创建表的第一个块中。过一段时间后,随着在这个表中放入数据,而且使用了越来越多的块,HWM会升高。如果我们删除了表中的一些(甚至全部)行,可能就会有许多块不再包含数据,但是它们仍在HWM之下,而且这些块会一直保持在HWM之下,直到重建、截除或收缩这个对象(将段收缩是Oracle Database 10g的一个新特性,只有当段在一个ASSM表空间中时才支持这个特性)。
HWM很重要,因为Oracle在全面扫描段时会扫描HWM之下的所有块,即使其中不包含任何数据。这会影响全面扫描的性能,特别是当HWM之下的大多数块都为空时。
TRUNCATE会把表的HWM重置回“0”,还会截除表上的相关索引。由于以上原因,如果打算删除表中的所有行,就应该选择TRUNCATE。
在一个MSSM表空间中,段只有一个HWM。不过,在ASSM表空间中,除了一个HWM外,还有一个低HWM。在MSSM中,HWM堆进时,所有块都会格式化并立即有效,Oracle可以安全地读取这些块。不过,对于ASSM,HWM推进时,Oracle并不会立即格式化所有块,只是在第一次使用这些块时才会完成格式化,以便安全地读取。第一次使用会发生在数据库向给定块插入记录时。对于ASSM,数据会插入到块中的任意水位线(在低水位线和高水位线之间),因此在这个区域的许多块不会被格式化。所以,全面扫描一个段时,必须知道要读取的块是否“安全”或是否未格式化(这说明,其中不包含有意义的信息,不能对其进行处理)。为了避免表中每一个块都必须经过这种安全/不安全检查,Oracle同时维护了一个低HWM和一个HWM。Oracle会全表扫描至HWM,对于低HWM以下的所有块会直接读取并加以处理。而对介于低HWM和HWM之间的块,则必须更加小心,需要参考管理这些块所用的ASSM位图信息以便查看应该读取哪些块,而哪些块应该忽略。
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5277.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
