我正在将 mysql 数据库的一部分迁移到 AWS。有问题的数据是 99% 写入的,每行大约有 1k 个 varchar 字段、一个日期时间和 4 个整数。
我估计在高峰时段我们需要每小时插入 20-25k 条记录。
我在当前数据库上运行 iostat -h,它报告了大约 40 tps。
如何确定我需要哪种类型的 IOPS?
我正在将 mysql 数据库的一部分迁移到 AWS。有问题的数据是 99% 写入的,每行大约有 1k 个 varchar 字段、一个日期时间和 4 个整数。
我估计在高峰时段我们需要每小时插入 20-25k 条记录。
我在当前数据库上运行 iostat -h,它报告了大约 40 tps。
如何确定我需要哪种类型的 IOPS?
你必须测试它。
您可以做一些信封计算来近似每个插入的 I/O 数量,将其乘以每秒的事务数,添加一些缓冲空间等,但仅测试它要容易得多。
最简单的做法是分配一个最佳猜测,然后返回并增加或减少它以匹配您的真实世界测试。这是使用基于云的环境的奢侈品之一,硬件更改的资本成本很低,并且此类更改通常只需要配置更新。使用 EBS 卷,您不能只增加 IOPS 的数量,还必须扩大卷的大小1。您始终可以创建一个新卷并复制您的数据。会有一些停机时间,但如果你的数据不是很大,它不应该太多,因为它是一个原始副本。
这是对所需 I/O 数量的猜测。同样,这只是一个猜测,因为具体情况取决于索引的数量以及您的流量是平稳还是尖峰。在 25K tx/hour 时,你有 ~7 tx/sec。每行的大小并不特别相关,因为它小于单个 I/O (4K) 的大小。每个事务将在 1-5 IOP 之间进行(主插入加上几个索引树插入),所以我们说 ~35/s。
我说从最低 100 IOPS 开始,并在必要时扩大规模。
我使用了基本的 iostat (iostat -h) 工具来了解我当前使用了多少 iops。据此,我推断如果我的负载量低于该负载量的 4 倍并使用该量,我将使用多少。对我来说,结果是 780 IOPS,所以我选择了 800 IOPS。
我使用 iostat 来确定我的应用程序正在执行的 IOPS 量。iostat 将此报告为 tps。KB/t 可帮助您确定传输量是否小于块大小 256 KiB。我以一秒的等待时间运行 iostat,即 iostat -w 1。