[转]oracle表空间的高水位线

oracle表段中的高水位线HWM

oracle在逻辑存储上分4个粒度:表空间,段,区和块。

块:是粒度最小的存储单位,oracle的块大小可以是8K~32K不等,包含标准磁盘上的一个或多个块。oracle每一次I/O操作也是按块来操作的,也就是说当oracle从数据文件读数据时,是读取多少个块,而不是多少行。每一个Block里可以包含多个row。

区:由一系列相邻的块而组成,这也是oracle空间分配的基本单位,举个例子来说,当我们创建一个表Dave时,首先oracle会分配一个区的空间给这个表,随着不断的insert数据到Dave,原来的这个区容不下插入的数据时,oracle是以区为单位进行扩展的,也就是说再分配多少个区给Dave,而不是多少个块。

段:是由一系列的区所组成,一般来说,当创建一个对象时(表,索引),就会分配一个段给这个对象。所以从某种意义上来说,段就是某种特定的数据。如:create table Dave,这个段就是数据段,而create index on Dave(NAME),oracle同样会分配一个段给这个索引,但这是一个索引段了。查询段的信息可以通过数据字典USER_SEGMENTS来获得。

表空间:包含段、区及块。表空间的数据物理上储存在其所在的数据文件中。一个数据库至少要有一个表空间。

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