应用程序性能指标

我们评估应用程序的性能好坏时,会使用下面这样的性能指标:应用程序处理用户请求的速度如何、应用程序每个请求处理多少数据、应用程序在特定时间内处理多少请求、用户在提交其请求后必须等待多长时间才能获得响应。 与这些性能指标相对应的技术术语是:IOPS、吞吐量或带宽、延迟。

IOPS

IOPS 是指应用程序在一秒内发送到存储磁盘的请求数。 可以按顺序或随机读取或写入输入/输出操作。 OLTP 应用程序(例如在线零售网站)需要即时处理多个并发用户请求。 用户请求是插入和更新操作密集型数据库事务,必须通过应用程序进行快速处理。 因此,OLTP 应用程序需要很高的 IOPS。 此类应用程序处理数百万个小型和随机的 IO 请求。 如果应用程序是这样的,则必须在设计应用程序基础结构时针对 IOPS 进行优化。 在后面的“优化应用程序性能”部分,我们会详细讨论获取高 IOPS 必须考虑的所有因素。

将高级存储磁盘连接到大型 VM 时,Azure 会根据磁盘规格预配保障数目的 IOPS。 例如,P50 磁盘预配 7500 IOPS。 每个大型 VM 还存在一个其所能承受的特定 IOPS 限制。

吞吐量

吞吐量或带宽是指应用程序在指定时间间隔内发送到存储磁盘的数据量。 如果应用程序执行的输入/输出操作使用的 IO 单位很大,则需要高吞吐量。 数据仓库应用程序往往会发出扫描密集型操作(这些操作一次就会访问大量的数据),并且通常会执行批处理操作。 换而言之,此类应用程序需要更高的吞吐量。 如果拥有这样的应用程序,则设计其基础结构时必须针对吞吐量进行优化。 在下一部分,我们会详细讨论那些为了实现此目标而必须进行调整的因素。

将高级存储磁盘连接到大型 VM 时,Azure 会根据磁盘规格预配吞吐量。 例如,P50 磁盘预配 250 MB/秒的磁盘吞吐量。 每个高规格 VM 还存在一个其所能承受的特定吞吐量限制。

吞吐量和 IOPS 之间存在一个关系,如以下公式所示。

因此,必须确定应用程序所需的最佳吞吐量和 IOPS 值。 尝试优化其中一个值时,另一个值也会受影响。 在后面的“优化应用程序性能”部分,我们会更详细地讨论如何优化 IOPS 和吞吐量。

延迟

延迟是指应用程序接收单个请求,将其发送到存储磁盘,然后又将响应发送到客户端所花的时间。 这是除 IOPS 和吞吐量之外的针对应用程序性能的关键度量。 高级存储磁盘的延迟是指该磁盘检索请求的信息并将其发送回应用程序所花的时间。 高级存储提供持续一致的低延迟服务。 如果在高级存储磁盘上启用 ReadOnly 主机缓存,则可获得相当低的读取延迟。 在后面的“优化应用程序性能”部分,我们将更详细地讨论磁盘缓存。

对应用程序进行优化以获取更高的 IOPS 和吞吐量时,应用程序的延迟会受到影响。 在优化应用程序性能以后,应始终评估应用程序的延迟,以免出现意外的高延迟行为。

收集应用程序性能要求

设计在 Azure 高级存储上运行的高性能应用程序时,第一步是了解应用程序的性能要求。 收集性能要求后,即可优化应用程序,使性能得到最大优化。

在上一节中,我们介绍了常见的性能指标:IOPS、吞吐量和延迟。 必须确定对应用程序最重要的性能指标,以便为用户提供理想体验。 例如,对于需要在一秒内处理数百万事务的 OLTP 应用程序来说,提高 IOPS 最重要。 而对于需要在一秒内处理大量数据的数据仓库应用程序来说,提高吞吐量最重要。 对于实时应用程序(例如视频直播网站)来说,最重要的是确保极低的延迟。 接下来,请衡量一下应用程序在其整个生存期的最大性能要求。 一开始请使用下面的示例清单。 记录在正常工作负荷期间、高峰工作负荷期间、非工作时间工作负荷期间的最大性能要求。 确定所有工作负荷级别的要求以后,就能够确定应用程序的总体性能要求。 例如,电子商务网站的正常工作负荷是指该网站在一年中的多数日子需要处理的事务数。 网站的高峰工作负荷是指该网站在假日或进行特殊促销活动时候需要处理的事务数。 高峰工作负荷通常会在有限的时段内出现,但可能要求应用程序处理正常运行时两倍或以上的事务。 找出第 50 百分位数、第 90 百分位和第 99 百分位的要求。 这有助于筛选出性能要求中的任何离群值,让能够专门针对正确的值进行优化。

应用程序性能要求清单

性能要求 第 50 百分位数 第 90 百分位数 第 99 百分位数
最大 每秒事务数
读取操作百分数
写入操作百分数
随机操作百分数
顺序操作百分数
IO 请求大小
平均吞吐量
最大 吞吐量
最小值 延迟
平均延迟
最大 CPU
平均 CPU
最大 内存
平均内存
队列深度

用于衡量应用程序性能要求的计数器

若要衡量应用程序的性能要求,最好的方式是使用服务器的操作系统提供的性能监视工具。 可将 PerfMon 用于 Windows,将 iostat 用于 Linux。 这些工具会根据以上部分所述的每个度量来捕获计数器。 必须在应用程序运行其正常工作负荷、高峰工作负荷和非工作时间工作负荷时捕获这些计数器的值。

