当前位置: 首页 > news >正文

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、调优、经验分享、数据分析等方向内容,会根据大家的学习需求更新更多方向的内容。

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

相关文章:

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

表空间管理和优化 innodb_file_per_table参数(此参数在分区表章节中还会出现): 这个参数决定了InnoDB表数据的存储方式。当参数设置为ON时,每个InnoDB表的数据会单独存储在一个以.ibd为后缀的文件中,这有利于管理和回收…...

杂货铺 | Linux虚拟机Ubuntu操作系统下设置共享文件夹(以及找不到hgfs文件夹怎么办)

文章目录 📚步骤一:配置共享文件夹📚步骤二:配置挂载环境📚步骤三:解决权限问题📚步骤四:解决重启失效问题 📚步骤一:配置共享文件夹 建立本地共享文件夹&…...

《HF经理》:二认知误区

一、管理者掌握重要权力: 二、全力来自管理者的职位: 三、管理者必须控制自己的直接下属: 对策:展示自己的品质,能力和影响力 四、管理者必须建立良好的个人关系: 五、管理这必须确保一切运行正常&…...

ELK日志分析系统之Zookeeper

一、Zookeeper简介 ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。分布式应用可以基于它实现更高级的服务,实现诸如同步服务、配置维护和集群管理或者命名的服务。 Zookeepe…...

家居网购项目(Ajax验证用户名+上传图片)

文章目录 1.Ajax验证用户名1.程序框架图2.修改MemberServlet3.修改login.jsp4.结果展示 2.Ajax判断验证码是否输入正确1.修改MemberServlet2.修改login.jsp3.结果展示 3.Ajax添加购物车1.程序框架图2.修改CartServlet2.修改index.jsp3.解决问题—未登录直接添加购物车&#xff…...

09 Php学习:超级全局变量

超级全局变量 PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 PHP 超级全局变量列表: $GLOBALS$_SERVER$_REQUEST$_POST$_GET$_FILES$_ENV$_COOKIE$_SESSION $GLOBALS $GLOBALS 是 PHP 中的…...

【Java】SpringBoot快速整合mongoDB

目录 1.什么是mongoDB? 2.Docker安装mongoDB 3.SpringBoot整合mongoDB步骤 4.验证 1.什么是mongoDB? MongoDB是一种非关系型数据库,被广泛用于大型数据存储和分布式系统的构建。MongoDB支持的数据模型比传统的关系型数据库更加灵活&#x…...

UI设计的未来发展

UI 设计的未来发展,实际上是互联网行业未来发展的折射。毕竟,UI 设计始终是互联网行业的一部分,因此在互联网行业未来发展的可能性来看,UI 设计同样会跟随着互联网的部分稳步前进。曾经,在最初的图形化界面出现的时候&…...

推荐系统学习记录——连续的嵌入空间

连续嵌入空间 推荐系统通常会将用户和项目(或商品)表示为向量或嵌入(embeddings),这些向量被映射到一个称为嵌入空间(embedding space)的数学空间中。在这个空间中,相似的用户或项目…...

【Entity Framework】你要知道EF中功能序列与值转换

【Entity Framework】你要知道EF中功能序列与值转换 文章目录 【Entity Framework】你要知道EF中功能序列与值转换一、序列1.1 基本用法1.2 配置序列设置 二、值转换2.1 配置值转换器2.2 批量配置值转换器2.3 预定义的转换2.4 ValueConverter类2.5 内置转换器 三、应用3.1 简单…...

顶顶通呼叫中心中间件-SIP分机安全(mod_cti基于FreeSWITCH)

介绍 运行在公网的FreeSWITCH服务器,每天都会接收到很多恶意的呼叫请求和注册请求,尝试盗打电话。合理的配置可以防止电话给倒打,但是每天大量的攻击,会让FS产生很多日志,降低FreeSWITCH的处理能力,cti模块…...

CountDownLatch

CountDownLatch 翻译: 倒计时锁存器,,,,count计数,down停止,Latch锁 解释: 允许一个或多个线程等待,直到在其他线程中执行的一组操作完成的同步辅助不懂?…...

Vue3中的组合式API与选项式API:深入理解与比较

一、引言 Vue.js,作为前端开发的热门框架之一,以其轻量级、易上手、灵活性强等特点深受开发者的喜爱。随着Vue3的发布,其引入了全新的组合式API(Composition API),这为Vue.js的开发方式带来了新的变革。本…...

接口自动化测试实战之接口概念、项目简介及测试流程问答!

一、前言 这篇文章呢主要是想讲实战方面的内容,本文主要会讲解接口测试中的一些接口概念,流程等方面的问答,同时还会介绍一下即将要进行测试的项目,这里呢我就不多说废话了,直接进入主题吧。 二、接口概念 接口测试&…...

浏览器工作原理与实践--跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性

通过上篇文章的介绍,我们知道了同源策略可以隔离各个站点之间的DOM交互、页面数据和网络通信,虽然严格的同源策略会带来更多的安全,但是也束缚了Web。这就需要在安全和自由之间找到一个平衡点,所以我们默认页面中可以引用任意第三…...

Ubuntu配置VScode的C++环境

在Ubuntu系统下配置C环境,并运行helloworld 1. 下载VScode 我这里使用的是星火应用商店,在商店里面可以直接下载安装 http://spark-app.store/ 2.创建文件夹 3.启动VScode并打开该文件夹 4.安装以下几个扩展 PS:Clang这个插件别安装&…...

使用Code开发Django_模版和CSS

转到定义 和 查看定义 在使用Django或任何其他库的过程中,我们可能需要检查这些库中的代码。VS Code提供了两个方便的命令,可以直接导航到任何代码中的类和其他对象的定义: 转到定义 在Python开发环境中,我们可以轻松地对函数、类或者其他导入模块中的成员使用“Go to Def…...

Llama 3下月正式发布,继续开源!

4月10日,Techcrunch消息,Meta在本周伦敦举办的一场活动中确定,下个月将正式发布Llama 3并且继续开源。 Meta全球事务总裁Nick Clegg表示,我们希望在下个月,甚至更短的时间内,正式推出新一代基础模型Llama …...

有图片转成PDF文件格式的方法吗?分享图片转成PDF文件的方法

将图片转换为PDF文件是一个相对简单的过程,但也需要一定的步骤和注意事项。下面,我将详细介绍如何将图片转换为PDF文件,包括所需的工具、步骤以及可能遇到的问题和解决方案。 首先,我们需要一个能够将图片转换为PDF文件的工具。市…...

数据结构---绪论

一、绪论: 1.什么是数据? 数据是信息的载体,是描述客观事物属性的数,字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。 数据元素--描述一个个体 数据元素,数据项&am…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言:多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...

Mac flutter环境搭建

一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...