我有一个 RDS 实例,花费了我很多钱。从我在亚马逊上的帐户活动来看,我发现该实例在过去 7 天内收到了大约 800,000,000 个 IO 请求。
为了让您稍微了解一下,我的应用程序每天仅获得大约 6,000 次独立访问,并且不会建立那么多的数据库连接。
那么,IO 请求到底是什么?为什么这个数字会如此高?如果有必要,我愿意尽一切努力降低我的应用程序的成本,但我不确定到底发生了什么。
我将非常感激您的想法。
答案1
啊,亚马逊网络服务。最大的资金浪费之一。非常好,但并不总是便宜。实际上,几乎从来都不便宜,而且总是很难估算费用。
IO 请求是一种磁盘操作。无论是读取还是写入,您基本上都会根据从系统获取的数据量来付费。这太疯狂了。
您可以通过查看 iostat 来估计您正在发出的 IO 请求。
7 天内 800,000,000 次 IO 请求。相当于 ~=1300 IOPS。哇。这性能真是快得惊人。
例如,一个中型网站数据库的大小可能是 100 GB,预计一个月内每秒平均有 100 次 I/O。这意味着每月的存储成本为 10 美元(100 GB x 0.10 美元/月),每月的请求成本约为 26 美元(约 260 万秒/月 x 100 次 I/O/秒 * 0.10 美元/百万 I/O)。
从http://aws.amazon.com/ebs/页面底部约 90% 处
如果您真的想减少这方面的成本,那么可能是时候看看 RDS 是否真的最适合您的应用程序和项目预算了。
如果您每天的点击量只有 6k,那么使用专用服务器(最好是 2 个,一个用于数据库,一个用于 Web 服务)可能会在成本和性能方面做得更好。实际上,做出这样的决定有点困难,因为您没有过多地谈论您的应用程序。
答案2
我有一个 RDS 实例,它花费了我很多钱。
“云服务”并不意味着这些东西会花你几分钱。基本上,I/O 请求是需要从磁盘获取的任何东西(即数据库或索引页)。如果你有一个大型数据库和使用全表扫描的查询,这绝不令人惊讶。你可以考虑通过启用将“未索引”查询记录到 MySQL 慢速日志的选项并为相应的列添加索引。由于您无法直接编辑配置文件,因此请使用RDS 参数组配置设置log-queries-not-using-indexes
和查询mysql.slow_log
表中的日志条目。
另外,考虑运行MySQL 调优入门脚本将您的 AWS 实例与数据库实例进行比较,以进行一般性能分析,看看更大的实例是否会有所帮助,因为可用于缓存的内存量更大,从而减轻磁盘负载。该脚本评估了许多配置参数和性能计数器,以提供有关可能瓶颈的一些信息并提供一些通用建议。