MySQL表空间管理与优化(8/16)

表空间管理和优化

  1. innodb_file_per_table参数(此参数在分区表章节中还会出现):

    • 这个参数决定了InnoDB表数据的存储方式。当参数设置为ON时,每个InnoDB表的数据会单独存储在一个以.ibd为后缀的文件中,这有利于管理和回收空间。从MySQL 5.6.6版本开始,默认值就是ON。
    • 这个参数设置为 OFF 表示的是,表的数据放在系统共享表空间,也就是跟数据字典放在一起;就是information_schema。

    一个表单独存储为一个文件更容易管理,而且在你不需要这个表的时候,通过 drop table 命令,系统就会直接删除这个文件。而如果是放在共享表空间中,即使表删掉了,空间也是不会回收的。所以参数推荐为ON。

  2. 空洞的产生

    • 当删除表中的数据时,InnoDB引擎会标记记录为删除,而不是立即释放空间。这意味着即使删除了表中一半的数据,表文件的大小可能不会变化。

    • 删除数据或插入数据(导致数据页分裂)时,可能会在数据页上产生空洞。空洞是未被使用但已被标记为可复用的空间。大量增删改操作的表可能会存在很多空洞。

    • 要收缩表空间,可以通过重建表来实现。这涉及创建一个新表,将原表中的数据按主键ID递增顺序重新插入新表,从而消除空洞。

  3. 重建表的方法

  4. 使用ALTER TABLE命令

    • 这是最常用的重建表的方法。通过指定ENGINE=InnoDB,你可以让MySQL重新创建表的物理存储。这个过程会创建一个新的临时表,将原表中的数据按主键ID递增顺序导入新表,然后删除原表并将新表重命名为原表的名字。例如:
      ALTER TABLE table_name ENGINE=InnoDB;
      
    • 在MySQL 5.6及更高版本中,这个过程通常是Online的,也就是说,在重建表的过程中,可以继续对表进行增删改操作。
  5. 使用OPTIMIZE TABLE命令

    • 这个命令是ALTER TABLE ... ENGINE=InnoDB的别名,它会尝试优化表的存储。在某些情况下,这可能意味着重建表,但行为可能因MySQL版本和表的具体情况而异。例如:
      OPTIMIZE TABLE table_name;
      
    • 这个命令在执行时会获取表级锁,可能会影响业务操作。
  6. 使用ALTER TABLE ... ALGORITHM=COPY

    • 当你需要强制执行一个非在线的表重建时,可以使用这个选项。这会导致MySQL创建一个新表,并将数据从原表复制到新表中,然后删除原表并重新命名新表。例如:
      ALTER TABLE table_name ALGORITHM=COPY;
      
    • 这种方式不是在线的,可能会对业务操作产生影响。
  7. 使用gh-ost工具

  • 对于大型生产数据库,建议使用gh-ost(GitHub开源的在线DDL工具)来进行表重建。gh-ost允许你在不锁定整个表的情况下进行DDL操作,从而减少对业务的影响。
  1. 使用ANALYZE TABLE命令
    • 虽然这个命令不会重建表,但它可以更新表的索引统计信息,有助于优化查询性能。例如:
      ANALYZE TABLE table_name;
      
    • 这个操作通常很快,并且对业务操作的影响很小。

在进行表重建操作时,需要考虑操作对业务的影响。Online DDL方法(如ALTER TABLEOPTIMIZE TABLE)通常更适合生产环境,因为它们允许在重建过程中继续进行业务操作。对于大型表,应该在业务低峰期进行操作,并考虑使用gh-ost等工具来最小化对业务的影响。同时,确保在执行这些操作之前备份数据,以防万一出现问题。

作者与版本更新计划

感谢您的阅读与支持!本文是《MySQL实战与优化》专栏中的一篇精选文章,该专栏共包含16篇文章,旨在为您提供实战中可直接应用的宝贵知识。

关注公众号【数舟】,获取作者最新动态,公众号后台回复【mysql2024】,即可免费领取这份包含16篇文章的完整的PDF专栏!

目前版本为v1.0,更新时间2024年4月10日。后续此文档更新与版本发布会同步到知识星球【数舟】中。

