Oracle 高水位线详解

2014-11-24 18:05:37 · 作者: · 浏览: 0

三、如何知道一个表的HWM?

a) 首先对表进行分析:

ANALYZE TABLE ESTIMATE/COMPUTE STATISTICS;

b) SELECT blocks, empty_blocks, num_rows

FROM user_tables

WHERE table_name = ;

说明:

BLOCKS 列代表该表中曾经使用过得数据库块的数目,即水线。

EMPTY_BLOCKS 代表分配给该表,但是在水线以上的数据库块,即从来没有使用的数据块。



让我们以一个有28672行的BIG_EMP1表为例进行说明:

1) SQL> SELECT segment_name, segment_type, blocks

FROM dba_segments

WHERE segment_name='BIG_EMP1';

SEGMENT_NAME SEGMENT_TYPE BLOCKS

----------------- -------------- ---------


BIG_EMP1 TABLE 1024

1 row selected.



2) SQL> ANALYZE TABLE big_emp1 ESTIMATE STATISTICS;

Statement processed.


3) SQL> SELECT table_name,num_rows,blocks,empty_blocks

FROM user_tables

WHERE table_name='BIG_EMP1';

TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS

---------- -------- ------- -------------

BIG_EMP1 28672 700 323

1 row selected.

注意:

BLOCKS + EMPTY_BLOCKS (700+323=1023)比DBA_SEGMENTS.BLOCKS少1个数据库块,这是因为有一个数据库块被保留用作segment header。DBA_SEGMENTS.BLOCKS 表示分配给这个表的所有的数据库块的数目。USER_TABLES.BLOCKS表示已经使用过的数据库块的数目。