V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
JiangZeYi
V2EX  ›  MySQL

MySQL 磁盘读取飙升,导致阿里云服务器卡死

  •  
  •   JiangZeYi · 12 天前 · 3140 次点击

    问题

    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
    

    相关截图

    阿里监控:

    Po7PFJD

    ATOP ( 10 分钟):

    NqFgFWr

    QLD3fDs

    慢 SQL 日志:

    yHquwHg

    第 1 条附言  ·  11 天前
    感谢各位的建议,这边已经换成高性能云盘的 RDS 了。
    34 条回复    2025-08-30 10:00:09 +08:00
    bronyakaka
        1
    bronyakaka  
       12 天前
    应该给阿里云提工单
    JiangZeYi
        2
    JiangZeYi  
    OP
       12 天前
    @bronyakaka 已经找过售后了,售后让我们从业务侧优化 MySQL 内存使用和调用逻辑
    cryptovae
        3
    cryptovae  
       12 天前   ❤️ 2
    楼上两个也是神人

    `6G 显存跑 32B 大模型,跑不了,然后跑去问显卡厂商要解决方案`
    JiangZeYi
        4
    JiangZeYi  
    OP
       12 天前
    @cryptovae 我也没要解决方案呀🤣
    6JSh5b6Q5Z2k
        5
    6JSh5b6Q5Z2k  
       12 天前
    歪个楼 为什么在 docker 中跑?生产环境吗
    msg7086
        6
    msg7086  
       12 天前   ❤️ 1
    特定查询有问题?扫 3.6M 行返回 438 行,可以 explain 一下看看。
    spritecn
        7
    spritecn  
       12 天前
    被某个 job 拉爆了吧
    JiangZeYi
        8
    JiangZeYi  
    OP
       12 天前
    @6JSh5b6Q5Z2k 生产环境,图方便吧,数据文件还是挂载在宿主机上
    yh7gdiaYW
        9
    yh7gdiaYW  
       12 天前
    加内存、调升 ESSD 等级,阿里云服务器这个问题挺蛋疼,不知道别的云服务商怎么管控的
    yh7gdiaYW
        10
    yh7gdiaYW  
       12 天前
    然后盘 40G 太小了,直接用默认的系统盘跑的?换个容量更大的数据盘,PL0 就行但空间要大,不然 IOPS 就那一点
    JiangZeYi
        11
    JiangZeYi  
    OP
       12 天前
    @spritecn 出现好几次 IO 读取飙升的情况了,时间段也是随机,我就没怀疑是某个 job 的原因
    JiangZeYi
        12
    JiangZeYi  
    OP
       12 天前
    @yh7gdiaYW 是直接在默认系统盘跑的。好的,之前 PL0 升 PL1 IOPS 也没加多少,看来要换个容量大的盘
    ![9lPEe77]( "9lPEe77")
    fenglingyu
        13
    fenglingyu  
       12 天前
    我之前在阿里云的宝塔也遇到了。限制 MySQL 资源占用就解决了,你这个已经限制还这样就不知道怎么解决了
    JiangZeYi
        14
    JiangZeYi  
    OP
       12 天前
    @msg7086 有一条 count 查询没走索引,调用 33 次,扫描 2.15M ,然后还有一些扫描条数多的都是走 ORM 框架查询,没有索引,是全表扫描, 但不知道为啥 MySQL 10 分钟 RDDSK 能有 30G

    msg7086
        15
    msg7086  
       12 天前
    难说,但是我第一感觉就是查询有问题吃满 IO 。
    gamefriends
        16
    gamefriends  
       12 天前   ❤️ 1
    就拆分一下表,做一些清洗后的数据到 redis ,减少一下查询压力。
    xmh51
        17
    xmh51  
       12 天前
    @JiangZeYi 这个不就是原因吗? 全表扫描是最消耗磁盘 io 的行为
    realpg
        18
    realpg  
    PRO
       12 天前
    招个 DBA 解决问题吧...
    显然单纯的你们不会用数据库...
    要不, 也可以尝试把数据盘容量开到 2TB 有效提升 iops
    yinmin
        19
    yinmin  
       12 天前 via iPhone   ❤️ 1
    加内存,内存总量大于数据库文件大小*1.5 倍
    hefish
        20
    hefish  
       11 天前
    开发不珍惜资源啊。。。。闭着眼睛往死里用啊。。。多半是某个 select 或者 update ,导致扫描了海量的 row
    BigShot404
        21
    BigShot404  
       11 天前
    我也觉得这几天阿里云是有点问题的,这两天我测试一个 mysql 的业务,用了一台突发性能,虽然机器性能不高。但三个表,加起来不超过 50 列,500 条记录左右,BPS 能跳到 100M ,这肯定不正常,而且很短时间里恢复,后续也无法复现。我感觉是阿里云本身有什么进程在扫。但我都发生在半夜。
    est
        22
    est  
       11 天前
    ESSD P1 40G 的 iops 如何。。。直接 ecs 上安装 docker 跑 mysql ????还是生产环境?
    loveshuyuan
        23
    loveshuyuan  
       11 天前
    测测阿里云磁盘的性能吧,你就不会想着去跑数据库了
    shiny
        24
    shiny  
       11 天前 via iPhone
    看下有哪些 slow sql 就基本知道排查方向了
    yayoi
        25
    yayoi  
       11 天前 via Android   ❤️ 1
    不加钱就找 dba 看,售后说的很清楚了。加钱的话阿里现在 rds 有 io 突发型的硬盘,和 pl1 费用一样,但是 io 不受容量限制,其他 io 限制还是有
    zhuwd
        26
    zhuwd  
       11 天前
    @est 用 docker 跑有什么问题吗,我司正准备这么干,如果数据目录直挂到宿主机的数据盘也会存在性能损耗?
    liuhan907
        27
    liuhan907  
       11 天前
    @zhuwd 几乎不存在可观测的差距
    est
        28
    est  
       11 天前
    @zhuwd 我理解宿主机就是 ecs 虚拟机?为啥不直接跑进程呢。。是 docker pull 更方便么?
    zhuwd
        29
    zhuwd  
       11 天前
    @est 运维起来更省心些,包括迁移、扩容之类的,也能做一些环境隔离
    JiangZeYi
        30
    JiangZeYi  
    OP
       11 天前
    @est 按照阿里的 IOPS 计算公式,40G 有 3800 IOPS 。实际 IOPS 没有跑过
    yh7gdiaYW
        31
    yh7gdiaYW  
       11 天前
    @JiangZeYi 你主贴里的图,IOPS 不已经快摸到 3.9k 了么?正好就是 40G PL1 的上限
    yh7gdiaYW
        32
    yh7gdiaYW  
       11 天前   ❤️ 1
    不过吞吐量也到 140 了,那 PL0 的话也快到顶了有一定风险,预算足够还是继续 PL1 然后把容量开大点
    esile
        33
    esile  
       10 天前
    建议直接买 rds
    fugu37
        34
    fugu37  
       8 天前
    用树莓派在 TF 卡上搭数据库 IO 性能恐怕都比楼主的服务器强🤣
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2719 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:44 · PVG 20:44 · LAX 05:44 · JFK 08:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.