我想了解 IOPS(每秒 I/O)以及它如何影响 DB CRUD 操作

Ale*_*lex 9 mysql performance benchmark query-performance

我想为我的数据库 (MySQL) 获得一个运行 InnoDB 引擎的专用服务器。InnoDB容量中有这个选项,您可以在其中定义IOPS。假设我有一个 SATA 72K-RPM HDD,允许 100 IOPS。这是否意味着我的数据库每秒只能运行 100 个并发 SQL 查询,还是意味着在 1 秒内执行 100 个单个读取或写入?数据库如何处理在这样的硬件上启动的每秒 3000 次查询?我有点困惑,所以请为我解释一下。我想在我的专用服务器上执行 200 多个查询。

Jus*_*ave 11

硬盘驱动器的 IOPS 告诉您特定驱动器每秒可以执行多少 I/O 操作。由于随机读取、随机写入、顺序读取和顺序写入具有不同的性能特征,如果您查看单个数字,则意味着这是这四个数字的加权平均值,代表了一些工作负载。该工作负载可能与数据库实际执行的工作负载相似,也可能不同,因此您的系统可能最终每秒获得更多或更少的操作。

假设 SQL 查询执行物理 I/O(许多查询不需要执行任何 I/O,因为它们只是从数据库内存或文件系统缓存或 SAN 缓存中已有的数据中读取),倾向于执行许多 I/O 操作。如果您的查询实际上是在执行物理 I/O,则单个查询可以轻松地每秒执行 100 次 I/O 操作。您可能同时运行 100 个查询,每个查询每秒只能执行 1 个物理 I/O 操作,但这可能意味着所有 100 个查询将花费不可接受的时间来返回。

实际上,如果您需要每秒处理 3000 次查询,则需要通过确保缓存所需的数据(最好由数据库)来确保绝大多数查询不需要进行物理 I/O。并且您需要将 I/O 分布在相对大量的驱动器上(使用适当的 RAID 配置)以增加系统可以执行的总 IOPS。这种容量规划需要对您的应用程序、您的数据、每个查询可能真正需要多少 I/O 等有相当好的了解。而且您可能需要平衡成本与性能——添加内存或添加驱动器或更改 RAID 配置将涉及必须考虑的成本、性能和可用空间之间的不同权衡。