MySQL 表空间碎片
本文描述的表空间碎片,指的是MySQL InnoDB引擎的表空间碎片;
产生原因
表空间碎片产生的常见原因:
- 记录被Delete,且原空间无法复用;
- 记录被Update(通常出现在变长字段中),原空间无法复用;
- 记录插入导致页分裂,页的填充率降低;
影响
如果表空间碎片较大,可能带来的负面影响:
- 浪费磁盘空间;
- 可能导致查询扫描的IO成本提升,效率降低;
如果表空间较小或者碎片率较小,用户无需关注,也不建议执行回收空间碎片操作。
回收表空间碎片的方法
回收碎片的常见方法是通过 optimize table 来重组文件,操作过程会导致该表上的写操作无法执行,实例负载增大,请用户谨慎操作,如果确定需要回收,建议放在业务低峰期进行。
Alter Table操作也可以达到回收空间碎片的效果,请用户谨慎操作,如果确定需要回收,建议放在业务低峰期进行
常用命令
查看某个表的碎片大小
SHOW TABLE STATUS LIKE '表名';
碎片大小MB =DATA_FREE / 1024 / 1024
清理碎片
ALTER TABLE 表名 engine = InnoDB
执行流程
- 建立一个临时文件,扫描表 A 主键的所有数据页;
- 用数据页中表 A 的记录生成 B+ 树,存储到临时文件中;
- 生成临时文件的过程中,将所有对 A 的操作记录在一个日志文件(row log)中,对应的是图中 state2 的状态;
- 临时文件生成后,将日志文件中的操作应用到临时文件,得到一个逻辑数据上与表 A 相同的数据文件,对应的就是图中 state3
的状态;用临时文件替换表 A 的数据文件。
测试参考:8G数据约2500万条数据,整理用时35秒,执行速度与服务器配置和数据量大小有关。
设置更新间隔
SET session information_schema_stats_expiry=0;
SET @@session.information_schema_stats_expiry=0;
查看设置
SHOW session VARIABLES LIKE 'information_schema_stats_expiry';
MySQL 表空间碎片相关推荐
- MySQL表空间碎片整理
MySQL可以使用alter table tn engine=innodb语句进行表空间碎片整理.而页内记录并不是物理有序的,并且删除记录后,被删除的记录放到页内free链表,可能会产生很多空洞.al ...
- 清除mysql数据碎片_MySQL 清除表空间碎片方法总结
mysql数据库会生成空间碎片了,这些空间碎片对于我们来讲影响不大但如果空间碎片多了会导致mysql查询缓存了,下面一起来看MySQL 清除表空间碎片方法吧,具体的如下所示. 碎片产生的原因 (1)表 ...
- MySQL表空间简介
本文主要介绍一下MySQL中的几种表空间概念及相关操作. 基础材料: CentOS7.5 MySQL 5.7.24 ######################################### ...
- mysql 表空间监控shell_一种通过zabbix监控mysql表空间的方法
一种通过zabbix监控mysql表空间的方法[ 技术领域: ][0001]本发明涉及计算机自动化运维与监控领域,具体地说是一种通过ZABBIX监控MYSQL表空间的方法.[ 背景技术: ][0002 ...
- oracle 表空间 碎片,Oracle表空间碎片整理
作为影响数据库性能的一个因素,数据库表空间碎片,应当引起DBA的重视,及时发现并整理碎片是DBA基本维护内容,以提高数据库性能. Oracle数据库表空间.段.区.块简述 表空间(tablesapce ...
- Oracle表空间碎片查询以及整理
一.查看表空间碎片的方法 查看fsfi值 /* Formatted on 2017/9/21 13:42:29 (QP5 v5.240.12305.39476) */ select a.tablesp ...
- mysql 表空间收缩_mysql表碎片清理和表空间收缩
mysql表碎片清理和表空间收缩(即清理碎片后report_site_day.ibd文件磁盘空间减小,该方案基于独立表空间存储方式) OPTIMIZETABLE [tablename],当然这种方式只 ...
- mysql怎么把值更新成space,MySQL表的碎片整理和空间回收小结
MySQL表碎片化(Table Fragmentation)的原因 关于MySQL中表碎片化(Table Fragmentation)产生的原因,简单总结一下,MySQL Engine不同,碎片化的原 ...
- mysql清除表空间导入_MySQL 清除表空间碎片
碎片产生的原因 (1)表的存储会出现碎片化,每当删除了一行内容,该段空间就会变为空白.被留空,而在一段时间内的大量删除操作,会使这种留空的空间变得比存储列表内容所使用的空间更大; (2)当执行插入操作 ...
- mysql表空间过大_详解MySQL表空间以及ibdata1文件过大问题
ibdata1文件过大 原因分析 ibdata1是一个用来构建innodb系统表空间的文件,关于系统表空间详细介绍参考MySQL官网文档 上面是一个数据库的ibdata1文件,达到了780多G,而且还 ...
最新文章
- [UWP小白日记-10]程序启动屏(ios解锁既视感)
- 中国人长期“霸榜”GitHub,国外开发者发文控诉
- 逍遥模拟器配置burpsuite抓包环境
- Vue.js 条件与循环
- 用汇编的眼光看C++(之类继承)
- iphone9发布_苹果将发布iPhone9!配置升级价格公道,期待官网亮相!
- Selenium自动化测试-文件上传
- Qt多线程-QThread
- SDWebImage 笔记
- Android 解决调用系统相册打不开图片 DecodeServices报解码错误
- karto探秘之open_karto 第一章 --- 数据结构与类的初始化
- 【PPT】PPT倒计时动画的制作方法 5.4.3.2.1...
- swagger2搭配knife4j 隐藏实体类的属性/字段
- 怎么理解Web 3.0?
- (二)浅谈OpenStack T版服务组件--Keyston身份服务(#^.^#)
- 个人登录空间 含登录注册功能
- 反思盛大转型之困:陈天桥的所有设想都被腾讯小米实现了
- ajax实现省市三级联动
- 打造数字时代的“诺亚方舟”
- 什么是CS和BS结构,两种结构的区别