`

Oralce HWM的一点分析

 
阅读更多
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

 

 

---1.创建测试表
CREATE TABLE T1 TABLESPACE TEST AS SELECT * FROM DBA_OBJECTS;

--2 查询segment 头块
SQL> SELECT HEADER_FILE,HEADER_BLOCK FROM DBA_SEGMENTS WHERE SEGMENT_NAME = 'T1';

HEADER_FILE HEADER_BLOCK
----------- ------------
         22          795

--3 DUMP segment 头块

ALTER SYSTEM DUMP DATAFILE 22 BLOCK 795;

--4 查看结尾为2492的trace文件 (ORAHOME\product\10.2.0\admin\orcl\udump)

SELECT SPID
  FROM V$PROCESS
 WHERE ADDR = (SELECT PADDR
                 FROM V$SESSION
                WHERE SID = (SELECT DISTINCT SID FROM V$MYSTAT));
SPID
------------
2492

--HWM 为 0x058008fb
Highwater::  0x058008fb   

--5 计算HWM 对应的文件编号和块
SQL> SELECT DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(TO_NUMBER('058008FB','XXXXXXXX')) AS HWM_FILEID FROM DUAL;

HWM_FILEID
----------
        22

SQL> SELECT DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(TO_NUMBER('058008FB','XXXXXXXX')) AS HWM_BLOCKID FROM DUAL;

HWM_BLOCKID
-----------
       2299
       
--6. 分析表,查看sgemnt空块的数及最大使用的Block ID
SQL> SELECT FILE_ID,MIN(BLOCK_ID),MAX(BLOCK_ID+BLOCKS) FROM DBA_EXTENTS WHERE SEGMENT_NAME='T1' GROUP BY FILE_ID;

   FILE_ID MIN(BLOCK_ID) MAX(BLOCK_ID+BLOCKS)
---------- ------------- --------------------
        22           793                 2313
        
ANALYZE TABLE T1 COMPUTE STATISTICS;

SQL> SELECT EMPTY_BLOCKS FROM DBA_TABLES WHERE TABLE_NAME = 'T1';

EMPTY_BLOCKS
------------
          14
SQL> SELECT 2313 -14 FROM DUAL;--等于HWM_BLOCKID

   2313-14
----------
      2299
--7.记录下delete数据前count(*)的统计信息
SQL> set autotrace traceonly;
SQL> select count(*) from T1;


执行计划
----------------------------------------------------------
Plan hash value: 3724264953

-------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |
-------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |   169   (2)| 00:00:03 |
|   1 |  SORT AGGREGATE    |      |     1 |            |          |
|   2 |   TABLE ACCESS FULL| T1   | 53176 |   169   (2)| 00:00:03 |
-------------------------------------------------------------------


统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        739  consistent gets
          0  physical reads
          0  redo size
        410  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

--8 删除数据
SQL> set autotrace off;
SQL> select count(*) from T1;

  COUNT(*)
----------
     53176
     
SQL> delete T1 where rownum <= 30000;

已删除30000行。

SQL> COMMIT;

提交完成。

--9 重新dump 数据头,发现Highwater仍然是原来的值。说明DELETE 并不能使HWM下降。
ALTER SYSTEM DUMP DATAFILE 22 BLOCK 795;

Highwater::  0x058008fb

--10. 分析删除数据后,count(*)的统计信息,发现执行的消耗与删除前一样。739个逻辑读
SQL> set autotrace on;
SQL> select count(*) from T1;

  COUNT(*)
----------
     23176


执行计划
----------------------------------------------------------
Plan hash value: 3724264953

-------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |
-------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |   169   (2)| 00:00:03 |
|   1 |  SORT AGGREGATE    |      |     1 |            |          |
|   2 |   TABLE ACCESS FULL| T1   | 23176 |   169   (2)| 00:00:03 |
-------------------------------------------------------------------


统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        739  consistent gets
          0  physical reads
          0  redo size
        410  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed


 

分享到:
评论

相关推荐

    Oracle Freelist和HWM原理及性能优化

    Oracle的Freelist(自由列表)和HWM(高水位线)是数据库管理中的关键概念,它们直接影响到数据存储的效率和SQL查询性能。本文将深入解析这两个概念及其原理,并探讨相关的性能优化策略。 首先,Oracle的Freelist是...

    Oracle 高水位概念(hwm)

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

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

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

    Oracle 10g HWM原理及性能优化.pdf

    在讨论Oracle 10g中的高水位标记(HWM)原理及性能优化策略之前,我们首先要了解HWM是什么以及它在Oracle数据库中的作用。HWM是Oracle数据库中用于区分数据段中已使用块和未使用块的界限。在全表扫描操作中,Oracle...

    HWM14高层大气风场模式

    使用者可能需要这些文件来运行和分析模型,理解高层大气风场的动态特性,或者将模型结果与其他观测数据或模型进行比较验证。 HWM14的应用广泛,不仅在学术研究中用于探索大气动力学和空间天气现象,如极光、热层...

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

    5. **定期分析**:通过ANALYZE TABLE命令定期分析表的统计信息,可以帮助Oracle更准确地估算空间需求,从而避免不必要的空间分配。 6. **优化INSERT操作**:避免一次性插入大量数据,可以减少高水位的快速上升,使...

    Oracle 10g HWM原理及性能优化

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

    HWM14_风场_中性大气_

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

    Oracle数据文件收缩实例

    在这个实例中,我们将探讨Oracle的存储管理,特别是FreeList的作用,以及如何通过理解High Water Mark (HWM)来有效地进行数据文件收缩。 FreeList是Oracle用于管理空闲块的数据结构,它跟踪在表段中未分配的空闲...

    oracle高水位线

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

    oracle高水位.txt

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

    ORACLE 空闲空间管理 PDF

    ### Oracle空闲空间管理 #### 引言 在Oracle数据库管理中,空闲空间的有效管理对于提高数据库性能至关重要。Oracle数据库在9.2.0版本以前主要采用链表(Freelist)的方式管理空闲空间,但这种方式存在着串行访问...

    oracle-sql

    这在分析层次结构中非常有用,可以轻松识别出最底层的节点。 3. **CONNECT_BY_ROOT 伪列**: 同样在Oracle 10g中引入,`CONNECT_BY_ROOT`用于返回当前层级的根节点的值。例如,在给定的示例中,`CONNECT_BY_ROOT ...

    hwm.dll

    hwm

    Oracle的执行计划--上

    在执行全表扫描时,Oracle会从表的头部读取数据直至高水位线(HWM),即使表中的数据已被删除也是如此。值得注意的是,`TRUNCATE`操作可以清除表的所有数据,并将HWM重置到表的头部,从而在下一次执行全表扫描时减少...

    /* append*/ oracle append 知识点

    - **Free Block 的使用:** Append 模式下的插入操作不会去寻找表中的 free block,而是直接在 High Water Mark (HWM) 上添加数据。这意味着新插入的数据将被放置在表的最后,而不是填充已存在的空闲空间。 ##### 4...

    个人收集的oracle面试题目.pdf

    10. Oracle数据库高水位线(HWM):文档提到了HWM的概念,这是Oracle数据库中用来指示数据块中数据所占用的最高位置。HWM通常在删除表数据时不会下移,因此合理管理HWM可以避免磁盘空间浪费。 11. Oracle数据库的...

Global site tag (gtag.js) - Google Analytics