- 浏览: 56837 次
- 性别:
- 来自: 北京
最近访客 更多访客>>
最新评论
-
yvonxiao:
这个的确好用,我记得我以前是自己写了个存储过程来解决这种递归问 ...
Oracle Start With Connect By
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
段空间的管理方式
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 命令
2009-02-05 20:30 1011一、ORACLE的启动和关闭 ... -
通过dbms_flashback找回误删除的数据收藏
2009-01-21 11:35 1346在使用DBMS_FLASHBACK时要首先注意以下几个事项: ... -
优化Oracle数据库性能收藏
2009-01-21 11:35 890优化策略 为了保 ... -
Oracle Start With Connect By
2009-01-21 11:33 1572Start With Connect By 是用来实现在一个 ... -
Oracle 表空间操作收藏
2009-01-21 11:32 1009创建表空间: 1、递增 ... -
移动数据文件收藏
2009-01-21 11:32 736移动数据文件: 1、首先使要移动数据文件的表空间离线. ... -
Oracle 死锁会话处理收藏
2009-01-21 11:31 1172--查询所有的死锁: SELECT * FROM V$LOCK ... -
Oracle 9i 打开autotrace on 查看执行计划收藏
2009-01-21 11:31 13331.创建表,通过utlxplan脚本 SQL> @? ... -
如何启用sqlplus的AutoTrace功能收藏
2009-01-21 11:31 847通过以下方法可以把Autotrace的权限授予Everyone ... -
user和schema的区别:
2009-01-21 11:30 1053说穿了其实user是控制权限的,而schema是个容器,非所有 ... -
解决Oracle数据文件和日志文件丢失的问题收藏
2009-01-21 11:29 2102今天不小心误删除了数据库的数据文件和日志文件,在启动数据库时报 ... -
Oracle表段中的高水位线HWM收藏
2009-01-21 11:28 2633在Oracle数据的存储中, ... -
深入了解oracle的高水位(HWM)收藏
2009-01-21 11:26 2273说到HWM,我们首先要简要的谈谈ORACLE的逻辑存储管理.我 ... -
ORACLE 日志文件相关查询收藏
2009-01-21 11:25 11931.查询系统使用的是哪一组日志文件: select * fro ... -
ORACLE热备份恢复手册收藏
2009-01-21 11:22 2332概要 1.1. 本文的目的 为了模拟测试oracle热备份的 ... -
(转)windows命令行下启动oracle
2009-01-21 09:56 1529--总结启动命令如下: lsnrctl [start|stop ... -
小议分析函数中排序对结果的影响(一)
2009-01-12 13:24 928分析函数中经常会包括O ... -
ORACLE10g新特性——全局HASH分区索引
2009-01-12 13:23 1764在10g以前,Oracle的全局索引分区方法只有一种,即范围分 ... -
深入认识Oracle Supplemental logging
2008-12-22 18:35 3143对于有过逻辑standby,streams搭建体验的朋友,肯定 ... -
深入分析Oracle数据库日志文件
2008-12-22 15:19 1000深入分析Oracle数据库日志文件 作者:程永新 发文时间: ...
相关推荐
Oracle数据库中的“高水位”(High Water Mark, HWM)是表空间管理的一个关键概念,它对于数据库的性能和空间利用率有着深远的影响。本文将深入解析高水位的概念、作用,以及如何调整以优化存储效率。 高水位(HWM...
Oracle 高水位(High Water Mark)概念及解决问题详解 Oracle 高水位(High Water Mark)是指 Oracle 数据库中表空间的物理存储单元中的最大使用块数,超过这个点,数据库的查询效率将受到影响。Oracle 数据库的...
其中,“高水位”(High Water Mark,简称HWM)是Oracle数据库中的一个重要概念,它与表空间、段、区和块等存储结构密切相关。本篇文章将深入探讨Oracle高水位的概念、作用以及其在数据库操作中的影响。 高水位...
内容概要:本文详细介绍了 Oracle 19c 数据库中的高水位线 (High Water Mark, HWM) 概念及其操作。首先解释了 HWM 的定义和特点,随后探讨了 HWM 对全表扫描和插入操作的影响。文中通过具体的 SQL 示例,展示了如何...
Oracle 高水位线(High Water Mark,HWM)是 Oracle 段中一个重要的概念,它标志着段中已经使用的数据块的上限。在 Oracle 中,每个段(包括表、索引等)都有一个高水位线,用于记录该段已经使用的数据块的数量。 ...
在Oracle数据库中,“高水位”(High Water Mark,HWM)是一个非常重要的概念。它标记了数据表中最后一次插入、更新或删除操作的位置。简单来说,高水位线以下的空间是已经被使用过的空间,而高水位线以上的空间则是...
对于DB2数据库管理(DMS)表空间的高水位标记(HWM)是指该表空间曾经使用到的最大数据页数。如果使用:db2 list tablespaces show detail,看到某个DMS表空间的已用页数低于高水位标记,则有可能通过如下方法降低高...
HWM(High Water Mark),即高水位线,是段内的一个标记,指示了数据的最高达到位置。当数据被删除后,块虽然变为空闲,但HWM并不会自动下移,除非使用`ALTER TABLE ... DEALLOCATE UNUSED`命令。HWM的存在影响了...
在 Oracle 数据的存储中,可以把存储空间想象为一个水库,数据想象为水 库中的水。水库中的水的位置有一条线叫做水位线,在 Oracle 中,这条线被称为`高水位线(High-warter mark, HWM)
在Oracle数据库中,高水位(High Water Mark, HWM)是衡量表数据存储位置的一个关键概念。它标识了表中数据曾经达到的最高存储位置。每当向表中插入、更新或删除数据时,Oracle数据库会自动管理数据的存储位置。值得...
【HWM14高层大气风场模式】是用于模拟和预测地球高层大气风场的模型,它是HWM(水平风场模型)系列的最新发展。HWM系列模型自上世纪70年代以来一直被广泛应用于空间天气研究和预报,对理解和预测空间环境中的动态...
内容表空间高水位标记(HWM)为什么要降低高水位标记在9.7以前如何降低高水位标记9.7降低高水位标记的新功能总结参考资料表空间高水位标记(HWM)高水位标记是一个应用广泛的术语,在很多的场合都会使用到,一般用以...
《中性大气风场模型(HWM14)解析与应用》 中性大气风场模型,简称HWM,是地球物理学中用于描述在中性大气层(即非电离层)内风速和风向分布的重要理论工具。HWM14是2014年更新的一个版本,它为科学家和工程师提供...
在Oracle数据库管理领域,“高端水位”(High Water Mark,简称HWM)是一个关键概念,它涉及到数据库的逻辑存储结构、数据管理以及性能优化。理解Oracle的高端水位对于数据库管理员(DBA)和开发人员至关重要,因为它...
Oracle数据库的存储管理和性能优化是DBA们关注的重点,其中FreeList和High Water Mark (HWM)是两个关键概念,它们对于理解Oracle的数据块管理、内存利用率和SQL性能至关重要。 FreeList是Oracle用来管理未分配存储...
heavySyncProcessing ( ) , sink)HighWatermark(hwm,lwm [,group])=>通过超前读至多到高水位标记( hwm )和至少低水位标记( lwm ) hwm默认〜10, lwm默认为0。 group选项指示缓冲区应作为数组整体发出。 这
hwm
Oracle 10g 的 High Water Mark (HWM) 是数据库管理中的一个重要概念,它定义了表中已使用存储空间和未使用存储空间的边界。理解HWM的工作原理及其对性能的影响是优化Oracle数据库的关键。 HWM 在逻辑存储管理中...