Truncate Table的时候不管是用drop storage 或reuse storage都会将HWM重新设置到第一

A, B 为两个Table .
A, B 的数据分别放在 erp_data  表空间下  
A, B 的索引分别放在 erp_indx  表空间下   

那么
我们使用下面的两个语句删除两个表中的数据
Truncate table A  drop    storage  ;  
Truncate table B  reuse  storage  ;   

得到的结果将是:

Truncate table A  drop    storage  ;  
--data :   数据部分所在的extent 空间会被释放(释放回收到 minextents
             个extent),腾出来的空间可以供其它segment 使用 。
--index :  B表的index部分会数据删除,extent部分也被释放,剩下第一个extent
--hwm :   会将HWM重新设置到第一个Block的位置(hwm会改变).

Truncate table B  reuse  storage  ;   
--data :   数据部分所在的extent 空间不会被回收(仅仅数据会被删
       除),数据删除之后的freespace 空间只能供本表使用,不可
       以供其它 segment 使用 。   
--index :  B表的index部分会数据删除,但是保留extent 部分
--hwm :   会将HWM重新设置到第一个Block的位置(hwm会改变).

 

1、测试开始,建两张表A,B及相应的索引inx_A,idx_B

SQL> show user

USER is "QIUYB"

SQL> create table A (col number);

Table created.

SQL> insert into A values(1);

1 row created.
SQL> insert into A select * from A;
1 row created.

SQL> /
2 rows created.

SQL> /

4 rows created.

SQL> /

8 rows created.

SQL> /

16 rows created.

SQL> /

32 rows created.

SQL> /
64 rows created.

SQL> /

128 rows created.

SQL> /

256 rows created.

SQL> /

512 rows created.

SQL> /

1024 rows created.

SQL> /
2048 rows created.

SQL> /
4096 rows created.

SQL> /
8192 rows created.

SQL> /
16384 rows created.

SQL> /

32768 rows created.

SQL> /

65536 rows created.

SQL> commit;

Commit complete.

SQL> create table B as select * from A;

Table created.

SQL> create index idx_A on A(col);

Index created.

SQL> create index idx_B on B(col);

Index created.

2、查看一下这四个段对于extent的使用。

SQL> select segment_name,extent_id,bytes 

  2   from user_extents 

  3   where segment_name like '%A%' OR segment_name like '%B%'    

  4   order by 1,2

  5  /

SEGMENT_NA  EXTENT_ID      BYTES
---------- ---------- ----------
A                   0      65536
A                   1      65536
A                   2      65536
A                   3      65536
A                   4      65536
A                   5      65536
A                   6      65536
A                   7      65536
A                   8      65536
A                   9      65536
A                  10      65536
A                  11      65536
A                  12      65536
A                  13      65536
A                  14      65536
A                  15      65536
A                  16    1048576
B                   0      65536
B                   1      65536
B                   2      65536
B                   3      65536
B                   4      65536
B                   5      65536
B                   6      65536
B                   7      65536
B                   8      6553
B                   9      65536
B                  10      65536
B                 11      65536
B                  12      65536
B                  13      65536
B                  14      65536
B                  15      65536
B                  16    1048576
IDX_A               0      65536
IDX_A               1      65536
IDX_A               2      65536
IDX_A               3      65536
IDX_A               4      65536
IDX_A               5      65536
IDX_A               6      65536
IDX_A               7      65536
IDX_A               8      65536
IDX_A               9      65536
IDX_A              10      65536
IDX_A              11      65536
IDX_A              12      65536
IDX_A              13      65536
IDX_A              14      65536
IDX_A              15      65536
IDX_A              16    1048576
IDX_A              17    1048576
IDX_B               0      65536
IDX_B               1      65536
IDX_B               2      65536
IDX_B               3      65536
IDX_B               4      65536
IDX_B               5      65536
IDX_B               6      65536
IDX_B               7      65536
IDX_B               8      65536
IDX_B               9      65536
IDX_B              10      65536
IDX_B              11      65536
IDX_B              12      65536
IDX_B              13      65536
IDX_B              14      65536
IDX_B              15      65536
IDX_B              16    1048576
IDX_B              17    1048576

70 rows selected.

3、查看A,B表的HWM,计算公式HWM=total_blocks-empty_blocks,可以看到A,B的HWM分别为232,168
SQL> analyze table A compute statistics;
Table analyzed.

SQL> analyze table B compute statistics;
Table analyzed.  

SQL> col table_name format a10

SQL> SELECT TABLE_NAME,blocks,empty_blocks,blocks-empty_blocks hwm
  2   FROM user_tables 
  3   WHERE table_name IN ('A','B')
  4  /

SQL> set pagesize 10 
SQL> /

TABLE_NAME     BLOCKS EMPTY_BLOCKS        HWM
---------- ---------- ------------ ----------
A                 244           12        232
B                 212           44        168

4、以DROP STORAGE,REUSE STORAGE两种选项对A,B做不同的操作看差别

SQL> truncate table A DROP STORAGE;

Table truncated.

SQL> truncate table B REUSE STORAGE;
Table truncated.

SQL> SET PAGESIZE 300

SQL> select segment_name,extent_id,bytes 

  2    from user_extents 

  3   where segment_name like '%A%' OR segment_name like '%B%'    

  4   order by 1,2

  5  /

