一、表空间

1、表空间: innodb 引擎存储的最高层; 存放所有的数据

2、独立表空间:Mysql 版本5.6 后默认开启的单表单空间

(1)Innodb 默认存储引擎页的大小为 16K ;默认表空间 大小为96k

(2)独立表空间 开启方式 innodb_file_per_table ON 从Mysql 5.6.6 开始,默认值 ON

二、数据页空洞

如果我们修改了 info表 的表结构 ,比如 给表添加注释,发现9440 Dec 14 09:59 info.frm

磁盘上的 frm 表结构文件 立刻被更新了。

那我们如果删除一行数据呢? 从文件更改时间上来看也是立刻修改了。180224 Dec 14 10:03 temp.ibd

但是 idb数据文件 大小 180224却没有改变

那么数据库的删除流程到底是怎么样的? 为什么我们删除一行,存储的ibd文件大小却没有改变,当我们点击 删除表的时候,SQl 引擎发生了什么?

1、Innodb 的删除

为什么 ibd 文件不会变小?

InnoDb 的数据存储类型是 B+树 ,B+树的叶子结点上 ,存储的是 数据页 ; 一页数据页存储的是 数据记录,假设一条数据记录占用 200字节 ,一页数据页大小为 16Kb ,那么一页可以存储80条数据记录 ,当某条数据记录,比如 ID = 300 的数据记录被删除了,实际上,引擎只会标记这条数据记录为删除,而不会将数据记录从磁盘上抹去,所以磁盘文件上的 ibd 文件不会缩小

一个数据页 Page A 上,总是存储着 ID从 X 到 X+N 的 数据记录, 如果 X 到 X+N 之间的数据记录被删除了,会留下一个数据空洞,那么插入的X 到 X+N 区间之间,且不在PageA上,就会复用这个数据页, 所以文件大小不会减少

如果删除了1整个数据页的所有记录,那么这整个数据页都会被复用,

所以删除和插入,其实是在数据页上,产生和填补空洞 的过程 ,经过删除更新插入的表,都可能会产生大量的空洞。

2、整理数据页的空洞

那么,当一张表被更新插入,产生了数据空洞之后,如何整理数据页,使得数据变得更紧凑呢?

可以采取重建表的操作 alter table,实际上这里是 引擎自动完成了 转存数据、交换表名、删除旧表的操作

mysql> alter table temp engine=innodb;163840 Dec 14 10:52 temp.ibd

3、测试数据页的增长效果

新建一张 new_test 表

CREATE TABLE `new_test` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`name` char(255) DEFAULT NULL,PRIMARYKEY(`id`)

) ENGINE=InnoDB AUTO_INCREMENT=191 DEFAULT CHARSET=utf8mb4;

我们知道 初始 ibd文件 的大小默认是 96K ,inndb 默认单个数据页大小是16K,对 new_test 表进行数据增加,观察 ibd文件大小。

