`
tylgl
  • 浏览: 56837 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hwm (high water mak) 高水位印

阅读更多
Hwm是oracle segment中的一个比较重要的参数,它代表了该segment中曾经使用过的最大块空间,oracle把已经分配给该段的块分为2部分,一部分是已经或者说曾经使用到的最大空间,另一部分是已经分配给该段,但尚未被格式化,不能直接使用的部分,而hwm就是这2部分的分界线,oracle在需要新的空间的时候,先在hwm以下的块中寻找空间,如果空间不能满足,则使用hwm指向的快,然后hwm移动指向下一个块。

段空间的管理方式
1:fml freelist management ,segment hwm下所有可用的快使用freelist来管理,freelist位于第一个extent中。一个block是否位于freelist取决于pctfree和pctused,当需要块空间的时候,会进入freelist链表中寻找。因此,当对该segment频繁的进行dml的时候,会产生竞争,这时可以采用增加freelist和freelist groups。
新建一个segment的时候,第一个extent的第一个块用于存放断头信息,freelist和hwm的相关信息,也存放在这里面,类似于
buffer tsn: 0 rdba: 0x0040c661 (1/50785)
scn: 0x0000.0066c205 seq: 0x02 flg: 0x00 tail: 0xc2051002
frmt: 0x02 chkval: 0x0000 type: 0x10=DATA SEGMENT HEADER - UNLIMITED
Extent Control Header
-----------------------------------------------------------------
Extent Header:: spare1: 0     spare2: 0     #extents: 1     #blocks: 7   
                 last map 0x00000000 #maps: 0     offset: 4128
Highwater:: 0x0040c662 ext#: 0     blk#: 0     ext size: 7  
--(file=1 blcok=50786,即第二个block)
#blocks in seg. hdr's freelists: 0   
#blocks below: 0   
mapblk 0x00000000 offset: 0    Unlocked
    Map Header:: next 0x00000000 #extents: 1   obj#: 30790 flag: 0x40000000
Extent Map
-----------------------------------------------------------------
  0x0040c662 length: 7   
--初始分配一个extent,一个extent有8个block,第一个中block用于存放段头信息,这样,第一个extent中将剩余7个块可供使用
nfl = 1, nfb = 1 typ = 1 nxf = 0 ccnt = 0
SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
End dump data blocks tsn: 0 file#: 1 minblk 50785 maxblk 50785

2:assm auto segment space management ,9i开始,在lmt表空间中,可以选择使用assm方式的段空间管理,该方式下,用位图取代freelist,用位图来管理段中的快的使用情况,为该段指定的pctused,next,freelist参数都将被忽略掉。
新建一个segment的时候,第一个extent的至少是三个块用于存放断头信息,类似于
Start dump data blocks tsn: 9 file#: 9 minblk 9 maxblk 9
buffer tsn: 9 rdba: 0x02400009 (9/9)
scn: 0x0000.0066eedf seq: 0x02 flg: 0x00 tail: 0xeedf2002
frmt: 0x02 chkval: 0x0000 type:0x20=FIRST LEVEL BITMAP BLOCK
Dump of First Level Bitmap Block
--------------------------------
   Locker xid:    : 0x0000.000.00000000
Highwater:: 0x0240000c ext#: 0     blk#: 3     ext size: 8   
--0x0240000c =file 9 blcok 12,即前三个块用户存放段头信息
DBA Ranges :
--------------------------------------------------------
  0x02400009 Length: 8     Offset: 0    
  0:Metadata  1:Metadata  2:Metadata  3:unformatted
  4:unformatted  5:unformatted  6:unformatted  7:unformatted
--------------------------------------------------------
End dump data blocks tsn: 9 file#: 9 minblk 9 maxblk 9


高水位印以下空间的回收

高水位线的对full table scan的影响

oracle在delete的时候,并不会立即的收缩hwm,这样,在对此表做full table scan的时候,oracle会扫描hwm下的所有记录,即使有些块是空快,也照样读取,如果一个表,频繁的delete,而hwm又不能收缩,或者说hwm下面的块空间不能充分填充数据,这样就可能带来性能问题。

CREATE TABLE T AS SELECT * FROM DBA_OBJECTS;
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'SYS',TABNAME=>'T');
PL/SQL procedure successfully completed
SQL> EXEC SHOW_SPACE('T');
Total Blocks............................512
Total Bytes.............................4194304
Unused Blocks...........................106
Unused Bytes............................868352
Last Used Ext FileId....................1
Last Used Ext BlockId...................51849
Last Used Block.........................22
HWM=Total Blocks- Unused Blocks+1=407,HWM此时位于第407块。
SQL> DELETE T;
SQL> SELECT COUNT(*) FROM T;
COUNT(*)
----------
        0
Execution Plan
----------------------------------------------------------
  0     SELECT STATEMENT ptimizer=CHOOSE (Cost=41 Card=1)
  1   0  SORT (AGGREGATE)
  2   1    TABLE ACCESS (FULL) OF 'T' (Cost=41Card=1)

如何降低高水位线
a:用truncate代替delete
b:用move命令,但需要重新rebuild index
c:如果是assm方式,可以采用shrink命令,不需要rebuild index
d:exp/imp
SQL> alter table t move tablespace system;

SQL> exec show_space('T');
Total Blocks............................8
Total Bytes.............................65536
Unused Blocks...........................7
Unused Bytes............................57344
Last Used Ext FileId....................1
Last Used Ext BlockId...................52145
Last Used Block.........................1
HWM=Total Blocks- Unused Blocks+1=2,HWM此时位于第2块。
SQL> ANALYZE TABLE T COMPUTE STATISTICS;
表已分析。
SQL> SELECT COUNT(*) FROM T;
Execution Plan
----------------------------------------------------------
  0     SELECT STATEMENT ptimizer=CHOOSE (Cost=2Card=1)
  1   0  SORT (AGGREGATE)
  2   1    TABLE ACCESS (FULL) OF 'T' (Cost=2Card=1)

HWM以上空间的回收

做完analyze后,DBA_TABLES中的empty_blocks表示hwm以上的空间,对于这部分空间的回收,可以用Alter table t deallocate unused命令;
SQL> Select owner,table_name,blocks,empty_blocks From DBA_TABLES Where WNER='SYS' And TABLE_NAME='T';
OWNER              TABLE_NAME               BLOCKS    EMPTY_BLOCKS
------------------------------ ------------------------------ ---------- ------------
SYS                           T                      403         108
SQL> ALTER TABLE T DEALLOCATE UNUSED;
SQL> ANALYZE TABLE T COMPUTE STATISTICS;
SQL> Select owner,table_name,blocks,empty_blocks From DBA_TABLES Where WNER='SYS' And TABLE_NAME='T';
OWNER              TABLE_NAME            BLOCKS         EMPTY_BLOCKS
------------------------------ ------------------------------ ---------- ------------
SYS                           T                  403           4
分享到:
评论

相关推荐

    Oracle_高水位(HWM_High_Water_Mark)_说明.rar_High Water_Oracle 高水位

    Oracle数据库中的“高水位”(High Water Mark, HWM)是表空间管理的一个关键概念,它对于数据库的性能和空间利用率有着深远的影响。本文将深入解析高水位的概念、作用,以及如何调整以优化存储效率。 高水位(HWM...

    高水位(High_Water_Mark)的概念及高水位问题的解决

    Oracle 高水位(High Water Mark)概念及解决问题详解 Oracle 高水位(High Water Mark)是指 Oracle 数据库中表空间的物理存储单元中的最大使用块数,超过这个点,数据库的查询效率将受到影响。Oracle 数据库的...

    Oracle 高水位概念(hwm)

    其中,“高水位”(High Water Mark,简称HWM)是Oracle数据库中的一个重要概念,它与表空间、段、区和块等存储结构密切相关。本篇文章将深入探讨Oracle高水位的概念、作用以及其在数据库操作中的影响。 高水位...

    Oracle19c数据库高水位线(HWM)详解与操作指南

    内容概要:本文详细介绍了 Oracle 19c 数据库中的高水位线 (High Water Mark, HWM) 概念及其操作。首先解释了 HWM 的定义和特点,随后探讨了 HWM 对全表扫描和插入操作的影响。文中通过具体的 SQL 示例,展示了如何...

    oracle高水位线

    Oracle 高水位线(High Water Mark,HWM)是 Oracle 段中一个重要的概念,它标志着段中已经使用的数据块的上限。在 Oracle 中,每个段(包括表、索引等)都有一个高水位线,用于记录该段已经使用的数据块的数量。 ...

    oracle高水位.txt

    在Oracle数据库中,“高水位”(High Water Mark,HWM)是一个非常重要的概念。它标记了数据表中最后一次插入、更新或删除操作的位置。简单来说,高水位线以下的空间是已经被使用过的空间,而高水位线以上的空间则是...

    如何降低DB2的管理表空间的高水位标记

    对于DB2数据库管理(DMS)表空间的高水位标记(HWM)是指该表空间曾经使用到的最大数据页数。如果使用:db2 list tablespaces show detail,看到某个DMS表空间的已用页数低于高水位标记,则有可能通过如下方法降低高...

    Oracle Freelist和HWM原理及性能优化

    HWM(High Water Mark),即高水位线,是段内的一个标记,指示了数据的最高达到位置。当数据被删除后,块虽然变为空闲,但HWM并不会自动下移,除非使用`ALTER TABLE ... DEALLOCATE UNUSED`命令。HWM的存在影响了...

    高水位线详解

    在 Oracle 数据的存储中,可以把存储空间想象为一个水库,数据想象为水 库中的水。水库中的水的位置有一条线叫做水位线,在 Oracle 中,这条线被称为`高水位线(High-warter mark, HWM)

    Oracle降低高水位的方法

    在Oracle数据库中,高水位(High Water Mark, HWM)是衡量表数据存储位置的一个关键概念。它标识了表中数据曾经达到的最高存储位置。每当向表中插入、更新或删除数据时,Oracle数据库会自动管理数据的存储位置。值得...

    HWM14高层大气风场模式

    【HWM14高层大气风场模式】是用于模拟和预测地球高层大气风场的模型,它是HWM(水平风场模型)系列的最新发展。HWM系列模型自上世纪70年代以来一直被广泛应用于空间天气研究和预报,对理解和预测空间环境中的动态...

    DB2V9.7新特性-降低高水位标记

    内容表空间高水位标记(HWM)为什么要降低高水位标记在9.7以前如何降低高水位标记9.7降低高水位标记的新功能总结参考资料表空间高水位标记(HWM)高水位标记是一个应用广泛的术语,在很多的场合都会使用到,一般用以...

    HWM14_风场_中性大气_

    《中性大气风场模型(HWM14)解析与应用》 中性大气风场模型,简称HWM,是地球物理学中用于描述在中性大气层(即非电离层)内风速和风向分布的重要理论工具。HWM14是2014年更新的一个版本,它为科学家和工程师提供...

    oracle 高端水位

    在Oracle数据库管理领域,“高端水位”(High Water Mark,简称HWM)是一个关键概念,它涉及到数据库的逻辑存储结构、数据管理以及性能优化。理解Oracle的高端水位对于数据库管理员(DBA)和开发人员至关重要,因为它...

    Oracle Freelist和HWM原理探讨及相关性能优化

    Oracle数据库的存储管理和性能优化是DBA们关注的重点,其中FreeList和High Water Mark (HWM)是两个关键概念,它们对于理解Oracle的数据块管理、内存利用率和SQL性能至关重要。 FreeList是Oracle用来管理未分配存储...

    pull-high-watermark:急切地向前读取的拉流,直到到达水印为止

    heavySyncProcessing ( ) , sink)HighWatermark(hwm,lwm [,group])=>通过超前读至多到高水位标记( hwm )和至少低水位标记( lwm ) hwm默认〜10, lwm默认为0。 group选项指示缓冲区应作为数组整体发出。 这

    hwm.dll

    hwm

    Oracle 10g HWM原理及性能优化

    Oracle 10g 的 High Water Mark (HWM) 是数据库管理中的一个重要概念,它定义了表中已使用存储空间和未使用存储空间的边界。理解HWM的工作原理及其对性能的影响是优化Oracle数据库的关键。 HWM 在逻辑存储管理中...

Global site tag (gtag.js) - Google Analytics