SEGMENT_NA  EXTENT_ID      BYTES
---------- ---------- ----------
A                   0      65536
B                   0      65536
B                   1      65536
B                   2      65536
B                   3      65536
B                   4      65536
B                   5      65536
B                   6      65536
B                   7      65536
B                   8      65536
B                   9      65536
B                  10      65536
B                  11      65536
B                  12      65536
B                  13      65536
B                  14      65536
B                  15      65536
B                  16    1048576
IDX_A               0      65536
IX_B               0      65536
IDX_B               1      65536
IDX_B               2      65536
IDX_B               3      65536
IDX_B               4      65536
IDX_B               5      65536
IDX_B               6      65536
IDX_B               7      65536
IDX_B               8      65536
IDX_B               9      65536
IDX_B              10      65536
IDX_B              11      65536
IDX_B              12      65536
IX_B              13      65536
IDX_B              14      65536
IDX_B              15      65536
IDX_B              16    1048576
IDX_B              17    1048576

37 rows selected.

可以看到A表本身及其索引idx_A的extent都是释放的,都保留到第一个extent。
SQL>  analyze table A compute statistics;

Table analyzed.

SQL> analyze table B compute statistics;

Table analyzed.

SQL> SELECT TABLE_NAME,blocks,empty_blocks,blocks-empty_blocks hwm

  2  FROM user_tables 

  3  WHERE table_name IN ('A','B')

  4  /

TABLE_NAME     BLOCKS EMPTY_BLOCKS        HWM
---------- ---------- ------------ ----------
A                   0            8         -8
B                   0          256       -256

可以看到两个表的hwm都回到了第一个block。  

<B

时间: 2024-09-25 21:51:27

Truncate Table的时候不管是用drop storage 或reuse storage都会将HWM重新设置到第一的相关文章

Oracle大表清理truncate .. reuse storage

最近需要清理一张大表,要求不能影响性能.在MySQL里边我们可以通过借助coreutils以及硬链接的方式来最小化I/O,Oracle也可以通过分批次回收空间来最小化I/O,到底如何,下面我们拭目以待. 一.TRUNCATE TABLE 语法 TRUNCATE TABLE [schema_name.]table_name [ PRESERVE MATERIALIZED VIEW LOG | PURGE MATERIALIZED VIEW LOG ] [ DROP STORAGE | REUSE

drop与truncate table 的区别*

我们先把上一篇的文章讲完:http://blog.csdn.net/changyanmanman/article/details/7767378 是这样的:truncate先把原来的表重新命名一下,所以,就像我们之前测试的OBJECT_ID 是不会变化的.又重新创建了一个表,这个表的名字和被truncate的表的名字相同,但是他的段(也可以说地址)必定发生变化,所以又出现了新的data_object_id.这个表是没有内容的,只有这个表的定义. truncate不会产生大量的roolback,不

mysql中TRUNCATE TABLE 语句用法详解

TRUNCATE TABLE删除表中的所有行,而不记录单个行删除操作. 语法    TRUNCATE TABLE name; 参数    name(是要截断的表的名称或要删除其全部行的表的名称) TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少. DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项.TRUNCATE TABLE

[20111228]9i?临时表and truncate table.txt

[20111228]9i?临时表and truncate table.txt 这个问题以前遇到,今天再一次遭遇,把它写下来. 1.测试环境:SQL> select * from v$version ; BANNER----------------------------------------------------------------Oracle9i Enterprise Edition Release 9.2.0.8.0 - ProductionPL/SQL Release 9.2.0.

SQL SERVER truncate table后会不会重置表的自增值

今天清理业务库数据的时候,开发人员说可以使用truncate table把两个表的所有数据清理掉 这两个表都有自增ID,都做了表分区,单表200GB,使用 SELECT IDENT_CURRENT('') 的时候两个表 的当前自增值是3000012,这两个表几乎是一模一样的,除了一两个字段不一样 我执行两个SQL语句把两个表都truncate掉,然后就忘记了收缩数据库和重置种子值 由于分区函数的最后一个值是2000000,那么后插入的数据都会积聚在最后一个文件组 1.重置种子值,让数据重新利用第

请问:mysql delete 很少的数据,用时要比TRUNCATE TABLE快呢?

问题描述 请问:mysql delete 很少的数据,用时要比TRUNCATE TABLE快呢? 如题; TRUNCATE TABLE 0.3S DELETE TABLE XX ;//数据量越少越快.100条不到100毫秒. 解决方案 http://www.jb51.net/article/31243.htm

INITIAL参数设置导致TRUNCATE TABLE不能降低高水位线案例

在一个数据库使用下面SQL找出了一批需要降低高水位线的表,其中有几个表没有数据,于是我打算用TRUNCATE来降低高水位线HWM SELECT a.owner,        a.segment_name,        a.segment_type,        a.tablespace_name,        a.blocks              "real block",        a.bytes / 1024 / 1024 "realSizeMB&quo

Oracle Truncate table原理:ASSM的三级位图实践解析

assm三级位图可以说是dba的基础技能知识了,这里用测试的方法验证下三级位图的原理. 1.建立实验环境所需要的表 SQL> create tablespace a1 datafile '/oracle/app/oracle/oradata/ora11/a1.dbf' size 20m;    Tablespace created.                                                                    SQL> create us

delete from 表名与truncate table 表名区别_MsSql

1.delete不能使自动编号返回为起始值.但是truncate能使自动增长的列的值返回为默认的种子 2.truncate只能一次清空,不能按条件删除.但是delete可以按条件清除部分记录. 3.truncate清空数据表性能(速度)比delete快. 4.truncate不会记录到系统日志,不会触发delete触发器.