insert into new_test (name) value("leon”)

发现 当rows 增长时,ibd文件大小增长规律如下:

idb文件大小 VS rows

96k – 0~81

128k – 82~136

144k – 136~190

160k – 190~255

16K 增长对应 54条rows ,1条row算出来约等于 296.29b , 正好等于 char 255b + int(11) 44 = 299b 。

可以看出来的确是由连续的数据页组成数据的。

4、数据空洞的复用

为了数据空洞的复用的问题,我们来删除 new_test 表 1-180行中的 155-160 行 ,ibd文件 原始大小为 144KB,当我们删除 150-160 这时候,数据页就有了 10条ID 的空洞 ,此时表中ID是 : 0-149 161 -180 共计 170条, 那么这时候,插入20条 还是 10条 数据页呢 ?

测试可得。插入20条,ID到 201。表空间变为 160k,所以原来的数据页存在空洞 可以被复用(??待理解!!)

---按照计算应该一条数据是800b,有十条空洞,再加入10条,应该是144KB+0.8*10=152KB,160k不是说明原来的空洞没有复用上吗??

原文:https://blog.csdn.net/qq_28018283/article/details/85003657

mysql空洞数据,Mysql 表空间和 数据页空洞相关推荐

  1. mysql空洞数据_Mysql 表空间和 数据页空洞 艾薇Ivy

    一.表空间 1.表空间: innodb 引擎存储的最高层: 存放所有的数据 2.独立表空间:Mysql 版本5.6 后默认开启的单表单空间 (1)Innodb 默认存储引擎页的大小为 16K :默认表 ...

  2. ORACLE开发:创建与管理表空间和数据文件1

    Oracle在逻辑上以表空间存储数据,而实际上是以数据文件存储数据. 表空间和数据文件 表空间:某一时刻只属于一个数据库:由一个或多个数据文件组成:可近一步划分逻辑存储单元 数据文件:只能属于一个表空 ...

  3. mysql 直接删表空间文件_oracle删除(释放)数据文件/表空间流程

    oracle删除(释放)数据文件/表空间流程 生产环境:数据库里空间不足,niptest表空间251G,只使用了17G 再alter database datafile '...../niptest1 ...

  4. mysql数据库表空间压缩,表空间中有数据也可以压缩表空间(数据文件)大小!!...

    首先说声抱歉,在 中提出以下观点,经过研究请教,发现观点都是错误的,在这里给予更正. 3.得知表空间中有数据不能resize数据文件的大小:要想resize数据文件,那么表空间中必须没有数据. 更正后 ...

  5. mysql 修改表空间名称_修改多个表空间的数据文件的名称和位置

    修改多个表空间的数据文件的名称和位置,可以在表空间级别,也可以在数据库级别进行. 在表空间级别进行就如同修改一个表空间数据文件的名称 和位置,一个一个的进行,直到全部完成. 在数据库级别,可以一次性的 ...

  6. MYSQL 5.7 INNODB 表空间

    背景介绍 由于InnoDB 引擎支持ACID.良好的读写性能,还有许多其他对数据库服务具有重要意义的特性,InnoDB已经成为MySQL最受欢迎的存储引擎. 在本文中,我们将介绍InnoDB表空间和它 ...

  7. Mysql原理篇之表空间---05

    Mysql原理篇之表空间---05 前言 回顾 页面类型 页面通用部分 独立表空间结构 区(extent)的概念 段(segment)的概念 区的分类 整理 XDES Entry链表 链表基节点 链表 ...

  8. 管理表空间和数据文件——维护表空间——改变表空间的读写状态和改变表空间名称...

    默认情况下表空间是处于可读写状态,用户不仅可以查询表空间上的对象数据,而且可以在表空间上执行dml 和ddl 操作.如果表空间只用于存放静态数据,那么为了便于管理和备份恢复,应该将其转变为只读状态:另 ...

  9. Oracle管理表空间和数据文件详解

    管理表空间和数据文件 介绍 表空间是数据库的逻辑组成部分 从物理上将:数据库数据存放在数据文件中 从逻辑上将:数据库则是存放在表空间中 表空间由一个或是多个数据文件组成 数据库的逻辑结构 介绍: Or ...

  10. oracle 增加ora容量_oracle数据库报错:ORA-01653无法在表空间扩展解决办法 ,增加表空间或表空间增加数据文件...

    当Oracle数据库的数据量越来越大,表空间的大小不够用的时候,会报错:"ORA-01653 ", 即表空间满了,无法在表空间扩展解决办法 ,增加表空间或表空间增加数据文件.在这里 ...

最新文章

  1. python中list的意思_list在python中是什么意思
  2. csdn上修改字体的颜色
  3. 本科计算机应用水平,湖南工程学院全日制非计算机专业本科生参加湖南省计算机应用水平等级考试的规定...
  4. EhLib TitleButton SVisibleColumnsEh = '错误的列';
  5. poj3187 穷竭搜索 挑战程序设计大赛
  6. Android AppCompatActivity的ActionBar之SearchView、ShareActionProvider以及menu
  7. ubuntu开机自启动脚本
  8. java中的关键字有哪些_java关键字有哪些?java关键字大全
  9. js获取当前日期yyyymmdd
  10. 移动端怎么让图片不失真_实用工具推荐:几款堪称神器的图片放大缩小网站,无损不失真...
  11. 利用matlab导入数据+命令行 快速选取excel部分内容
  12. 苹果公司CEO乔布斯演讲的15个秘诀
  13. 从汽车尾气过滤陶瓷孔检测看远心镜头的应用前景-工业相机
  14. java protected用法_深入理解Java的protected修饰符
  15. 阿里天池大数据竞赛(一)用ODPS提取特征
  16. 【数据分析】系列-Python分析淘宝4200款Bra(没错,就是文胸)后,发现最好卖的款式居然是。。。
  17. cad引出线段lisp_利用lisp给CAD直线取整?
  18. html文档是哪个版本,HTML 简介, 版本和文档类型声明
  19. 区块链基础理论模拟试卷六
  20. 运营商拥抱OpenStack背后:距运营级仍有差距

热门文章

  1. 训练残骸模式– Java 8中的改进实现
  2. bean包、entity包、mode包、domain包的区别
  3. 深度学习pytorch--线性回归(三)
  4. 分支限界法 tsp java_基于分支限界法的旅行商问题(TSP)一
  5. 聚合项目访问后台接口失败_聚合支付系统和免签支付系统对未来支付市场有哪些影响...
  6. php珠心算源码,深度解析珠心算的“开智”功能
  7. vue php企业站案例,vue 开发企业微信整合案例分析
  8. 计算机网络整体框架理解与把握(持续更新)
  9. pat 乙级 1003 我要通过!(C++)
  10. pat 乙级 1031 查验身份证(C++)