首页 > 数据库 >MySQL 磁盘爆了,是 optimize table 的锅

MySQL 磁盘爆了,是 optimize table 的锅

时间:2023-06-27 11:13:29浏览次数:43  
标签:使用率 recreate 磁盘 MySQL table analyze optimize

2023-06-26 22:17左右,收到某系统的主库磁盘使用率告警。2023-06-26 23:02左右收到该系统的从库磁盘使用率告警。

收到告警后,登录数据库查看各表的磁盘使用。

经分析发现DB存在一个当日的备份表t_eap_sys_navigation_log_bak_20230626 ,且在OS层面存在 命名异常的表文件(#开头),按照经验推断#开头为中间表,磁盘使用率告警恢复后,该中间表也不存在了。

通过proxysql中间件获取t_eap_sys_navigation_log_bak_20230626的操作记录,该表的确存在   OPTIMIZE table  与 ANALYZE table 行为。

真相大白,经核实,有同事对t_eap_sys_navigation_log实施 rename -> ANALYZE -> OPTIMIZE 操作。 OPTIMIZE table 会 recreate + analyze table,而 recreate 18G大表会产生 18G的中间表,造成了磁盘使用率的急剧上升, recreate 完成后 同步到从库且 会清理中间表,磁盘使用率恢复正常。

MySQL 中 optimize table、analyze table 和 alter table engine 的区别

  • alter table t engine = InnoDB(也就是 recreate)

  • analyze table t 不是重建表,只是对表的索引信息做重新统计,没有修改数据,这个过程中加了 MDL 读锁;

  • optimize table t 等于 recreate + analyze。

  • optimize table、analyze table 和 alter table engine 都会由主库同步到从库,需要注意大表recreate的磁盘空间消耗,主从延迟等影响

标签:使用率,recreate,磁盘,MySQL,table,analyze,optimize
From: https://www.cnblogs.com/andy6/p/17508141.html

相关文章

  • 系统断电后,MySQL重启失败:[ERROR] Binlog has bad magic number; It‘s not a binary lo
    系统断电后,MySQL重启失败:[ERROR]Binloghasbadmagicnumber;It‘snotabinarylogfilethatcanbeusedbythisversionofMySQL [ERROR]Can'tinittclog[ERROR]Aborting在Windows系统上,Mysql服务没启动,在启动Mysql服务时,报以下错误: 系统出错。 发生系......
  • docker compose部署mysql数据库
    1.想要达成的目标通过dockercompose来部署mysql,并实现一些列需求在mysql容器初始化时设置字符类型设置mysql容器的时区为中国时区设置mysqlroot密码,采用.env传入参数初始化时创建一个数据库初始化时创建用户名和密码挂载本地目录到容器内容器初始化时执行脚本,导入......
  • Optimizing Disk I/O tmp_table_size max_heap_table_size 磁盘使用率
     RDSMySQL临时文件导致实例磁盘空间满且出现“锁定中”状态https://help.aliyun.com/document_detail/101763.htmlRDSMySQL临时文件导致实例磁盘空间满且出现“锁定中”状态更新时间:2023-05-2611:22产品详情相关技术圈 问题描述阿里云云数据库RDSMySQL......
  • javascript连接MySQL
    varmysql =require('mysql');varconnection=mysql.createConnection({  host  :'localhost',  user  :'root',  password:'password',  port:'3306',  database:'nufix'});connecti......
  • 《MySQL 实战 45 讲》学习笔记一
    一条SQL查询语句是如何执行的?MySQL的基本架构示意图(语句执行流程)  ......
  • C# mysql MySqlDataAdapter fill(dataset) 字符串格式错误
    MySqlDataAdapter fill(dataset)时候报错字符串格式错误。排查两天发现是mysql数据表内字段设计错误,datetime格式的字段长度设置错误,应设置为0,原先设置为6.代码如下try{using(MySqlConnectionconnection=newMySqlConnection(connectio......
  • vs版本与version(内部版本号)的关系表table
    为什么要查vs版本与内部verion的对应关系?因为c++的项目需要对应的vs版本,给大型的c++项目升级vs版本是个耗时的工程,所以一般情况下开发者都会安装多个版本的vs。对于sln文件,以文本形式打开,可以看到一个version,这个是vs内部版本号,而我们安装电脑上的是以年份命名的版本。vs版本......
  • 第六章 使用Mysqli操作数据库
    demo1.php<?php//使用mysqli对象操作数据库//创建mysqli对象(资源句柄)$_mysqli=newmysqli();//连接数据库1.主机名(ip)2.账户3.密码4.数据库//mysqli_connect()函数==$_mysqli->connect()$_mysqli->connect('localhost','root','yangfan',......
  • MYSQL 把小于50个字节的数据找出来
    SELECT aid, typeid, body, redirecturl, templet, userip FROM dede_addonarticle WHERELENGTH(body)<50; length是一个函数,判断字符的长度,<50应该写在外面 PS:把少于50个字节的文章查询出来 效果图:        ......
  • MySql InnoDB和Myisam的区别
    MyISAM和InnoDB讲解InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供......