一个MySQL 单表查询SQL,引起一次“故事”
2019-07-08 21:07
1146 查看
一、描述
故事的过程是这个样子的,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、要有敬畏之心。
相关文章推荐
- 一个很厉害的sql查询(mysql)
- 一个空格引起的血案,记在servlet和mysql使用字符串的一次经验
- sql (mysql)实现查询某一个经纬度周围500米距离的餐馆,数据库存放所有餐馆的经纬度。
- mysql 中查询一个字段是否为null的sql
- MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?
- mysql一个用户SQL慢查询分析,原因及优化
- 一个mysql查询字段重复的sql语句
- MySQL中明知道查询结果只有一个,SQL语句中使用LIMIT 1会提高查询效率
- 一个sql提问,引起的研究。关于union all 中,嵌套查询和直接查询的效率比较。
- 记一次mysql语句因为字符优先级的问题引起的查询结果不一致问题
- mysql 用sql语句查询一个表中的所有字段类型、注释
- mysql 查询一个表中有的记录且在另一个表中无相关的记录sql
- oracle与mysql分页查询语句sql
- 如何查询mysql中执行效率低的sql语句
- 查询mysql中执行效率低的sql语句的方法
- 【MySQL】基于MySQL的SQL优化(三)——对子查询进行优化
- SQLServer中用T―SQL命令查询一个数据库中有哪些表的sql语句
- 发布一个用于大大提升Sql查询的锋利的武器:SqlEmitter
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 利用MySQL的一个特性实现MySQL查询结果的分页显示