数据库优化之常用的show table status及ALTER TABLE 重建表

news2024/11/24 17:24:45

文章目录

  • ⭐️ MySQL优化-碎片优化
    • 一、show table status from db_name【 如何判断是否有碎片?】
      • 1、碎片查询分析
      • 2、产生碎片的原因
    • 二、MySQL 的表空间设置和优化策略【 如何清理碎片?】
      • 1、innodb_file_per_table 参数设置为 ON(基本上是默认打开的)
      • 2、定期执行 OPTIMIZE TABLE tableName;
      • 3、定期执行 ALTER TABLE tableName ENGINE = InnoDB;

当面试官让你聊聊MySQL数据库性能优化,你还是只能回答优化sql,建索引吗?
让我们看看还可以从哪些方面聊聊吧。其实你还可以从网速、数据量、数据库日志、内存等问题、硬件配置,当前占用资源、硬盘碎片或索引碎片等等诸多方面分析聊聊。
传送门:MySQL数据库优化看这一篇就够了(最全干货篇)

⭐️ MySQL优化-碎片优化

一、show table status from db_name【 如何判断是否有碎片?】

1、碎片查询分析

show status可以查看MySQL服务器运行状态值。而show table status from db_name可以查询db_name 数据库里所有表的信息,是否有索引碎片等。MySQL 的表空间设置和优化策略有什么?


这个命令中 Data_free 字段,如果该字段不为 0,则产生了数据碎片。

show table status 查询结果中各列字段含义

  • Name 表名称
  • Engine 表的存储引擎,对于分区表,Engine 显示所有分区使用的存储引擎的名称。
  • Version 版本;此列未使用。在 MySQL 8.0 中删除 .frm 文件后,此列现在报告硬编码值 10,这是 MySQL 5.7 中使用的最后一个 .frm 文件版本。
  • Row_format 行格式。对于MyISAM引擎,这可能是Dynamic,Fixed或Compressed。动态行的行长度可变,例如Varchar或Blob类型字段。固定行是指行长度不变,例如Char和Integer类型字段。
  • Rows 行数。一些存储引擎,例如 MyISAM,存储确切的计数。对于其他存储引擎,例如 InnoDB,这个值是一个近似值,可能与实际值相差 40% 到 50%。在这种情况下,请使用 SELECT COUNT(*) 获得准确的计数。
    对于 INFORMATION_SCHEMA 表,Rows 值为 NULL。
    对于 InnoDB 表,行数只是 SQL 优化中使用的粗略估计。 (如果 InnoDB 表是分区的,这也是如此。)
  • Avg_row_length 平均每行包括的字节数
  • Data_length 对于 MyISAM,Data_length 是数据文件的长度,以字节为单位。
    对于 InnoDB,Data_length 是为聚集索引分配的近似空间量,以字节为单位。具体来说,它是聚集索引大小(以页面为单位)乘以 InnoDB 页面大小。
    对于 MyISAM,Max_data_length 是数据文件的最大长度。给定使用的数据指针大小,这是可以存储在表中的数据总字节数。
  • Max_data_length 对于 MyISAM,Max_data_length 是数据文件的最大长度。给定使用的数据指针大小,这是可以存储在表中的数据总字节数。
    未用于 InnoDB。
  • Index_length 对于 MyISAM,Index_length 是索引文件的长度,以字节为单位。
    对于 InnoDB,Index_length 是为非聚集索引分配的近似空间量,以字节为单位。具体来说,它是非聚集索引大小的总和,以页面为单位,乘以 InnoDB 页面大小。
  • Data_free 已分配但未使用的字节数。
    InnoDB 表报告该表所属表空间的可用空间。对于位于共享表空间中的表,这是共享表空间的空闲空间。如果您使用多个表空间并且该表有自己的表空间,则可用空间仅用于该表。空闲空间是指完全空闲范围中的字节数减去安全裕度。即使可用空间显示为 0,只要不需要分配新的扩展区,就可以插入行。

2、产生碎片的原因

  • 经常进行 delete 操作
    经常进行 delete 操作,产生空白空间,久而久之就产生了碎片;

  • update 更新
    update 更新可变长度的字段(例如 varchar 类型),将长的字符串更新成短的。之前存储的内容长,后来存储是短的,即使后来插入新数据,那么有一些空白区域还是没能有效利用的。

