Oracle 高水位(HWM)

来源:互联网 发布:淘宝客微信二合一软件 编辑:程序博客网 时间:2024/05/17 01:25

1、高水位是oracle用来界定一个segment中使用的块和未使用的块。当我们创建一个table的时候,oracle会为这个对象分配一个segment。在这个segment中,即使我们没有插入数据,也有一个叫做段头的块被分配了,位于第一个区的第一个块中。

当我们插入数据的时候,高水位之上的块用来存储新增数据,同时高水位也在上移,这样,高水位之下的就表示已经使用过的块,高水位之上的就表示已经分配但是没有使用过的块。

 

2、当进行数据插入的时候,对于一般的插入操作,当空间不足的时候高水位会向上移,对于采用直接路径插入行时(包括直接加载插入或者SQL LOADER直接路径插入),数据块是直接置于高水位之上的;有插入操作必然就有删除操作。

删除操作包括有deletetruncate以及drop,在此,说的是不带where字句的delete操作。

首先delete语句属于dml DML操作会放到rollback segment里,事物提交之后才会生效,如果有相应的触发器,那么执行的时候将被触发。Delete语句不会影响到所占用的extent,高水位也保持原来的位置不动。

truncatedrop属于ddlDDL操作会立即生效,原来的数据不会被放到rollback segment里,不能进行回滚,操作也不会触发触发器。Drop将所占用的空间全部释放。Truncate语句缺省的情况下将空间释放到minextents个,除非使用reuse storagetruncate会将高水位复位回到最开始的状态。Truncate一般都是使用在temp table上。

 

3oracle全表扫描的时候是读取高水位以下的所有块

 

4、高水位的信息、freelist描述信息、extents信息记录在segment header里面,segment header位于初始extents的第一个块。

原创粉丝点击