跳至内容

升级我的 Amazon RDS for MySQL 或 Aurora MySQL 兼容版数据库实例后,如何解决 CPU 使用率高和查询性能缓慢的问题?

2 分钟阅读
0

我的 Amazon Relational Database Service (Amazon RDS) for MySQL 或 Amazon Aurora MySQL 兼容版数据库实例进行了重大版本升级。现在,我遇到了查询性能缓慢和 CPU 使用率高的情况。

解决方法

先决条件:

为避免误判问题,请正确组织故障排除工作流程并使用 AWS 工具和服务。有关详细信息,请参阅以下文章:

检查是否存在升级特定的问题

当您升级实例(例如从 Aurora MySQL 兼容版 5.7 升级到 Aurora MySQL 兼容版 8.0)时,升级可能会删除该实例的某些功能。

如果您的实例使用已弃用的功能,则您的实例性能可能会出现问题。要检查您的实例版本是否使用了影响工作负载的已弃用功能,请参阅 Amazon Aurora MySQL 兼容版的发行说明。或者,请参阅 MySQL 网站上的 MySQL 8.0 Release notes(MySQL 8.0 发行说明)

在以下示例场景中,您将 Aurora MySQL 兼容版 5.7 集群升级到 Aurora MySQL 兼容版 8.0。升级后,即使查询、执行计划和工作负载模式相同,写入器实例 CPU 也会增加一倍。

要解决此问题,您可以查看您的 Amazon RDS for MySQL 或 Aurora MySQL 兼容版集群的指标。根据问题,比较先前版本和升级版本中集群的相关指标。

Aurora MySQL 兼容版 5.7 指标示例:

SHOW GLOBAL STATUS LIKE 'Qcache%';

Aurora MySQL 兼容版 8.0 指标示例:

`mysql> SHOW STATUS LIKE 'Qcache%';`  
`+-------------------------+--------+`  
`| Variable_name | Value |`  
`+-------------------------+--------+`  
`| Qcache_free_blocks | 36 |`  
`| Qcache_free_memory | 138488 |`  
`| Qcache_hits | 79570 |`  
`| Qcache_inserts | 27087 |`  
`| Qcache_lowmem_prunes | 3114 |`  
`| Qcache_not_cached | 22989 |`  
`| Qcache_queries_in_cache | 415 |`  
`| Qcache_total_blocks | 912 |`  
`+-------------------------+--------+`

在此示例中,Aurora MySQL 兼容版 8.0 删除了一项从缓存中提供查询以避免完全执行的功能。如果没有此功能,Aurora MySQL 将完全执行所有查询并将工作负载增加一倍。

如果您看到实例 CPU 出现峰值,请查看以下指标:

  • 查询
  • Com_select
  • Innodb_rows_read

要解决这些指标的问题,请完成以下任务:

其他故障排除步骤

您可以将先前版本的执行计划与升级版本的执行计划进行比较,以更好地解决问题。要比较参数组设置,请使用 EXPLAIN FORMAT=JSON 查询。这两个版本中的关键配置(例如 innodb_buffer_pool_size)必须相同。有关详细信息,请参阅 MySQL 网站上的 Configuring InnoDB Buffer Pool Size(配置 InnoDB 缓冲池大小)EXPLAIN Statement(EXPLAIN 语句)

最佳做法是使用 Aurora 克隆功能在暂存环境中测试升级。您可以使用 Sysbench 等工具模拟暂存环境中的工作负载。然后,使用 AWS 数据库洞察和增强监控等 AWS 工具监控关键指标。

AWS 官方已更新 3 个月前