清除MySQL表空间碎片的详细方法

  • 1. 背景
  • 2. 碎片信息查询
  • 3. 碎片整理前后的查询性能比对
    • 3.1 碎片整理前
    • 3.2 整理碎片
    • 3.3 碎片整理后
  • 4. 整理表碎片会锁表吗?
  • 参考

1. 背景

一张任务表的记录条数达到1.7亿,查询性能差。为提升性能将历史数据抽取到大数据,在MySQL表中删除历史数据,只保留最新3个月的数据(约2300w)。由于删除了大量记录,因此产生了很多表碎片,为了不影响查询性能,并释放表空间,决定进行碎片整理。

mysql version: 5.7.26-log

2. 碎片信息查询

SHOW TABLE STATUS LIKE 'tablename'

Data_free一栏为碎片空间,由于删除了大量数据,碎片空间约为148G,碎片率(碎片空间/总使用空间)约为3.2。

3. 碎片整理前后的查询性能比对

表碎片空间太大会增加访问表时的IO次数,影响MySQL查询性能;而且会占用磁盘空间,影响磁盘空间使用率。
影响磁盘空间使用率比较好理解,但是对查询性能的影响到底有多大却不太好评估,只能具体问题具体分析。
以我们的场景为例,简单做一下验证。

3.1 碎片整理前

当前记录月2300w,createtime、order_type有独立索引,碎片整理前下面的查询语句耗时约300ms。

select * from tablename where createtime > '2022-03-29' and createtime < '2022-03-30' and order_type = 1 limit 100

3.2 整理碎片

执行碎片整理,表使用innodb引擎,整个执行过程约12分钟。如果是主从结构,从库的碎片清理会相对滞后。

alter table tablename engine=InnoDB

3.3 碎片整理后

碎片整理完成后对性能影响不大。
原因分析:

  • 因为删除数据时主要是通过主键进行删除,而且删除的都是连续数据,所以对IO性能影响较小,因此对查询性能影响不大。

那么什么情形下会影响查询性能呢?

  • 依据MySQL的官方文档,在对二级索引进行无序新增、删除时对查询性能的影响会比较大。

4. 整理表碎片会锁表吗?

DBA给的回复是一般不会,

记MySQL表空间碎片清理过程相关推荐

  1. MySQL表空间碎片整理

    MySQL可以使用alter table tn engine=innodb语句进行表空间碎片整理.而页内记录并不是物理有序的,并且删除记录后,被删除的记录放到页内free链表,可能会产生很多空洞.al ...

  2. mysql 清理表碎片需要停止数据库吗_Mysql的表的碎片清理

    最近在生成环境下的mysql运行下降,有些sql执行也慢,首先检查下慢查询日志是否开启 show variables like 'slow_query_log%' 在看慢日志设置的时间 show va ...

  3. 清除mysql数据碎片_MySQL 清除表空间碎片方法总结

    mysql数据库会生成空间碎片了,这些空间碎片对于我们来讲影响不大但如果空间碎片多了会导致mysql查询缓存了,下面一起来看MySQL 清除表空间碎片方法吧,具体的如下所示. 碎片产生的原因 (1)表 ...

  4. MySQL表空间简介

    本文主要介绍一下MySQL中的几种表空间概念及相关操作. 基础材料: CentOS7.5  MySQL 5.7.24 ######################################### ...

  5. mysql 表空间监控shell_一种通过zabbix监控mysql表空间的方法

    一种通过zabbix监控mysql表空间的方法[ 技术领域: ][0001]本发明涉及计算机自动化运维与监控领域,具体地说是一种通过ZABBIX监控MYSQL表空间的方法.[ 背景技术: ][0002 ...

  6. oracle 表空间 碎片,Oracle表空间碎片整理

    作为影响数据库性能的一个因素,数据库表空间碎片,应当引起DBA的重视,及时发现并整理碎片是DBA基本维护内容,以提高数据库性能. Oracle数据库表空间.段.区.块简述 表空间(tablesapce ...

  7. Oracle表空间碎片查询以及整理

    一.查看表空间碎片的方法 查看fsfi值 /* Formatted on 2017/9/21 13:42:29 (QP5 v5.240.12305.39476) */ select a.tablesp ...

  8. Oracle一次缩小表空间的处理过程

    Oracle一次缩小表空间的处理过程 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩ ...

  9. mysql 表空间收缩_mysql表碎片清理和表空间收缩

    mysql表碎片清理和表空间收缩(即清理碎片后report_site_day.ibd文件磁盘空间减小,该方案基于独立表空间存储方式) OPTIMIZETABLE [tablename],当然这种方式只 ...

  10. mysql怎么把值更新成space,MySQL表的碎片整理和空间回收小结

    MySQL表碎片化(Table Fragmentation)的原因 关于MySQL中表碎片化(Table Fragmentation)产生的原因,简单总结一下,MySQL Engine不同,碎片化的原 ...

最新文章

  1. 服务器上装centos系统花屏,CentOS系统如何解决鼠标花屏的问题
  2. BZOJ 4817: [Sdoi2017]树点涂色
  3. 关于一次装机后的个人总结
  4. 高斯信道、单径Rayleigh信道和多径衰落信道下基带模型的多用户BPSK直接序列扩频系统MATLAB仿真(m序列、Gold序列和正交Gold序列)
  5. [Objective-C语言教程]数据封装(27)
  6. 警惕Python编程中异常处理结构可能的坑
  7. grpc框架_grpc的入门使用
  8. 国外高手又一力作,CAML Builder
  9. Cache和DMA一致性 iCache和dCache一致性
  10. 2021年下半年信息安全工程师下午真题及答案解析
  11. Unity3d 无人机
  12. pdg file的打开
  13. AngularJs参数传递
  14. python为什么运行不了_终端里为什么无法运行python?
  15. Allegro可供产品包含L、XL和GXL三个级别
  16. 修改管理员信息php,修改管理员_ThinkPHP_大笨熊_IT技术平台
  17. 使用CH340串口模块对STM32进行程序下载
  18. php中e代表什么意思,计算机的e是什么意思
  19. windowd 10 2016 LTS 激活方法
  20. java.lang.IllegalArgumentException: Result Maps collection does not contain value for com.sjm.emp.da

热门文章

  1. python关键字保留字
  2. vue中局部过滤器和全局过滤器的使用
  3. OPNsense用户手册-反病毒引擎
  4. 家庭WIFI路由器当交换机用
  5. poj 3345 Bribing FIPA 树形dp
  6. Go开发的程序如何使用加密狗保护
  7. 三步骤详解张正友标定法
  8. VITS 语音合成完全端到端TTS的里程碑
  9. 如何将Vue中表格数据,以Excel格式导出?报saveAs错误如何解决?
  10. excel字符串和单元格拼接_单元格引用问题(引用的单元格与字符串变量连接)...