深入了解oracle的高水位(HWM)

说到 HWM, 我们首先要简要的谈谈 ORACLE 的逻辑存储管理 . 我们知道 ,ORACLE 在逻辑存储上分 4 个粒度 : 表空间 , , 区和块 .

(1):是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操作也是按块来操作的,也就是说当ORACLE从数据文件读数据时,是读取多少个块,而不是多少行.


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

(3):是由一系列的区所组成,一般来说,当创建一个对象时(,索引),就会分配一个段给这个对象.所以从某种意义上来说,段就是某种特定的数据.CREATE TABLE PM_USER,这个段就是数据段,CREATE INDEX ON PM_USER(NAME),ORACLE同样会分配一个段给这个索引,但这是一个索引段了.查询段的信息可以通过数据字典: SELECT * FROM USER_SEGMENTS来获得,

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

OK,我们现在回到HWM上来,那么,什么是高水位标?这就跟ORACLE的段空间管理相关了.

()ORACLEHWM来界定一个段中使用的块和未使用的块.

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

你可能感兴趣的:(深入了解oracle的高水位(HWM))