由于碎片空间是不连续的,导致这些空间不能充分被利用;由于碎片的存在,导致数据库的磁盘 I/O 操作变成离散随机读写,加重了磁盘 I/O 的负担。

二、MySQL 的表空间设置和优化策略【 如何清理碎片?】

如何清理碎片,加快索引扫描,给表空间瘦身呢,常用的方法可以从以下几个方面进行处理:

1、innodb_file_per_table 参数设置为 ON(基本上是默认打开的)

  • 打开该参数,创建表则会分2个文件,.frm存放元数据,.ibd存放表数据(表初始大小是98304KB);
  • 关掉该参数off之后,创建表,只会生成.frm元数据文件,数据会存放到系统表空间,这样会不利于后期管理,系统表空间会逐渐膨胀,导致影响性能。

2、定期执行 OPTIMIZE TABLE tableName;

MyISAM

optimize table 表名;(OPTIMIZE 可以整理数据文件,并重排索引)

对于MYISAM表,OPTIMIZE TABLE 的工作原理:
如果表已删除或分隔行,就修复该表。
如果索引页没有排序,就排序它们。
如果表的统计信息不是最新的(而且修复不能通过对索引进行排序),就更新它们。

Innodb

optimize table 表名;
对于InnoDB的表,OPTIMIZE TABLE 的工作原理如下
对于InnoDB表, OPTIMIZE TABLE映射到ALTER TABLE … FORCE(或者这样翻译:在InnoDB表中等价 ALTER TABLE … FORCE),它重建表以更新索引统计信息并释放聚簇索引中未使用的空间。

3、定期执行 ALTER TABLE tableName ENGINE = InnoDB;

Innodb
方法一:ALTER TABLE tablename ENGINE=InnoDB;(重建表存储引擎,重新组织数据)
或:ALTER TABLE tbl_name FORCE;

方法二:进行一次数据的导入导出
使用 mysqldump 将表转储到文本文件,删除表,然后从转储文件重新加载

注意:第optimize、ALTER TABLE是高危操作,会锁表,影响业务,建议在低峰期操作。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从小白到大佬,入门Linux系统收发网络数据包的秘密/

Linux 服务器收到网络数据包,需求经过哪些处置,一步步将数据传给应用进程的呢?应用进程发送数据包时,Linux 又是如何操作将数据包发送进来的呢?今天我们就来聊聊这个话题。 在准备好接纳网络数据包之前,Li…

python---基础小总结

1.常量和布尔值相加 当常量和布尔值相加的时候,如果是True就视为1来和常量相加. 反之,如果是False的话就视为0和常量相加. 但是这样的操作是没有任何意义的! 2.EG:以下情况是会报错的! 3.EG:加不加分号都可以,但是最好不加

相机的格式

图片的格式大体上可以分为yuv格式和RGB格式,以及png,jpg格式; 其中yuv格式对应的摄像头的格式可以是YUYV、UYVV、YVYU、VYUY; rgb格式的图片对应的摄像头格式为RGB,BGR,ARGB8888格式; 一、RGB8888和ARGB8888像素格式如果搞混了…

网站反爬虫策略的分析与研究

随着互联网的发展,爬虫技术也越来越成熟,越来越多的网站开始采取反爬虫策略来保护自己的数据和资源。以下是网站反爬虫策略的分析与研究: IP封禁:网站可以通过封禁某些IP地址来防止爬虫的访问。这种方法比较简单,但是容…

使用ChatGPT设计多选题

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Spring-Retry实现及原理

前言 重试,其实我们其实很多时候都需要的,为了保证容错性,可用性,一致性等。一般用来应对外部系统的一些不可预料的返回、异常等,特别是网络延迟,中断等情况。还有在现在流行的微服务治理框架中&#xff0…

PDF4NET 13.1.0 Crack

PDF4NET 13.1.0 添加对云多边形和云方形注释的支持。 2023 年 6 月 1 日 - 16:50 新版本 特征 PDF4NET 添加了对 Cloud polygon 和 Cloud square 注释的支持。在文本标记注释中添加了对四点的支持。重大变化:重构了圆形、方形、折线和多边形注释的边框。PDF4NET.Ren…

Linux-线程基础

Linux线程基础 一,线程概念什么是线程Linux如何实现的线程 二,页表与虚拟内存虚拟内存多级页表 三,线程的特点线程的优点线程的缺点线程异常线程用途线程与进程比较 四,线程控制创建线程线程终止线程等待线程取消线程分离 五&…

