如何诊断极慢的 AWS RDS MySQL 性能?



我的数据库有大约 15 个表,每个表有 40 列,每个表有 10.000 行。 其中大部分带有 VARCHAR、一些索引和外键。

有时我需要重建我的数据库(设计缺陷,处理它(,这在本地大约需要 40 秒。现在,我正在尝试对 AWS RDS MySQL 5.75 实例执行相同的操作,但这需要很长时间,大约需要 40-50 分钟。上一次我不得不做同样的过程,它花费的时间不超过 5 分钟,仍然比当地的 40 秒多得多,但我对此感到满意。

我的互联网速度约为 35 Mbps 下载/5 Mbps 上传。 我知道它不快,但它是一致的,自从我上次重建以来它没有改变。

我启用了常规日志,但我只能看到插入查询,偶尔会有一些"SELECT 1"。 我确实有同样的空间来改进我的代码,但是,从 00:40:00 到 50:00:00,似乎还有其他事情发生。

关于如何诊断和找到瓶颈的任何想法? 谢谢

--

其他相关信息: 它是AWS的微型实例,所有相关监控指标基本持平:CPU为4%,可用存储空间为20.000 MB,可用内存为200 MB,写入IOPS约为2,5,服务器运行5.7.25 MySQL,1vCPU,1Gb RAM和20GB SSD。这与 3 个月前我上次重建数据库时相同。

SHOW GLOBAL STATUS: https://pastebin.com/jSrAzYZPSHOW GLOBAL VARIABLES: https://pastebin.com/YxD7dVhRSHOW ENGINE INNODB STATUS: https://pastebin.com/r5wffB5tSHOW PROCESS LIST: https://pastebin.com/kWwiyGwfSELECT * FROM information_schema...: https://pastebin.com/eXGBmetP

我没有对服务器配置进行任何重大更改,除了启用日志、最大化max_allowed_packets并将日志保存到文件。

在我的后端,我运行了一个 Flask 应用程序,当它收到 API 调用时,它会获取一堆腌制的对象并将它们全部添加到数据库中(将 Flask SQLAlchemy 类附加到列表中(,然后运行db.session.add_all(entries),尝试运行批量操作。localhost和我的远程服务器的代码都是相同的。

在三个特定的表中它确实变慢了,其中大多数带有 VARCHAR 列,但与我上次插入的内容没有什么不同 - 问题似乎是数据或代码的结构方式,或者至少看起来不合理,这将导致 20 秒(本地主机(到 40 分钟(托管服务器(时间, 特别是当其余表的工作方式基本相同时。

启用慢日志,设置 long_query_time=0,运行代码,然后将生成的日志通过 mysqldumpslow。

确定哪些查询对速度变慢的贡献最大,并从那里开始。

比较旧服务器和新服务器之间的配置。

此外,它们是MySQL的同一版本吗?5.6,5.7和8.0可以产生非常不同的执行计划(如果它们不同,5.6通常会提出合理的执行计划(。

每秒速率 = RPS

要为您的 AWS RDS 参数组考虑的建议

thread_cache_size=24  # from 8 to reduce threads_created count
innodb_io_capacity=1900  # from 200 to enable more use of SSD IOPS capacity
read_rnd_buffer_size=128K  # from 512K to reduce handler_read_rnd_next RPS of 21
query_cache_size=0  # from 1M since you have QC turned off with query_cache_typ=OFF

确定com_flush每小时运行 13 次的原因,并使其停止以避免表打开抖动。

我发现迁移到 RDS 后,我所有的数据库索引都消失了!它们未与架构和数据一起迁移。确保索引在那里。 此外,MySQL 查询缓存在 RDS 中默认处于关闭状态。这无助于初始查询的性能,但总体上可能会加快速度。 您可以将query_cache_type设置为 1 并为query_cache_size定义一个值。我还把thread_cache_size从 8 更改为 24,innodb_io_capacity从 200 更改为 1900 不知道它是否对您有帮助。 创建 AWS 数据库参数组对我配置和调整数据库变量有很大帮助。在这里你可以阅读更多: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html

最新更新