oracle 表因为update 大长度字段,导致表空间增长过快问题,高手请进

duanzhh 2011-06-29 12:30:24
目前工作中有一张海量数据库表,在初始insert的时候,其中一个字段为空,其类型为varchar2(2048),当后续这条记录被处理

后,需要update这个字段,而且这个字段值比较大,当然最大小于2048.然后就出现表空间增长过快问题了。偏离实际太大,

因为这个表所有字段长度加起来,然后乘以总记录条数,远远小于增长的表空间。不知道是什么原因造成的。


另外今天在测试的时候,我发现若将该字段类型改为clob,在初始insert的时候,插入同样的记录条数以及字段值。该字段初

始为空,clob类型的表耗用表空间是varchar类型表空间的2倍,但我若update该字段值,clob类型的表耗用表空间

却又比varchar类型的表少了1/3左右。

很不明白,麻烦高手给予解释,若是这种情况,我是不是将该字段改为clob类型,就比

较合理了?
...全文
653 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
duanzhh 2011-07-18
  • 打赏
  • 举报
回复
已经解决,是由于一个ORACLE BUG引起
BenChiM888 2011-07-06
  • 打赏
  • 举报
回复
这要和下面两个参数关系了:
PCTUSED 简单讲就是留给系统insert 的数据块空间比例
PCTFREE 简单讲就是留给系统update 的数据块空间比例

当你update 后的字段,pctfree 预留的空间不足以放下的时候,oracle就会开辟新的空间存储数据,然后在原有位置增加一个指向新位置的指针,无形之中占用空间会变大。

--解决方法,可以试一下将发生行迁移的数据 取消行迁移
1、先建表
利用 D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlchain.sql 创建 CHAINED_ROWS 表
2、分析表里面产生行连接的数据
analyze table table_name chained rows into CHAINED_ROWS;
经过分析后产生行连接的数据的rowid 就会存储在 CHAINED_ROWS 表中
3、将这些rowid对应的数据备份出来,然后删除原表中rowid对应的数据,再把备份的数据插回原表。

经过上面的处理,一般就会把行迁移的情况处理掉了。
iqlife 2011-07-06
  • 打赏
  • 举报
回复
varchar2(2048) 进行更新的时候会检查是否是否足够的空间进行更新,如果段剩余空间不够就会开辟新的空间,看看PCTUSED和PCTFREE的参数是多少,还有快大小的参数
kingwinerscxp 2011-07-01
  • 打赏
  • 举报
回复
clob与表存在一个表空间的么?
另外看一下你的extent扩展方式是什么,大小是多少?

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