问题
MySQL 是跑在 Docker 上,在某段时间内 MySQL 磁盘读取飙升,导致服务器卡死。
这是因为查询扫描行数过多导致的磁盘读取飙升吗?还是有其他原因。
磁盘读取飙升的问题该如何得到解决?优化查询 SQL ?换阿里云的 RDS ?
有大佬能解答下吗?
服务器配置
实例规格:ecs.c8i.xlarge
CPU:4 核 vCPU
内存:8G
磁盘:ESSD P1 40G
MySQL 配置
[mysqld]
slow_query_log=ON
long_query_time=3
innodb_buffer_pool_size = 1536M
innodb_log_file_size=256M
innodb_log_buffer_size=32M

相关截图
阿里监控:

ATOP ( 10 分钟):

慢 SQL 日志:

应该给阿里云提工单

已经找过售后了,售后让我们从业务侧优化 MySQL 内存使用和调用逻辑

楼上两个也是神人

6G 显存跑 32B 大模型,跑不了,然后跑去问显卡厂商要解决方案

我也没要解决方案呀🤣

歪个楼 为什么在 docker 中跑?生产环境吗

特定查询有问题?扫 3.6M 行返回 438 行,可以 explain 一下看看。

被某个 job 拉爆了吧

生产环境,图方便吧,数据文件还是挂载在宿主机上

加内存、调升 ESSD 等级,阿里云服务器这个问题挺蛋疼,不知道别的云服务商怎么管控的

然后盘 40G 太小了,直接用默认的系统盘跑的?换个容量更大的数据盘,PL0 就行但空间要大,不然 IOPS 就那一点

出现好几次 IO 读取飙升的情况了,时间段也是随机,我就没怀疑是某个 job 的原因

是直接在默认系统盘跑的。好的,之前 PL0 升 PL1 IOPS 也没加多少,看来要换个容量大的盘
9lPEe77

我之前在阿里云的宝塔也遇到了。限制 MySQL 资源占用就解决了,你这个已经限制还这样就不知道怎么解决了

有一条 count 查询没走索引,调用 33 次,扫描 2.15M ,然后还有一些扫描条数多的都是走 ORM 框架查询,没有索引,是全表扫描, 但不知道为啥 MySQL 10 分钟 RDDSK 能有 30G

难说,但是我第一感觉就是查询有问题吃满 IO 。

就拆分一下表,做一些清洗后的数据到 redis ,减少一下查询压力。

这个不就是原因吗? 全表扫描是最消耗磁盘 io 的行为

招个 DBA 解决问题吧...
显然单纯的你们不会用数据库...
要不, 也可以尝试把数据盘容量开到 2TB 有效提升 iops

加内存,内存总量大于数据库文件大小*1.5 倍

开发不珍惜资源啊。。。。闭着眼睛往死里用啊。。。多半是某个 select 或者 update ,导致扫描了海量的 row

我也觉得这几天阿里云是有点问题的,这两天我测试一个 mysql 的业务,用了一台突发性能,虽然机器性能不高。但三个表,加起来不超过 50 列,500 条记录左右,BPS 能跳到 100M ,这肯定不正常,而且很短时间里恢复,后续也无法复现。我感觉是阿里云本身有什么进程在扫。但我都发生在半夜。

ESSD P1 40G 的 iops 如何。。。直接 ecs 上安装 docker 跑 mysql ????还是生产环境?

测测阿里云磁盘的性能吧,你就不会想着去跑数据库了

看下有哪些 slow sql 就基本知道排查方向了