Laravel + MySQL + AWS - 负载测试 1,000 个并发机器人性能问题

问题描述 投票:0回答:1

在我们的测验应用程序平台上运行 1000 个机器人的负载测试时,我们遇到了一些性能问题。

我们之前做的负载测试是500个机器人,平均响应时间是0.333秒。 AWS 中一切都很顺利,没有什么令人担忧的(完美!)

但是,当使用 1,000 个机器人进行测试时,平均响应时间达到 2.61 秒……(并不完美!)

在查看 AWS 时,我看不到任何问题或限制。事实上,AWS Aurora 在测试期间仅飙升至 10% CPU。

在监控工具 Sentry.io 中,我们收到一条警报,称其中一个 SQL 查询运行缓慢,响应时间为 785.25 毫秒。该查询负责通过 slug 参数从数据库获取测验数据。这是一个非常高性能的查询,具有正确的索引设置,不应该花费这么长时间。

db.sql.query - select *
from `quizzes`
where `slug` = ?
limit 1

这让我觉得 AWS 中有些东西导致了这种情况..可能是由于冷启动或 DB/Lambda 连接配额限制?然而,通过查看仪表板和见解,我看不到任何可以证实这一点的内容。

我唯一能看到的是在测试期间 wait/io/table/sql/handler 等待事件将总数据库负载飙升至 120(见下文)。但我们此时仍然只使用 2 个 CPU,并且仍然低于我们最多有 6 个 ACU (12 GiB),因此不应成为瓶颈。 enter image description here enter image description here enter image description here enter image description here enter image description here

任何人都可以建议如何在这种情况下提高性能吗?

mysql laravel amazon-web-services
1个回答
0
投票

MySQL 的设计目的不是拥有 1000 个“同时”连接。另一方面,它的设计目的是为了处理分散在一小段时间内的大量数据。 服务器为每个连接提供平等的继续进行的机会。这导致了瓶颈。 (想象一下商店里同时有 1000 名购物者。)

我建议将

max_connection = 500

(或更少)和

back_log
设置为其余部分。
另外,让我们看看是否可以加快查询速度。 

slug

有索引吗? (请提供

SHOW CREATE TABLE quizzes;
以及
slug
的基数。
    

© www.soinside.com 2019 - 2024. All rights reserved.