最近我们的RDS数据库出现了问题,大约每15-20分钟,数据库在一两分钟内就没有响应。使用无响应的GB的可用磁盘空间然后重新获得。很难解释,所以我附上了监控图的截图,这是1小时的时间。有没有人知道最新情况,或者我应该从哪里开始看?
答案 0 :(得分:7)
磁盘空间利用率让我觉得你在磁盘上的临时表中排序的查询结果集非常大。要检查,请在峰值发生时查找计数器状态变量Created_tmp_disk_tables
的增加。
mysql> show global status like 'Created%';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| Created_tmp_disk_tables | 56 | <-- this is probably the culprit
| Created_tmp_files | 23 |
| Created_tmp_tables | 3177 |
+-------------------------+-------+
如果是,您可能会遇到一些查询,这些查询会导致临时表足够大,以至于它们无法容纳在内存中,并且必须假脱机到磁盘。遗憾的是,您无法找到这些临时结果集的大小,但我猜它的大小为15 GiB。
您应该弄清楚哪些查询正在生成巨大的临时表并尝试优化这些查询。不幸的是,MySQL没有良好的日志记录信息来跟踪这一情况,而且Amazon RDS不允许您使用增强的MySQL分支替换MySQL的存储,例如Percona Server,它会在慢查询日志中为您提供此信息。
因此,您必须转到开发环境并对SQL查询进行一些代码审查,逐个运行EXPLAIN,并确定哪一个是瓶颈。