一个简单的测试:

start transaction;

insert into tb1 values(3, repeat('a', 65000),'x',1);

--commit;

rollback;

下图分别是 tb1.ibd 在插入前,回滚前,回滚后的文件大小:

有人在QQ群问:为什么回滚会导致tb1.idb的磁盘空间增大?

---------------------------------------

首先:131072-98304=163840-131072=32768

这里要存储 65000 个字符'a' ,那么字段类型应该是 text. 而 text 字段的处理是很特别的:

Each BLOB or TEXT value is represented internally by a separately allocated object. This is in contrast

to all other data types, for which storage is allocated once per column when the table is opened.

也就是说对于 text/blob 字段来说,它们是另外分配了一个专门的对象来存储,对它们的处理不会在内存中进行缓存,而是直接写入磁盘中。所以未提交时,就可以看到 tb1.idb 发生了增长。

而对于 insert 操作的 rollback,那么必须将之前插入的数据进行 delete 操作,而 delete 操作是逻辑操作,也就是设置一个标志位就行了,于是又分配了一个专门的对象来存储这个设置了删除标志的对象。于是磁盘空间增长了两次(暂时只能这么解释了...),每次都是 32768字节(2的15次方)。一旦提交或者rollback,磁盘空间就可以被回收。

为什么是 32768呢?

text的最大存储空间是 65656 个字节,每次分配的最小单位是 32768字节。

也就是 insert 和 rollback 都导致了一次 text 字段磁盘空间的增长分配,而分配的最小单位是32768.

如何你将  repeat('a',65000) 换成:  repeat('a',65535) 在进行测试,你会发现,insert 时,tb1.idb会增长65536,在执行rollback时也会导致 tb1.idb 再次增长32768。

所以应该是 rollback 会导致 text 字段另外分配一次空间,而分配的最小单位是32768。可能和 text 字段的存储结构有关系。这个需要看源码了。

----------------

测试表明,其它非 text 字段的 rollback 操作,不会导致 ibd 文件增大。

测试建表语句如下:

mysql> show create table tb1\G

*************************** 1. row ***************************

Table: tb1

Create Table: CREATE TABLE `tb1` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`webtext` text COLLATE utf8mb4_bin,

`tp` varchar(2) COLLATE utf8mb4_bin DEFAULT NULL,

`se` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

1 row in set (0.00 sec)

mysql innodb 从 ibd 文件恢复表数据

最近内部的 mysql 数据库发生了一件奇怪的事,其中有一个表 users625 突然出现问题, 所有对它的操作都报错误 数据表不存在. mysql> select count(*) from ...

Mysql ibd文件恢复指南

背景 mysql在使用的过程中,难免遇到数据库表误操作,基于此,作者亲力亲为,对mysql数据表ibd文件的恢复做以下详细的说明,对开发或者初级dba提供一定的指导作用,博客中如若存在相关问题,请指明 ...

MySQL从.ibd文件中恢复数据

首先,在MySQL命令行下执行如下命令可以查看MySQL中存放数据的位置: show global variables like "%datadir%"; 我这里的执行结果: +- ...

MySQL frm+ibd文件还原data的办法【数据恢复】

MySQL frm+ibd文件还原data的办法[数据恢复] 此方法只适合innodb_file_per_table          = 1 当误删除ibdata 该怎么办? 如下步骤即可恢复: 1 ...

【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

参考:http://my.oschina.net/sansom/blog/179116 参考:http://www.jb51.net/article/43282.htm 注意!此方法只适用于innod ...

MySQL表结构为InnoDB类型从ibd文件恢复数据

客户的机器系统异常关机,重启后mysql数据库不能正常启动,重装系统后发现数据库文件损坏,悲催的是客户数据库没有进行及时备份,只能想办法从数据库文件当中恢复,查找资料,试验各种方法,确认下面步骤可行: ...

mysql通过frm+ibd文件还原data

