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", 

       b.last_analyzed, 

       b.num_rows 

FROM   dba_segments a, 

       dba_tables b 

WHERE  a.owner = b.owner 

       AND a.segment_name = b.table_name 

       AND B.partitioned = ‘NO‘ 

       AND b.num_rows < 5000 

       AND a.blocks > 1000 

       AND a.bytes / 1024 / 1024 > 500 

ORDER  BY 6 DESC 

我们先看看其中一个表的空间使用情况,如下所示,结果我对该表执行了TRUNCATE后,发现高水位线HWM根本没有变化

SQL> exec show_space(‘INV_MONTH_END_LOCATION‘, ‘INVENTORY‘);
Unformatted Blocks .....................               0

FS1 Blocks (0-25)  .....................               0

FS2 Blocks (25-50) .....................               0

FS3 Blocks (50-75) .....................               0

FS4 Blocks (75-100).....................               0

Full Blocks        .....................               0

Total Blocks............................         434,176

Total Bytes.............................   3,556,769,792

Total MBytes............................           3,392

Unused Blocks...........................         434,142

Unused Bytes............................   3,556,491,264

Last Used Ext FileId....................              40

Last Used Ext BlockId...................               9

Last Used Block.........................              34

 

PL/SQL procedure successfully completed.

 

SQL> exec show_space(‘INV_MONTH_END_LOCATION‘, ‘INVENTORY‘);

Unformatted Blocks .....................               0

FS1 Blocks (0-25)  .....................               0

FS2 Blocks (25-50) .....................               0

FS3 Blocks (50-75) .....................               0

FS4 Blocks (75-100).....................               0

Full Blocks        .....................               0

Total Blocks............................         434,176

Total Bytes.............................   3,556,769,792

Total MBytes............................           3,392

Unused Blocks...........................         434,142

Unused Bytes............................   3,556,491,264

Last Used Ext FileId....................              40

Last Used Ext BlockId...................               9

Last Used Block.........................              34

 

PL/SQL procedure successfully completed.

当时傻眼了,难道我搞错了, 难道TRUNCATE不会释放存储空间,降低高水位线?于是查了一下资料,确认TRUNCATE会释放存储空间,降低高水位线。那么问题出在哪里呢?于是我对该表重新收集了一下统计信息后发现依然如此

SQL> exec dbms_stats.gather_table_stats(‘INVENTORY‘,‘INV_MONTH_END_LOCATION‘, cascade=>true);
 

PL/SQL procedure successfully completed.

最后我生成了创建该表的SQL语句,终于发现了问题。如下截图所示。initial与next决定创建segment及扩展segment,initial表示初始化时分配给该表的段大小为3,556,769,792Byte。也就是3392MB。但是已经不知道当时谁建表示设定了这个参数,于是只能DROP掉这个表,然后修改该参数重新创建该表。

另外,如果是这个情况下,使用ALTER MOVE也是不能释放表空间,降低高水位线的。切记切记。

时间: 2024-10-19 13:17:14

INITIAL参数设置导致TRUNCATE TABLE不能降低高水位线案例的相关文章

jdbc autoReconnect=true 参数设置导致 slow log 爆表。

1.过程 同事按照文档上配置了下面的jdbc url: jdbc:mysql://ip:port/db?autoReconnect=true&useUnicode=true&characterEncoding=utf-8 结果导致了 mysql slow log 出现了满屏的 ping 命令, # [email protected]: db[db] @ [ip] # Query_time: 0.000017 Lock_time: 0.000000 Rows_sent: 0 Rows_exa

阿里云RDS-MYSQL数据库参数设置,K哥

2016.9.2 最近被阿里云的数据库要搞疯掉了 自打阿里云抽风,非要取消myisam引擎,都换成innodb 没事总是主备切换,也没有错误日志 一问客服就是物理机波动,擦,波动是什么???????? 服务器自己跳舞了吗 看了看参数设置,很多都不知道 这两天有时间自己搜索整理了下 发给大家,有需要的看看 我的服务器应用主要是WEB网站服务 有一些不懂的地方或者不对的地方,还请大牛不吝赐教! 回复在评论中就可以了,thank you 我是K哥 auto_increment_offset表示自增长字

x264的一些参数设置对编码效率的影响

i_luma_deadzone[0]和i_luma_deadzone[1]分别对应inter和intra, 取值范围1~32,测试可以得知,这连个参数的调整可以对数据量有很大影响,值越大数据量相应越少,占用带宽越低; 码率控制模式有ABR(平均码率).CQP(恒定质量).CRF(恒定码率) ABR模式下调整i_bitrate, CQP下调整i_qp_constant调整QP值,范围0~51,值越大图像越模糊,默认23 太细致了人眼也分辨不出来,为了增加编码速度降低数据量还是设大些好, CRF下调

关于 truncate table 的一点学习札记

---下面整理笔记来之 itpub 的各位前辈的语录.这里做了一个汇总.仅供学习. truncate table后,oracle会回收表和其表中所在的索引到initial 大小,也就是初始分配的segments大小 truncate和drop一样都是ddl语句, 操作马上生效,原数据不放到rollback segment中,不能回滚 truncate table运行非常慢可能有下面几个原因: 首先要明确truncate table是DDL操作.会重置HWM. 1.查看是不是DML操作锁定了某些记

java jvm内存管理/gc策略/参数设置

1. JVM内存管理:深入垃圾收集器与内存分配策略 http://www.iteye.com/topic/802638 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项技术当做Java语言的伴生产物.事实上GC的历史远远比Java来得久远,在1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言.当Lisp还在胚胎时期,

Truncate table、Delete与Drop table的区别

Truncate table.Delete与Drop table的区别 TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少. DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项.TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放. TRUNCATE TABLE 删除表中的所有行

tomcat中jvm参数设置

Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对JavaJVM有关内存方面的知识进行详细介绍. 一.Java JVM内存介绍 JVM管理两种类型的内存,堆和非堆.按照官方的说法:"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.""在JVM中堆之外的内存称为非堆内存(Non-heap m

hbase-site.xml 参数设置

1 <?xml version="1.0"?> 2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 3 <!-- 4 /** 5 * Copyright 2009 The Apache Software Foundation 6 * 7 * Licensed to the Apache Software Foundation (ASF) unde

转载的 jvm 内存参数设置

转载 : http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html JVM系列三:JVM参数设置.分析 不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM.GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工作效率.但是调整GC是以个极为复杂的过程,由于各个程序具备不同的特点,如:web和GUI程序就有很大区别(Web可以适