暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
高水位线
1762
6页
7次
2020-05-06
5墨值下载
一、oracle 高水位线详解
一、什么是水线(High Water Mark)?
所有的 oracle 段(segments,在此,为了理解方便,建议把 segment 作为表的一个同义词)
有一个在段内容纳数据的上限,我们把这个上限称为"high water mark"或 HWM这个 HWM
是一个标记,用来说明已经有多少没有使用的数据块分配给这个 segment。HWM 通常增长
幅度为一次5个数据块,原则上 HWM 只会增大,不会缩小即使将表中的数据全部删除,HWM
还是为原值,由于这个特点使 HWM 很象一个水库的历史最高水位,这也就是 HWM 的原始含
义,当然不能说一个水库没水了,就说该水库的历史最高水位为0。但是如果我们在表上使
用了 truncate 命令,则该表的 HWM 会被重新置为0
二、HWM 数据库的操作有如下影响:
a) 全表扫描通常要读出直到 HWM 标记的所有的属于该表数据库块,即使该表中没有任何
据。
b) 即使 HWM 以下有空闲的数据库块,键入在插入数据时使用了 append 关键字,则在插入时
使用 HWM 以上的数据块,此时 HWM 会自动增大。
三、如何知道一个表的 HWM?
a) 首先对表进行分析:
ANALYZE TABLE <tablename> ESTIMATE/COMPUTE STATISTICS;
b) SELECT blocks, empty_blocks, num_rows
FROM user_tables
WHERE table_name = <tablename>;
说明:
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 表示已经使用过的数据库块的数目。
4) SQL> SELECT COUNT (DISTINCT
DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)||
DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)) "Used"
FROM big_emp1;
Used
----------
700
1 row selected.
5) SQL> delete from big_emp1;
28672 rows processed.
6) SQL> commit;
of 6
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