![IOPS——它们是什么以及它们代表什么?](https://linux22.com/image/1366696/IOPS%E2%80%94%E2%80%94%E5%AE%83%E4%BB%AC%E6%98%AF%E4%BB%80%E4%B9%88%E4%BB%A5%E5%8F%8A%E5%AE%83%E4%BB%AC%E4%BB%A3%E8%A1%A8%E4%BB%80%E4%B9%88%EF%BC%9F.png)
好的,从技术上来说我知道每秒输入/输出次数是。技术定义很棒,但我不理解更广泛的含义。我的知识基本上是:
- IOPS 是应用程序进行的输入和输出操作
- 有高清IOPS,内存IOPS,网络IOPS等。
- IOPS 可以是连续的,也可以是随机的(特定应用程序的平均值)
- 连续 IOPS 很好,随机 IOPS 不好。
但这就是我理解的深度。所以当有人问“你正在开发的应用程序的 IOPS 数量是高还是低?”我不知道这意味着什么。该应用程序是基于 Web 的,那么这是否意味着我需要计算 IIS 的 IOPS 还是仅计算我的 Web 应用程序的 IOPS?文件级 IO 并不多,但数据库流量很大。“平均值”是基于单个会话、一天内的所有会话、一周内的所有天数等吗?我如何判断我的数据库访问量是高还是低?什么是高,什么是低?我如何判断它们是连续的还是随机的?
一旦我弄清楚了这一切并理解了这一切意味着什么,我该如何做得更好?如何降低 IOPS 或将其从随机更改为顺序?或者我应该担心或为这些事情烦恼吗?有没有工具可以测量这些东西?例如,我如何查看我的数据库 IOPS 是多少?
答案1
除非您的 Web 应用程序非常简单,否则几乎肯定需要数据库作为后端。如果您希望 Web 应用程序支持许多同时使用的用户,那么您会发现数据库的速度对于确定网站的响应速度至关重要。所以这是您应该关注的重点。
除非您的 Web 应用程序是用户提交内容然后将其添加到数据库末尾的应用程序(在这种情况下您实际上不需要数据库),否则您将让用户执行需要从数据库的所有位置获取内容的操作。因此,您可以将数据库视为属于“随机 IOPS”类别。
旋转硬盘驱动器顺序读写速度比随机读写速度更快,因为寻找不同的磁道需要时间。支持 NCQ 的驱动器(如今所有新驱动器都支持该功能)可以在一定程度上缓解这种情况,方法是让驱动器确定其执行 I/O 的顺序,但这只能起到一点帮助。SSD 顺序写入速度比随机写入速度更快,尤其是当它们启用 TRIM 并且您正在写入刚擦除的闪存部分时。但是,由于您正在为许多唯一且随机的用户提供服务,因此您应该假设您的情况是随机 I/O 的最坏情况,因为您无法控制用户将要做什么。
在您的情形下,您可能更关心磁盘 IOPS,而不是网络 IOPS。因此,您需要监控数据库在一段时间内(一天、一个月和几个月内)的访问量,收集对您的系统有意义的信息。您需要确保您的数据库服务器有足够的 RAM 来缓存常用数据,并利用分区和正确索引等 SQL 概念。例如,您可能希望将数据库日志放在与实际数据库不同的物理磁盘上。这些是高级主题,需要您进行认真的研究。
我相信,如果您想深入了解 Web 应用程序正在执行的操作,那么 SQL Server 性能监视器和 SQL Profiler 就是您应该开始研究的。