一个MySQL 单表查询SQL,引起一次“故事”

发布时间:2020-04-14 03:16:06 作者:roidba
来源:网络 阅读:461

一、描述
故事的过程是这个样子的,MySQL 数据库有一张40多G的大表,开发人员执行了一个单表查询,结果我就收到了一个磁盘空间满的告警。一下子就不淡定了,谁在搞事情,脑海里各种可能行想了一遍,想到的最多的就是ibtmp1爆了,第一时间线上看一下,查到了最大的那个文件,结果和想的一样。这里我们要看SQL是怎么写的,表结构是什么样子,然后和官网对比,MySQL在查询的时候有很多可能会使用磁盘临时表,包括表连接、排序、大字段等等。

二、解决方法
临时解决方法:
1、临时扩一下硬盘
2、直接重启

终结解决方案
操作步骤:
1、检查数据库状态
ps -ef|grep mysql

2、检查主备库状态
show slave status \G;

3、检查数据库关闭参数,要求为1
show variables like 'innodb_fast_shutdown';

4、关闭同步进程
stop slave;

5、关闭数据库
shutdown;

6、设置数据库临时表空间参数
#/etc/my.cnf
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:10G

7、启动数据库服务、同步线程
mysqld_safe --defaults-file=/etc/my.cnf &
start slave;
show slave status\G;

8、检查数据库临时表空间参数
show variables like 'innodb_temp_data_file_path';

9、查看ibtmp1文件大小
du -sh ibtmp1

三、小洁
1、永远不要小视一条select xxx from tab;如果你不知道你在干嘛,不知道其中的风险,不要在生产系统敲任何一个指令。
2、要有敬畏之心。

推荐阅读:
  1. mysql基础(七)select语句
  2. MySQL常见的SQL联表细节及JOIN的执行过程

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

innodb_temp

上一篇:个别用户outlook中无法显示对话历史记录

下一篇:(一)Linux基本描述,基本命令以及环境变量

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》