Oracle中HWM浅谈

来源:互联网 发布:电脑加速软件 编辑:程序博客网 时间:2024/05/16 08:59

       HWM, 全称是 High Water Mark(高水位线)。

   在了解高水位线之前先了解一下,Oracle数据库的逻辑结构:Tablespace-->segments(段)-->extens(区)-->block(块)

    1).Tablespace:包含段、区、块,表空间是实际存在在存储上的一个文件,一个数据库至少要有一个表空间。

    2).segments:是由一系列的区所组成的,当创建对象时(table,index)就会分配一个段给这个对象,所以会有数据段,和索引段

      查询段的信息可从USER_SEGMENTS来获得。

    3).extents:是由一系列的块组成的,区也是Oracle最小的分配单位,当我们创建一个表的时候首先会分配一个区的空间给这

       个表,随着表的增长Oracle在会以区进行扩展。而不是以块扩展。

    4).block:块是Oracle中最小的粒度单位,每次I/O的最小单位也是块,而不是行。块的默认大小是8K。

   在Oracle中的每一个段都会有一个段内所容纳数据的上限,我们把这个上限称为HWM。这个HWM用来标记有段内存放数据所使用的块的最高历史记录。每次HWM的增长幅度是5个块,原则上HWM只会上升,而不会下降,所以HWM就像一个水库的历史的最高水位,即使段内的数据被delete,HWM也不会下降。如果使用truncate命令之后HWM则会置0.

   一. HWM对数据库操作的影响如下:

     1).在全表扫描的时候Oracle会读出HWM一下的所有数据块,即使数据块上没有数据,这样会增大全表扫描的时间。

     2).在向表中插入数据的时候,使用append关键字之后便会在HWM之上插入数据,即使HWM之下有空闲块,此时HWM也会增加。

   二.如何查看HWM:

     首先对表进行统计信息:

     ANALYZE TABLE <tablename> STATISTICS COMPUTE;

     从user_tables中获得信息:

     SELECT blocks,empty_blocks FROM user_tables

     WHERE TABLE_NAME=<tablename>

    这里的blocks是段内数据所到的最大上限即HWM,empty_blocks则是HWM上所空闲的块的数量。

     三.HWM的信息存储在段头当中。

     HWM的本身的信息是存放在段头中的,如果段空间是手工管理方式时,Oracle是通过FREELIST(单项链表)来管理段内的空间

     分配的,在段空间是自动管理方式(ASSM)时,Oracle是通过BITMAP来管理段内的空间分配的。

 

 

 


 

 

 

     

 

 

 

原创粉丝点击