我在我们的MySQL RDS部署中遇到了一个非常奇怪的问题。当一个复杂的存储过程被调用时,可能需要10多秒才能完成,所有其他对数据库的调用都会陷入僵局并被挂起。这包括对SHOW FULL PROCESSLIST的任何调用。注意,这些调用是来自外部其他会话。例如,耗时10-20秒的存储程序被我们的Web服务调用,但我试图执行任何查询或SHOW FULL PROCESSLIST都是来自我系统上的IDE,所以是完全不同的连接会话。
然而我的查询一直挂起,直到其他进程完成,而Amazon RDS报告MySQL的CPU使用率只有2.3%。
Heck,甚至在这些存储过程运行时打开到RDS的连接都需要很长时间,所以有什么地方出了很大的问题--就好像MySQL没有以任何异步的方式运行一样。
有什么想法吗,这是怎么回事?我是不是漏掉了RDS中一个简单的默认标志,关闭了异步处理?
这个问题是我们在AWS上使用的实例类,它实在是太小了。一旦我们将它更新为t2.medium,问题就消失了。不寻常的是,我们所运行的真的是没有什么密集的数据库;然而,似乎t2.micro类真的被设计成不在任何实际能力中使用。其中一个问题是价格在AWS中开始复合的速度非常快,即使是沙盒系统。一个小公司仅仅通过运行测试环境,就能很快找到超过1000美元的费用。考虑到AWS提供的服务和性能水平,这个费用是不合理的。