`
trophy
  • 浏览: 176562 次
  • 性别: 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 数据的存储中,可以把存储空间想象为一个水库,数据想象为水 库中的水。水库中的水的位置有一条线叫做水位线,在 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 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表碎片整理操作步骤详解

    高水位线(HWL)下的许多数据块都是无数据的,但全表扫描的时候要扫描到高水位线的数据块,也就是说oracle要做许多的无用功!因此oracle提供了shrink space碎片整理功能。对于索引,可以采取rebuild online的方式...

    Oracle Freelist和HWM原理及性能优化

    本文以FreeList为线索对Oracle的存储管理的原理进行较深入的探讨,涉及Oracle段区块管理的原理,FreeList算法等

    Oracle全表扫描及其执行计划

    全表扫描是Oracle访问数据库表是较为常见的访问方式之一。很多朋友一看到SQL语句执行计划中的全表扫描,要考虑对其进行...  扫描所有的数据块包括高水位线以内的数据块,即使是空数据块在没有被释放的情形下也会被扫

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    10.2.3 高水位线 340 10.2.4 freelists 342 10.2.5 PCTFREE和PCTUSED 345 10.2.6 LOGGING和NOLOGGING 348 10.2.7 INITRANS和MAXTRANS 349 10.3 堆组织表 349 10.4 索引组织表 352 10.5 索引聚簇表 368 10.6 ...

    Oracle编程艺术

    第 1章 开发成功的Oracle应用程序...................................................... 61 1.1 我的方法................................................................................ 63 3 / 976 1.2 ...

Global site tag (gtag.js) - Google Analytics