Oracle delete和truncate对高水位(HWM)的影响详细解析

在讨论高水位之前需要明确一下oracle的逻辑存储的概念:Block、extent、segment、tablespace
block:块的概念,他是oracle最小的一个存储单元,一般为8K,也是一次io的最基本操作单位。
extent:区的概念,他是由一组连续的block组成的,他是oracle空间分配的基本单位。
segment:段的概念,是有一系列extent组成的,一般说你创建一个对象时,会分配一个段给这个对象,所以我们都会抽象一个表或者一个索引为一个表段或者索引段。
tablespace:包含段,区及块,表空间的数据物理上存储在数据文件里。

oracle段上的HWM是一个标记,标记已经有多少没有使用的数据库分配给这个segment。原则上HWM智慧增加,不会缩小,即使将表的数据全部删除,HWM还是原来的值。truncate命令,会重置HWM为0.

1、讲完了oracle的逻辑存储的概念,接下来我们来模拟创建一张表,并且不插入数据,看看他分配了多少个数据块。
SQL> create table tt(id number);
Table created.
SQL> select segment_name,segment_type,blocks from user_segments where segment_name = 'TT';
no rows selected
我们惊奇的发现在user_segments视图里面是查不到这张表的,这里就引出了11GR2版本的延迟段创建,官方的解释如下:
The initial segment creation for nonpartitioned tables and indexes can be delayed until data is first inserted into an object.
因为很多数据库都有存在空表的情况,较多的空表会占用大量的磁盘空间,所谓延迟段创建,顾名思义就是在创建一张新空表的时候,ORACLE默认不会为这张空表分配段(SEGMENTS),也就是不会为这张空表分配空间,这样就避免了空表占用空间的情况

2、然后我们向这张TT表里插入10000条数据
declare
i number;
begin
for i in 1..10000 loop
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值