此方法只适合innodb_file_per_table          = 1 当误删除ibdata 该怎么办? 如下步骤即可恢复: 1.准备工作 1)准备一台纯洁的mysql环境[从启动到现在没有 ...

MYSQL数据库根据data文件中的.frm和ibd文件恢复单表数据

数据库误操作,把表的字段删除了,关键是被删除的字段的数据很重要,现在想要恢复数据,下面说说是怎么操作的. 数据库只剩.frm和.ibd文件了,按照网上的做法分如下两步来进行:一.找回表结构,二.找回数 ...

随机推荐

20155217-杨笛-c与java

命是弱者的借口,运是强者的谦词 你有什么技能比大多数人(超过90%以上)更好? 针对这个技能的获取你有什么成功的经验? 与老师博客中的学习经验有什么共同之处? 其实我经常会去想自己有什么拿得出手的优点 ...

Activiti开启SQL Log

log4j.logger.org.activiti.engine.impl.persistence.entity=trace

JAVA多线程(一)

进程与线程: 一个进程可以包含多个线程.多个线程可以并行,但是一个时间点只能有一个线程是运行状态. 线程的状态: 查看API可以,线程的状态分为五种: (JVM里面的状态:These states a ...

javascript高级程序设计---CSS操作

CSS与JavaScript是两个有着明确分工的领域,前者负责页面的视觉效果,后者负责与用户的行为互动.但是,它们毕竟同属网页开发的前端,因此不可避免有着交叉和互相配合. HTML元素的style属性 ...

Android 学习笔记之如何使用SQLite数据库来保存数据...

PS:最近一阵子都在为考试复习...坑爹的计算机网络,复习了3天,最后该不会的还是不会...明天还考英语...真蛋疼... 学习内容: 1.使用SQLite数据库来保存数据... SQLite:   ...

jxl导入/导出excel

1.jxl导入/导出excel案例,黏贴即可运行 package junit.test; import java.io.File; import java.io.IOException; import ...

ARM Cortex-M

振荡周期.时钟周期.机器周期.指令周期 一个机器周期包含12个振荡周期或6个时钟周期 指令的执行时间称作指令周期(单.双.四周期) (1)振荡周期       振荡周期指为单片机提供定时信号的振荡源的 ...

HTML高级选项卡(1)————表标签

利用上述表格属性,能够简单的创建一个表格.并随意的分割行和列.

表格的应用

IOS9.0 之后友盟分享详细过程

一: 申请友盟的AppKey(友盟的Key是根据应用的名称生成的!) 在友盟注册了你自己的开发者账号后就可以申请AppKey了.然后在这个方法里面设置Key - (BOOL)application:( ...

Android图表库MPAndroidChart(十三)——简约的底部柱状图

Android图表库MPAndroidChart(十三)--简约的底部柱状图 我们继续上一讲,今天还是说下柱状图,这个图的话应该是用的比较多的,所有拿出来溜溜,先看下效果 我们还是来看下基本实现 一. ...

mysql ibd文件一直增加_为什么 MySQL 回滚事务也会导致 ibd 文件增大?相关推荐

  1. mysql java事物回滚吗_为什么 MySQL 回滚事务也会导致 ibd 文件增大?

    一个简单的测试: start transaction; insert into tb1 values(3, repeat('a', 65000),'x',1); --commit; rollback; ...

  2. 为什么 MySQL 回滚事务也会导致 ibd 文件增大?

    一个简单的测试: start transaction; insert into tb1 values(3, repeat('a', 65000),'x',1); --commit; rollback; ...

  3. mysql定期执行备份语句_【mysql】备份篇1:使用系统计划任务+mysqldump 定时备份mysql数据库 不用输入密码自动导出sql文件...

    项目部署在服务期上之后,有了新的需求,需要每月定时备份mysql数据库的所有数据! 查找了网上的多篇文章之后,自己又对bat文件中的mysqldump语句进行改进,可以实现了不用输入密码就能自动定时备 ...

  4. mysql数据文件瘦身_为MySQL数据文件ibdata1瘦身

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 MySQL在运行一段时间后,ibdata1的文件会增长大小,就算删除了表的数据,ibdata1的体积也不会减 欢迎进入Li ...

  5. mysql 自动化运维工具_部署MySQL自动化运维工具inception+archer

    *************************************************************************** 部署MySQL自动化运维工具inception+ ...

  6. mysql和python的关系_八MySQL与Python

    <1>数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. ...

  7. mysql innodb 设置详解_【mysql】mysql innodb 配置详解

    MySQLinnodb 配置详解 innodb_buffer_pool_size:这是InnoDB最重要的设置,对InnoDB性能有决定性的影响.默认的设置只有8M,所以默认的数据库设置下面InnoD ...

  8. mysql 按时间累计计算_精通MySQL索引背后的数据结构及算法原理

    本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,mysql支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree ...

  9. mysql数据库开启远程连接_安装MySQL数据库并开启远程访问

    一.安装MySQL数据库 MySQL安装在系统盘下(C:\Program Files),方便系统备份. 1.双击安装程序,勾选"I accept the license terms" ...

最新文章

  1. Activity启动流程图
  2. 深入理解PHP原理之变量作用域
  3. 图森未来完成2.15亿美元D轮融资,将拓展无人驾驶运输服务
  4. 我国近四成程序员单身 盘点各国IT从业者生存现状
  5. javascript返回上一页的三种写法
  6. 【电子电路】上拉电阻与下拉电阻有什么作用
  7. j2ee之页面无刷新上传附件
  8. kodi pvr 不能安装_「保姆级教程」家庭影音多媒体中心第5节—KODI18安装/设置IPTV...
  9. namespace for c++
  10. nccloud开发环境搭建_VS Code 搭建开发环境
  11. script标签中的crossorigin属性
  12. uva 11732 strcmp() Anyone?
  13. 游戏筑基开发之广度优先搜索算法(C语言)
  14. 知了课堂python_Python框架Flask系列课程(2)—全栈开发[知了课堂]
  15. 怎么仿站下载整站的文件
  16. 光谱分析软件_[Howtodowx]OMNIC红外光谱分析软件
  17. 哈工大计算机研究生到抖音,抖音一家12口全是硕博引围观,本人谈心得:学霸养成就靠这三点...
  18. 网易首支AI歌曲《醒来》发布:声音太逼真 能瞒过人类
  19. reflections歌词翻译_花木兰主题曲Reflection翻译成中文的准确歌词
  20. mscorsvw.exe进程占用CPU资源高居不下

热门文章

  1. 年轻人最in的选择!HCK哈士奇x可口可乐联名限量款冰吧
  2. 用JS输出菱形图案:
  3. 揭秘持牌消费金融机构的“潜规则”
  4. 苹果电脑 开机密码 忘记了, 黑苹果系统
  5. 拥有一本CISP证书,我的工资会翻倍吗?
  6. (vcom-1141) Identifier “<protected>“ does not identify a component declaration.
  7. 截止到20190828的前沿汇总
  8. 2021-11-06Python是一种代表简单主义思想的语言
  9. PWM方波的理解浅谈
  10. 什么软件可以听学业水平测试网课,免费听网课app推荐