python+vue宠物用品商城网站系统3zy71

依照这一现实为基础,设计一个快捷而又方便的网上宠物管理系统是一项十分重要并且有价值的事情。对于传统的宠物管理控制模型来说,在线宠物管理系统具有许多不可比拟的优势,首先是快速更新宠物分类、宠物信息、热销排行榜、宠物寄养&#xff0…

【嵌入式烧录/刷写文件】-1.8-S19文件转换为Hex文件

案例背景(共5页精讲): 有如下一段Motorola S-record(S19/SREC/mot/SX)文件,将其转换为Hex文件。 S0110000486578766965772056312E30352EA6 S123910058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576775B S123912078797A7B7C7D7E7F8081…

CodeWhisperer 初体验

今年算是 AI 正式破圈的一年,无数的工具,产品横空出世。无论在面向企业的大语言模型,还是帮助个人的 AI 工具,数不胜数。其中关于 AI 编程助手领域,近年来也涌现了很多不错的产品,例如 Copilot, Cursor, 还…

网络爬虫技术在搜索引擎中的应用

网络爬虫技术在搜索引擎中扮演着非常重要的角色,主要应用在以下几个方面: 网页抓取:搜索引擎需要从互联网上抓取大量的网页,以建立自己的索引库。网络爬虫技术可以帮助搜索引擎快速、高效地抓取网页。 网页解析:搜索引…

vue 自适应的方法

1、使用 filter来处理。 2、使用vue3.x中的 filter ()方法,但是要注意 filter ()方法的返回是一个字符串,在进行渲染时可能会有问题。 3、使用 react. js中的 require ()方法&#x…

实时数仓中数据实时输出的思考与实现

随着数据量不断增长以及提升企业竞争力的需求增长,实时数仓已经成为了许多业务和组织的重要数据架构之一。在实时数仓中,数据实时输入和数据实时分析是关键步骤,但同样重要的是如何将处理后的数据输出到各种目标上。本文将探讨实时数仓中数据…

亚马逊正常购物下单流程是怎么样的?

当您想要在亚马逊上购物时,您可以按照以下步骤进行: 1、登录亚马逊账户:在亚马逊的官方网站上,使用您的亚马逊账户进行登录。如果您还没有账户,可以在网站上注册一个新账户。 2、浏览商品:在亚马逊首页上&…

CASAIM受邀参加广东省科学院幼儿园举行的第二届STEAM科技节暨庆“六一”科普嘉年华活动

今年6月1日是第63个“六一”国际儿童节,恰“接棒”第7个全国科技工作者日。CASAIM受邀参加广东省科学院幼儿园举行的第二届STEAM科技节暨庆“六一”科普嘉年华活动,展示高精度的三维扫描和3D打印技术,为广大儿童送上精彩的科普大礼。 从小朋友…

视图及其缩放

相机控制 在本课中,您将学习如何通过使用 ViewCube 更改模型视图来检查您的设计。 学会环顾四周 在创建设计时,能够从各个方面看到您的设计会有所帮助。 让我们了解如何更改视图。 你能旋转你的视图看看谁在幕后吗?ViewCube(…

最新office365个人和家庭版下载及功能介绍

到了台新联想笔记本,想试试随机带的office365,才发现要有microsoft账户,要重新注册账号。 搞了一圈,很麻烦,发现微软登陆帐号时一直在转圈圈,而无法完成登录。 大概率还是因为服务器在海外的原因。 于是索性…

【企业化架构部署】Apache配置与应用

文章目录 一、构建虚拟web主机1.概述2.httpd服务支持的虚拟主机类型3.构建虚拟Web主机3.1基于域名的虚拟主机3.2基于IP地址的虚拟主机3.3基于端口的虚拟主机 4.Apache连接保持5.Apache访问控制 二、Apache日志管理rotatelogs分隔工具 三、总结1.Web虚拟主机部署步骤2.网页根目录…

【UE5 新手向】网络同步1 —— 开启 Actor 的位置网络同步

新建一个第三人称 C 项目 在播放设置中,将 Number of Players 改为2,并将 Net Mode 改为Play As Listen Server。 播放游戏,可以发现角色默认开启了同步。 停止播放,选中场景中的某个物体。 在 Details 面板选择新建蓝图。 选…