mysql - SQL 查询破坏了我们的游戏! (后端服务器已满)

标签 mysql sql amazon-web-services mysql-workbench amazon-rds

我们有一个 Facebook 游戏,它将所有持久数据存储在大型 Amazon RDS 实例上运行的 MySQL 数据库中。我们的一张表的大小为 2GB。如果我在该表上运行任何需要超过几秒的查询,我们的游戏执行的任何 SQL 操作都将失败并出现错误:

HTTP/1.1 503 服务不可用:后端服务器已满

这显然会拖垮我们的游戏!

我在这些时间段内监控了 RDS 实例上的 CPU 使用情况,虽然它确实出现了峰值,但并没有超过 50%。之前我们使用的是较小的实例大小,但它确实达到了 100%,因此我希望只需投入更多 CPU 容量即可解决该问题。我现在认为这是开放连接数量的问题。然而,我只使用 SQL 8 个月左右,所以我不是 MySQL 配置方面的专家。

我是否可以更改一些配置设置以防止这些查询使服务器过载,或者我应该在游戏运行时不运行它们?

我正在使用 MySQL Workbench 来运行查询。

任何帮助将不胜感激 - 谢谢!

编辑:

这是一个例子......

SELECT * 
FROM BlueBoxEngineDB.Transfer 
WHERE Amount = 1000 
AND FromUserId = 4 
AND Status='Complete';

表格如下所示:

TransferId  Started  Status  Expires  FromUserId  ToUserId  CurrencyId  Amount  SessionId

1177    2012-06-04 21:43:18 Added       150001      2           4           1   12156
1179    2012-06-04 21:48:50 ISF         150001      2           4           1   12156
1181    2012-06-04 22:08:33 Added       150001      2           4           25  12156
1183    2012-06-04 22:08:41 Complete    150001      2           4           50  12156
1185    2012-06-04 22:08:46 Added       150001      2           4           200 12156

最佳答案

您应该真正考虑运行高可用性 RDS 并为其设置只读副本。这样您就可以在副本上随心所欲地运行复杂的查询,而不会干扰生产数据库。

2GB(大小)的数据库实际上并没有那么大。如果您尝试查询的表上有正确的索引,则不应锁定数据库。

最重要的是,如果您不知道它将做什么,请不要在高容量生产数据库上运行查询。从上面的评论可以看出,您显然不是一位经验丰富的数据库管理员。没关系。在大容量服务器上工作对您来说肯定是一次学习经历,只是尽量不要让您的类(class)让您的服务崩溃。同样,这就是为什么在尝试对大型表进行查询之前拥有副本或创建数据库快照并设置测试数据库是一个非常好的主意。

关于mysql - SQL 查询破坏了我们的游戏! (后端服务器已满),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13633959/

相关文章:

MySQL:从select distinct中选择所有行

sql - 常量值如何影响 Joins 的 ON 子句?

sql - 插入记录后如何计算出数据库中有多少表受到影响?

mysql - SQL 查询 - JOIN 和 UNION

amazon-web-services - 如何获取 Athena 中字符串列的长度?

amazon-web-services - 连接到 Amazon EC2 实例突然挂起

linux - 通过 ELB 和 Linux 将 Amazon 上的 https 流量重定向到 S3 上的静态站点

ios - 如何通过 iOS(swift) 将 Firebase Auth 与 MySQL DB 同步?

mysql - 如何使用一张表到一列关系创建关系表

php - MySQL中所有行都具有TRUE值后如何触发INSERT函数?