PerfMon 计数器适用于处理器、内存以及服务器的每个逻辑磁盘和物理磁盘。 将高级存储磁盘用于 VM 时,物理磁盘计数器适用于每个高级存储磁盘,逻辑磁盘计数器适用于在高级存储磁盘上创建的每个卷。 必须捕获承载应用程序工作负荷的磁盘的值。 如果在逻辑磁盘和物理磁盘之间存在一一映射,则可以引用物理磁盘计数器,否则请引用逻辑磁盘计数器。 在 Linux 中,iostat 命令会生成 CPU 和磁盘使用率报告。 磁盘使用率报告会按物理设备或分区提供统计信息。 如果数据库服务器的数据和日志位于不同的磁盘上,则请针对两种磁盘收集此类数据。 下表描述了磁盘、处理器和内存的计数器:

计数器 说明 PerfMon Iostat
IOPS 或每秒事务数 每秒发送到存储磁盘的 I/O 请求数。 磁盘读取数/秒 磁盘写入数/秒 tps r/s w/s
磁盘读取数和写入数 在磁盘上执行的读取和写入操作的百分比。 磁盘读取时间百分比 磁盘写入时间百分比 r/s w/s
吞吐量 每秒从磁盘读取或向磁盘写入的数据量。 磁盘读取字节数/秒 磁盘写入字节数/秒 kB_read/s kB_wrtn/s
延迟 完成磁盘 IO 请求的总时间。 平均磁盘秒数/读取 平均磁盘秒数/写入 await svctm
IO 大小 向存储磁盘发出的 I/O 请求的大小。 平均磁盘字节数/读取 平均磁盘字节数/写入 avgrq-sz
队列深度 等待从存储磁盘读取或等待向存储磁盘写入的待处理 I/O 请求的数目。 当前的磁盘队列长度 avgqu-sz
最大内存 顺利运行应用程序所需的内存量 提交的在用字节数百分比 使用 vmstat
最大CPU 顺利运行应用程序所需的 CPU 速度 处理器时间百分比 %util

详细了解 iostatPerfMon

优化应用程序性能

影响运行在高级存储上的应用程序的性能的主要因素包括:IO 请求的性质、VM 大小、磁盘大小、磁盘数目、磁盘缓存、多线程处理和队列深度。 可使用系统提供的设置来控制其中部分因素。 大多数应用程序可能不提供直接更改 IO 大小和队列深度的选项。 例如,如果使用 SQL Server,则不能选择 IO 大小和队列深度。 SQL Server 会选择最佳 IO 大小和队列深度值以获取最大性能。 必须了解两类因素对应用程序性能的影响,以便根据性能需要预配相应的资源。

迅速优化 IOPS、吞吐量和延迟

下表汇总了性能因素以及进行 IOPS、吞吐量和延迟优化所需的步骤。 此汇总以后的部分更深入地介绍每个因素。 有关 VM 大小以及每种类型的 VM 可用的 IOPS、吞吐量和延迟的详细信息,请参阅 Linux VM 大小Windows VM 大小

IOPS 吞吐量 延迟
示例方案 企业 OLTP 应用程序,需要很高的每秒事务数比率。 企业数据仓库应用程序,处理大量数据。 近实时应用程序,需要对用户请求进行即时响应,例如在线游戏。
性能因素
IO 大小 IO 大小越小,产生的 IOPS 越高。 IO 大小越大,产生的吞吐量越大。
VM 大小 使用所提供的 IOPS 超出应用程序要求的 VM 大小。 使用 VM 大小时,应确保吞吐量限制超出应用程序要求。 使用所提供的规模限制超出应用程序要求的 VM 大小。
磁盘大小 使用所提供的 IOPS 超出应用程序要求的磁盘大小。 使用磁盘大小时,应确保吞吐量限制超出应用程序要求。 使用所提供的规模限制超出应用程序要求的磁盘大小。
VM 和磁盘规模限制 所选 VM 大小的 IOPS 限制应大于已连接的高级存储磁盘所要求的总 IOPS。 所选 VM 大小的吞吐量限制应大于已连接的高级存储磁盘所要求的总吞吐量。 所选 VM 大小的规模限制必须大于已连接高级存储磁盘的总规模限制。
磁盘缓存 在需要进行大量读取操作的高级存储磁盘上启用 ReadOnly 缓存,以便提高读取 IOPS。 在需要进行大量读取操作的高级存储磁盘上启用 ReadOnly 缓存,以便尽量降低读取延迟。
磁盘条带化 使用多个磁盘并将其条带化,获得更高的 IOPS 和吞吐量组合限制。 请注意,单个 VM 的组合限制应高于所连接的高级磁盘的组合限制。
条带大小 较小的条带大小适用于随机小型 IO 模式,见于 OLTP 应用程序。 例如,SQL Server OLTP 应用程序使用 64KB 的条带大小。 较大的条带大小适用于顺序大型 IO 模式,见于数据仓库应用程序。 例如,SQL Server 数据仓库应用程序使用 256KB 的条带大小。
多线程处理 使用多线程处理将更高数目的请求推送到高级存储,导致 IOPS 和吞吐量更高。 例如,在 SQL Server 上设置较高的 MAXDOP 值,将更多 CPU 分配到 SQL Server。
队列深度 队列深度越大,产生的 IOPS 越高。 队列深度越大,产生的吞吐量越高。 队列深度越小,产生的延迟越低。

参考

分享 评论