这是杂货铺的第440篇文章

一位朋友问了个问题,

Oracle中,undo是保存记录的前镜像的,我理解如果delete from t;那产生的undo应该和t表的大小差不多,但测试结果却差的很远,undo产生的量基本上是t表大小的两倍,不知道为什么,难道我理解错了?

从原理上讲,UNDO表空间,有四个作用:

1. 回滚事务;

2. 一致性读;

3. 事务恢复;

4. 闪回查询

对于回滚事务,他保存的是修改值的前镜像,注意,不是修改的数据块,或者整行记录的镜像。

创建测试表t_undo,向其中插入1000万条记录,没有索引、没有约束、没有任何触发器,容量168MB,UNDO表空间剩余的容量是4304.51MB,

执行delete删除操作,但是不提交事务,

P.S. 用的是测试库,再执行delete的时候,确保无其他事务在执行,

此时,UNDO表空间剩余的容量是3040.51MB,和删除之前相比,UNDO表空间减少了1264MB,

一张164MB的表,删除的时候,竟然占用了1264MB的UNDO表空间?如果按照原理看,UNDO中至少要存储这张表168MB的容量,多出来的容量,存储的是什么?

请教杨长老得到的一些信息,

除了考虑表大小之外,还有表上索引的总大小,是否存在触发器,物化试图日志等等。另外,看看数据库级的supplemental log是否打开。

undo是记录事物修改前镜像的,而delete的前镜像就是表中存储的数据。当然有一些可能会导致前镜像比表中的原始数据大,比如压缩,11g后存在的非空默认值。

另外,undo的记录一定有一些额外的成本,比如rowid,scn等信息,如果表中行记录本身很小,那么这些成本就会显得非常突出。

如果要非常精确地知道,多出来的每一个信息是多少,确实有些困难,但通过这个实验,至少能了解到,一次delete操作删除的容量,UNDO为了保存前镜像,需要占据的容量,要比他多得多,这就是为什么不推荐一次delete操作删除过多数据的原因之一。

delete操作对UNDO表空间容量的冲击相关推荐

  1. [Oracle]理解undo表空间

    [Oracle]理解undo表空间 一.回退段介绍 在Oracle数据库中,当某个事物对数据进行修改时,Oracle首先将数据的原始值保存到一个回退段中.一个事物只能将它的回退信息保存到一个回退段中, ...

  2. oracle 10g磁盘管理,Oracle 10g UNDO表空间过大导致磁盘空间不足的解决

    在Oracle 10g数据库的应用中,出现了UNDO表空间过大导致磁盘空间不足而崩溃的现象(ORA-30036: unable to extend segment by 8 in undo table ...

  3. MySQL5.7新特性——在线收缩undo表空间 (转载)

    在查找到很多资料中,以下文章是 对于参数 innodb_undo_log_truncate 说明最为简明的一篇文章了,这里做一转载. (原文: https://www.linuxidc.com/Lin ...

  4. Oracle数据库 ORA-01555 快照过旧 (undo表空间:撤销表空间)

    UNDO表空间用于存放UNDO数据,当执行DML操作时,oracle会将这些操作的旧数据写入到UNDO段,以保证可以回滚或者一致读等,而临时表空间主要用来做查询和存放一些缓冲区数据.你听说UNDO也是 ...

  5. oracle如何添加undo,ORACLE RAC 11G 添加以及删除UNDO表空间

    在生产环境上,由于闪存盘的容量有限,现在需要将闪存盘里面的UNDO表空间,替换到非闪存的磁盘里面. 磁盘的使用情况如下: 表空间使用情况如下: RAC两个节点占用将近167G的空间. 操作步骤如下: ...

  6. oracle 扩容undo,某银行积分系统数据库RAC环境扩充undo表空间

    环境: 当前数据库版本oracle 10.2.0.5 ,两节点RAC环境 OS aix 6.1 HACMP5.5 UNDO表空间用于存放UNDO数据,当执行DML操作(insert.update.de ...

  7. oracle 10g undo 管理,Oracle 10g undo表空间管理

    一.oracle 9i起,有两种undo管理方式:AUM Automatic Undo ManagementMUN Manual Undo Management建议使用 AUM ,下面只讨论AUM 一 ...

  8. UNDO表空间损坏,爆满,ORA-600[4194]/[4193]错误解决

    模拟手工删除UNDO表空间 在ORADATA 中把UNDOTBS01.DBF 删除 模拟启库 SQL> STARUP; * 第 1 行出现错误: ORA-01157: 无法标识/锁定数据文件 2 ...

  9. undo表空间文件丢失恢复(4)--无备份无recover的情况下恢复

    undo表空间的数据文件丢失,如果没有备份的情况下,而且丢失的undo文件可以置为offline状态后(注意是offline不是recover状态),则可以如下恢复,下边给出一个例子. undo表空间 ...

  10. Oracle undo 表空间管理

    Oracle 的Undo有两种方式: 一是使用undo 表空间,二是使用回滚段. 我们通过 undo_management 参数来控制使用哪种方式,如果设为auto,就使用UNDO 表空间,这时必须要 ...

最新文章

  1. 方差协方差以及协方差矩阵
  2. java继承机制实验报告_JAVA继承实验报告.doc
  3. 我XXXX!!!够了!!!从github拉到dockerhub,再用daocloud加速下载
  4. 反思深度思考:不无脑的行动 有脑的持久行动
  5. new子类会先运行父类的构造函数
  6. 醒醒吧!送给那些盲目自学的人
  7. 【Http】PKIX(PKIX path building failed) 问题 unable to find valid certification path to requested target
  8. pycharm如何修改文件名
  9. Android开发 MediaPlayer入门_播放本地视频
  10. android 名称解释
  11. 分享5个最好的在线wap浏览器|wap浏览器软件
  12. Elite Software DuctSize v6.01.224 1CD(风管测算软件)
  13. html写樱花树,写樱花树的作文
  14. 安装rpm包时提示错误:依赖检测失败
  15. Python练习:每月乘坐地铁费用
  16. 基于RFID的简易图书管理系统设计与实现
  17. 苹果电脑如何修改服务器文件在哪里设置,电脑服务器修改mac地址
  18. stm32外设-RCC
  19. Hibernate Validator 后台数据规则校验拓展
  20. python阶乘的代码_python编码阶乘

热门文章

  1. 电话按键单词问题(C/C++)
  2. luogu1725 琪露诺
  3. 软件授权文件.lic文件
  4. 新年贺卡用python_Photoshop 一张简洁的新年贺卡制作方法
  5. Python中的any函数
  6. Navicat还原nb3备份文件
  7. Linux安装杀毒软件clamav
  8. linux定时关闭系统at,『学了就忘』Linux系统管理 — 8.系统定时任务(at命令)
  9. 迅为6818/4418开发板Yocto开发指南
  10. HDC1080 驱动程序代码(C语言版)