最近发现我们的 RDS 数据库出现问题,大约每 15-20 分钟,数据库就会停止响应一两分钟。当无响应 GB 的可用磁盘空间被使用然后重新获得时。很难解释,所以我附上了监控图的截图,这是一个 1 小时的时间段。有谁知道发生了什么,或者我应该从哪里开始寻找?
问问题
1627 次
1 回答
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一个一个地运行它们,并确定哪一个是瓶颈。
于 2011-07-13T01:27:13.713 回答