知识整理与创作不易,感谢大家理解与支持!

加入知识星球,您将获得更多独家内容、专栏更新以及与行业内专家和同行的互动交流机会。我们在知识星球等您,一起探索MySQL的深层次世界!

星球内目前包含300+精品文章,内容涵盖大数据、MySQL、运维、Python、调优、经验分享、数据分析等方向内容,会根据大家的学习需求更新更多方向的内容。

🔗 立即扫描下方二维码,加入知识星球,与行业精英共同成长,开启您的专属学习之旅!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/621135.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt 学习笔记】Qt常用控件 | 按钮类控件Radio Button的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 按钮类控件Radio Button的使用及说明 文章编号&#xff…

接口测试练习步骤

在接触接口测试过程中补了很多课, 终于有点领悟接口测试的根本; 偶是个实用派~,那么现实中没有用的东西,基本上我都不会有很大的概念; 下面给的是接口测试的统一大步骤,其实就是让我们对接口…

吴恩达llama课程笔记:第六课code llama编程

羊驼Llama是当前最流行的开源大模型,其卓越的性能和广泛的应用领域使其成为业界瞩目的焦点。作为一款由Meta AI发布的开放且高效的大型基础语言模型,Llama拥有7B、13B和70B(700亿)三种版本,满足不同场景和需求。 吴恩…

传世手游之冰雪传世_经典角色扮演PK类三职业传奇手游

传世手游之冰雪传世_经典角色扮演PK类三职业传奇手游_Linux服务端_通用视频架设教程_GM网页授权物品后台_苹果IOS安卓双端 源码仅供学习研究之用,请勿商用或者其他违法用途,产生其他后果与本站无关 下载地址:极速云

RISCV指令集体系简读之RV32M

RV32M向RV32I中添加了整数乘法和除法指令; RV32M具有有符号和无符号整数的除法指令:divide(div)和divide unsigned(divu),它们将 商放入目标寄存器。在少数情况下,程序员需要余数而不是商,因此RV32M提供 remainder(rem…

软考126-上午题-【软件工程】-测试方法

一、测试方法 在软件测试过程中,应该为定义软件测试模板,即将特定的测试方法和测试用例设计放在一系列的测试步骤中。 软件测试方法分为:静态测试和动态测试。 1-1、静态测试。 静态测试是指被测试程序不在机器上运行,而是采用…

JAVAEE——网络初始

文章目录 网络发展史独立模式网络模式局域网LAN路由器的诞生 网络通信的基础IP地址端口号 认识协议OSI七层模型TCP/IP五层模型 网络发展史 独立模式 在原始的年代中电脑间想要通信需要两台电脑连接一根网线,但是一台电脑基本上只有一个接口。因此想要链接更多的电…

论文速读:Do Generated Data Always Help Contrastive Learning?

在对比学习领域,最近很多研究利用高质量生成模型来提升对比学习 给定一个未标记的数据集,在其上训练一个生成模型来生成大量的合成样本,然后在真实数据和生成数据的组合上执行对比学习这种使用生成数据的最简单方式被称为“数据膨胀”这与数据…

在Windows上配置VS Code GO语言开发环境

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【TEE论文】IceClave: A Trusted Execution Environment for In-Storage Computing

摘要 使用现代固态硬盘(SSD)的存储中计算使开发人员能够将程序从主机转移到SSD上。这被证明是缓解I/O瓶颈的有效方法。为了促进存储中计算,已经提出了许多框架。然而,其中很少有框架将存储中的安全性作为首要任务。具体而言&…

ZJJ-2A直流绝缘监视继电器额定电流3.1mA额定电压110VDCJOSEF约瑟

系列型号 JJJ-1绝缘监视继电器; ZJJ-1/A绝缘监视继电器; ZJJ-1A绝缘监视继电器; ZJJ-2型直流绝缘监视继电器 ZJJ-2直流绝缘监视继电器; ZJJ-2B直流绝缘监视继电器; ZJJ-2AC直流绝缘监视继电器; 用途…

【算法】反转链表

本题来源---《反转链表》 题目描述: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输…