`
trophy
  • 浏览: 178601 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

oracle 高水位线(转)

阅读更多

高水位线实验: 
-- 创建test3表 
SQL> create table test3 as 
  2  select * from dba_objects where 1 = 2; 
Table created 
-- 查看表中分配块,区大小 
SQL> SELECT segment_name, segment_type, blocks -- 分配数据块数, extents -- 分配区块数 
  2    FROM dba_segments 
  3   WHERE segment_name = 'TEST3' 
  4  ; 
SEGMENT_NAME                                                                     SEGMENT_TYPE           BLOCKS    EXTENTS 
-------------------------------------------------------------------------------- ------------------ ---------- ---------- 
TEST3                                                                            TABLE                       8          1 
TEST3                                                                            TABLE                       8          1 
-- 分析表TEST3表 
SQL> ANALYZE TABLE TEST3 ESTIMATE STATISTICS; 
Table analyzed 
-- 查询TEST3表高水位线 
SQL> SELECT blocks -- 高水位线(占用TEST3表数据块数), empty_blocks -- TEST3表空闲块数, num_rows 
  2    FROM user_tables 
  3   WHERE table_name = 'TEST3'; 
    BLOCKS EMPTY_BLOCKS   NUM_ROWS 
---------- ------------ ---------- 
         0            7          0 
-- 因为未向TEST3表中插入任何数据,因此此表的高水位线为0,现向TEST3表中插入数据再观察 
SQL> insert into test3 
  2  select * from dba_objects; 
50361 rows inserted 
SQL> commit; 
Commit complete 
-- 重新分析表 
SQL> ANALYZE TABLE TEST3 ESTIMATE STATISTICS; 
Table analyzed 
-- 再次查看表中分配块,区大小 
SQL> SELECT segment_name, segment_type, blocks, extents 
  2    FROM dba_segments 
  3   WHERE segment_name = 'TEST3' 
  4  ; 
SEGMENT_NAME                                                                     SEGMENT_TYPE           BLOCKS    EXTENTS 
-------------------------------------------------------------------------------- ------------------ ---------- ---------- 
TEST3                                                                            TABLE                       8          1 
TEST3                                                                            TABLE                     768         21 
此时看到BLOCKS数已增长到768, 也就是Oracle分配给TEST3表768个数据块,21个区 
-- 再次查看TEST3表高水位线 
SQL> SELECT blocks, empty_blocks, num_rows 
  2    FROM user_tables 
  3   WHERE table_name = 'TEST3'; 
    BLOCKS EMPTY_BLOCKS   NUM_ROWS 
---------- ------------ ---------- 
       689           78      50361 
已增长到689个块, 还有78个空闲块,689 + 78 = 767, 比分配的少1个数据块,是因为这一个数据块是用作segment header 
-- 现将TEST3表delete,在查看高水位线 
SQL> delete from test3; 
50361 rows deleted 
SQL> commit; 
Commit complete 
SQL> ANALYZE TABLE TEST3 ESTIMATE STATISTICS; 
Table analyzed 
SQL> 
SQL> SELECT blocks, empty_blocks, num_rows 
  2    FROM user_tables 
  3   WHERE table_name = 'TEST3'; 
    BLOCKS EMPTY_BLOCKS   NUM_ROWS 
---------- ------------ ---------- 
       689           78          0 
发现此表高水位线并未减少,证明delete只是删除表中数据块的记录,但并不会使表中的高水位线下降, 在进行全表扫描时会Oracle会扫描表中高水位线下的所有数据块, 
因此数据虽然被删除了,但查询时有可能还是很慢。所以在进行大表删除时应使用truncate语句,看下面实验: 
SQL> truncate table test3; 
Table truncated 
SQL> ANALYZE TABLE TEST3 ESTIMATE STATISTICS; 
Table analyzed 
SQL> 
SQL> SELECT blocks, empty_blocks, num_rows 
  2    FROM user_tables 
  3   WHERE table_name = 'TEST3'; 
    BLOCKS EMPTY_BLOCKS   NUM_ROWS 
---------- ------------ ---------- 
         0            7          0 
现在表中高水位下降到0了, 一点心得, 记录下来。

分享到:
评论
1 楼 ostriches 2011-11-15  
很完整的例子。

相关推荐

    oracle高水位线

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

    oracle高水位.txt

    启用行移动后,当执行`ALTER TABLE SHRINK SPACE`时,Oracle会自动移动行到新的位置,从而重置高水位线。 - **收缩表空间**: ```sql ALTER TABLE table_name SHRINK SPACE; ``` 这条命令用于收缩表空间,即...

    高水位线详解

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

    浅谈ORACLE高水位线的解决方法.pdf

    浅谈ORACLE高水位线的解决方法.pdf

    Oracle 12c体系结构学习实验笔记

    Oracle 12c实验-段和高水位线.pdf Oracle 12c实验-管理表空间.pdf Oracle 12c实验-管理归档重做日志.pdf Oracle 12c实验-管理控制文件.pdf Oracle 12c实验-管理数据文件和临时文件.pdf Oracle 12c实验-管理重做日志....

    Oracle Freelist和HWM原理及性能优化

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

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    3.1.4 全扫描与高水位线 60 3.2 索引扫描访问方法 65 3.2.1 索引结构 66 3.2.2 索引扫描类型 68 3.2.3 索引唯一扫描 71 3.2.4 索引范围扫描 72 3.2.5 索引全扫描 74 3.2.6 索引跳跃扫描 77 3.2.7 索引快速...

    Oracle 表的扫描方式及连接方法

    Oracle 读取表中所有的行,扫描该表中高水位线(HWM, High Water Mark)以下的所有数据块。随着数据量的增加,高水位线会不断上涨,读取的数据块就会不断增加。在做 Delete 操作的时候,即使把表中的数据都删掉了,...

    oracle-sql

    TRUNCATE不会触发删除触发器,不保留ROLLBACK段,且会重置表的高水位线(HWM),释放表空间。但需要注意的是,TRUNCATE不能用于有外键约束的父表,且一旦执行,数据将无法恢复。 在处理大数据量的表时,TRUNCATE...

    ORACLE经典学习笔记

    - TRUNCATE命令快速且无法回滚,它重置高水位线和所有索引;DELETE命令慢一些,但支持回滚。TRUNCATE不触发DELETE触发器,也不能授予他人清空表的权限。 #### 第二章 ORACLE 卸载 本章节讲述了如何卸载Oracle...

    oracle测试题

    - **高水位线影响**:`TRUNCATE` 会重置表的高水位线 (High Water Mark, HWM),这会影响后续插入数据时的空间分配策略;而 `DELETE` 不会改变 HWM。 #### 2. Oracle常用函数 - **字符串处理函数**: - `LENGTH()`...

    Oracle数据块原理分析

    表目录区存储了数据块中所包含的数据表的相关信息,如表ID、高水位线等。这些信息对于管理和检索数据至关重要。 ##### 3. 行目录区(Row Directory) 行目录区记录了数据块中每一行数据的具体位置信息,即每个数据...

    Oracle数据库整理表碎片

    高水位是指数据段中已使用过和未使用过的数据块之间的分界线。在高水位以下的数据块曾经被使用过,而以上则是从未被使用或初始化过的空间。当进行全表扫描时,Oracle会读取高水位下的所有数据块,即使这些数据块包含...

    Oracle的执行计划--上

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

Global site tag (gtag.js) - Google Analytics