MySQL实例IOPS使用率高的原因和解决方法

更新时间:
复制为 MD 格式

问题描述

MySQL实例在日常使用中会出现实例IOPS使用率高的情况,本文将介绍造成该状况的主要原因和解决方法。

问题原因

  • 实例内存满足不了缓存数据或排序等需要,导致产生大量的物理IO。

  • 查询执行效率低,扫描过多数据行。

解决方案

您可以通过以下任意一种途径或结合使用两种途径来解决IOPS使用率高的问题:

  • 生成实例当前诊断报告,推荐使用该方式。

  • 终止问题查询。

查看实例当前诊断报告

  1. DMS控制台上登录数据库

  2. 选择性能>一键诊断

  3. DAS管理控制台即可查看实例的实时会话、死锁及慢SQL情况。

    一键诊断总览页面以层级拓扑展示数据库健康状态,除实时会话、死锁及慢 SQL 外,还提供活跃会话(连接数、允许最大连接数、连接使用率)、资源诊断(CPU 利用率、内存利用率、IOPS 使用率)、QPS(均值、峰值、环比/同比增长率)、全量SQL空间使用(磁盘使用率、剩余可用空间、日均增长量)等诊断面板,其中死锁SQL面板以高亮标注,便于快速定位问题。

  4. 单击对应模块的详情链接,查看做出相应优化。

终止问题查询

您可以通过DMS控制台上的实例会话或命令查询和终止问题查询,建议您将物理读(Physical_sync_readPhysical_async_read)高的查询终止掉。

说明
  • RDS实例在连接数打满的情况下,无法通过DMS或者MySQL命令行工具连接登录实例。

  • 如果无法通过DMSMySQL命令行工具连接,建议您先在RDS控制台的参数设置中将wait_timeout参数(单位秒)设置为比较小的值(比如60),让RDS实例主动关闭空闲时间超过60秒的连接,以便稍后可以通过DMS或者MySQL命令行工具连接访问实例。

通过实例会话终止问题查询

在实例诊断报告不可用或者无法立刻使用其建议的情况下,可以先通过DMS控制台上的实例会话来终止问题查询。

说明

需要应用方面首先停止提交问题查询,否则会出现不断终止、不断出现的情况。

  1. DMS控制台上登录数据库

  2. 选择性能>实例会话

  3. 选中需要结束的会话,单击结束会话

通过命令终止问题查询

  1. 通过MySQL命令行工具连接实例。

  2. 通过以下方式,查看会话情况,来确定问题会话。

    • 通过执行show processlist;命令查询。

      show processlist

    • 若当前执行会话比较多,通过执行show full processlist;SQL语句来查询。

  3. 执行kill [$ID]命令,终止相关会话。其中[$ID]为上述步骤查询结果中的ID列值。

适用于

  • 云数据库RDS MySQL