

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为 SQL Server 工作负载选择合适的 EC2 实例。
<a name="right-ec2-instance"></a>

**重要**  
在阅读本部分之前，我们建议您先阅读本指南的[了解 SQL Server 许可](sql-server-licensing.md)和[为 Windows 工作负载选择合适的实例类型](right-size-selection.md)部分。

## 概述
<a name="right-ec2-instance-overview"></a>

微软 SQL Server 在亚马逊弹性计算云 (Amazon EC2) 实例上运行已有 15 年多了。 AWS 借鉴了这种经验，并利用它来帮助开发 Amazon EC2 实例，以适应从最低规格一直运行到高性能、多区域集群的 SQL Server 工作负载。

为 SQL Server 选择合适的 EC2 实例在很大程度上取决于您的工作负载。了解 SQL Server 的许可方式、其内存使用情况以及 SQL Server 的功能与 Amazon EC2 产品之间的对应关系，能够帮助您为您的应用程序选择最合适的 EC2 实例。

本部分介绍了各种 SQL Server 工作负载，以及如何将这些工作负载与特定的 EC2 实例相结合，从而将您的许可费用和计算成本控制在最低水平。

## 成本比较
<a name="right-ec2-instance-cost-comparison"></a>

Amazon EC2 使您能够以自带许可（BYOL）或按实际使用量付费的方式使用 Windows Server 和 SQL Server 许可。对于 pay-as-you-go许可，Windows Server 和 SQL Server 许可证的许可成本包含在 EC2 实例的每小时成本中。例如，您可以选择不同的价格 AMIs 和不同的价格。AMI 的价格取决于该 AMI 所运行的 SQL Server 版本。

Windows Server 和 SQL Server 定价未逐项列出。您将找不到 [AWS 定价计算器](https://calculator.aws/) 等工具的分项定价。如果您选择包含许可证产品的不同组合，则可以计算出许可费用，如下表所示。


****  

| EC2 实例 | AMI | 计算价格 | Windows 许可证价格 | SQL 许可证价格 | 总价格 | 
| --- | --- | --- | --- | --- | --- | 
| r5.xlarge | Linux（计算定价） | 183.96 美元 | - | - | 183.96 美元 | 
| r5.xlarge | Linux \+ SQL 开发人员版 | 183.96 美元 | $0 | $0 | 183.96 美元 | 
| r5.xlarge | Windows Server（LI） | 183.96 美元 | 134.32 美元 | - | 318.28 美元 | 
| r5.xlarge | Windows \+ SQL 开发人员版 | 183.96 美元 | 134.32 美元 | $0 | 318.28 美元 | 
| r5.xlarge | Windows \+ SQL Web 版（LI） | 183.96 美元 | 134.32 美元 | 49.64 美元 | 367.92 美元 | 
| r5.xlarge | Windows \+ SQL 标准版（LI） | 183.96 美元 | 134.32 美元 | 350.4 美元 | 668.68 美元 | 
| r5.xlarge | Windows \+ SQL 企业版（LI） | 183.96 美元 | 134.32 美元 | 1095 美元 | 1413.28 美元 | 

**注意**  
上述表格中的定价基于 `us-east-1` 区域的按需定价确定。

运行 SQL Server 的最经济有效的方法是先使用较低版本，直到您需要使用更高版本所具备的功能时。有关更多信息，请参阅本指南的[比较 SQL Server 版本](sql-server-editions.md)部分。从 SQL Server Web 版升级到 SQL Server 标准版，其所需支付的许可费用是 SQL Server Web 版的七倍以上，并且是从标准版升级到企业版的许可费用的三倍以上。许可费用的差异是一个需要考虑的重要因素，在本节的后续部分中对此进行了详细探讨。

## 成本优化方案
<a name="right-ec2-instance-opt-scenario"></a>

以一个示例场景为例，一家负责追踪运输车辆的分析公司正试图提升其 SQL Server 的性能。在 MACO 专家审查了公司的性能瓶颈后，该公司从 x1e.2xlarge 实例转换到 x2iedn.xlarge 实例。尽管实例大小较小，但对 x2 实例所做的改进通过使用缓冲池扩展，提高了 SQL Server 的性能和优化效果。这使该公司能够从 SQL Server 企业版降级到 SQL Server 标准版，并将其 SQL Server 许可从 8 v 减少CPUs 到 4 v CPUs。

优化前：


****  

| 服务器 | EC2 实例 | SQL Server 版本 | 月度成本 | 
| --- | --- | --- | --- | 
| Prod DB1 | x1e.2xlarge | Enterprise | 3,918.64 美元 | 
| Prod DB2 | x1e.2xlarge | Enterprise | 3,918.64 美元 | 
| 总计 |   |   | 7,837.28 美元 | 

优化后：


****  

| 服务器 | EC2 实例 | SQL Server 版本 | 月度成本 | 
| --- | --- | --- | --- | 
| Prod DB1 | x2iedn.xlarge | 标准 | 1,215.00 美元 | 
| Prod DB2 | x2iedn.xlarge | 标准 | 1,215.00 美元 | 
| 总计 |   |   | 2,430.00 美元 | 

从 x1e.2xlarge 实例到 x2iedn.xlarge 实例的这一合并更改使该客户每月在其生产数据库服务器上节省了 5407 美元的费用。这使工作负载的总成本降低了 69%。

**注意**  
上述表格中的定价基于 `us-east-1` 区域的按需定价确定。

## 成本优化建议
<a name="right-ec2-instance-opt-rec"></a>

### 内存优化型实例
<a name="right-ec2-instance-memory-opt"></a>

SQL Server 的最重要方面之一在于要明白其对内存的依赖程度。SQL Server 尝试使用操作系统未使用的所有可用 RAM（默认安装最多为 2TB）。这样做是出于性能方面的考虑。处理内存中的数据要比频繁地从磁盘拉取数据、进行更改然后再写回磁盘要高效得多。相反，SQL Server 会尽可能多地从所连接的数据库中加载数据，并将这些数据保存在 RAM 中。对数据所做的更改发生在内存中，稍后会固化到磁盘中。

**注意**  
有关 SQL Server 如何写入更改的详细说明，请参阅 Microsoft 文档中的[写入页面](https://learn.microsoft.com/en-us/sql/relational-databases/writing-pages?view=sql-server-ver16)。

由于 SQL Server 在 RAM 较大时性能更好，因此我们通常建议从 [Amazon EC2 内存优化型](https://aws.amazon.com/ec2/instance-types/#Memory_Optimized)实例类型开始。内存优化型实例功能多样，提供了多种不同的选项。R 系列的 vCPU-to-RAM比例为 1 比 8，可选择英特尔处理器、AMD 处理器、增强的网络、增强的 EBS 性能、实例存储和增强的处理器速度。对于内存密集型工作负载，还有一个 X 系列，它结合了许多相同的选项，并将比率扩展到 1 vCPU-to-RAM 比 32。由于内存优化型实例具有多种功能，因此您可以将其应用于各种性状和大小的 SQL Server 工作负载。

### 低于最低资源的工作负载（小于 4 vCPUs）
<a name="min-resources-4"></a>

虽然某些使用案例在使用可爆发（T3）实例时运行效果良好，但我们建议您一般不要将可爆发实例用于 SQL Server 工作负载。SQL Server 的许可基于CPUs 分配给实例的 v 数。如果 SQL Server 大部分时间处于闲置状态，并且正在获取爆发配额，则您需要为未充分利用的 SQL 许可证支付费用。此外，SQL Server 的最低许可证要求为每台服务器 4 个内核。这意味着，如果您的 SQL Server 工作负载不需要 4 v CPUs 的计算能力，则需要支付未使用的 SQL Server 许可。在这些情况下，最好将[多个 SQL Server 实例整合](consolidate-instances.md)到一个更大的服务器上。

### 使用最少资源（小于 64GB RAM）的工作负载
<a name="min-resources-64"></a>

许多 RAM 在 64GB 以下的 SQL Server 工作负载并不优先考虑高性能或高可用性。对于这些类型的工作负载，如果应用程序受 Microsoft 的许可规定所约束，则 SQL Server Web 版可能会是一个合适的选择。

**重要**  
根据 Microsoft 的许可条款，SQL Server Web 版的使用案例受限。SQL Server Web 版的许可仅支持公用且可通过互联网访问的网页、网站、Web 应用程序和 Web 服务。它不能用于支持 line-of-business应用程序（例如，客户关系管理、企业资源管理和其他类似的应用程序）。

SQL Server 网络版可扩展到 32 v CPUs 和 64 GB 内存，比 SQL Server 标准版便宜 86%。对于资源需求较低的工作负载，使用像 r6a 这样的 AMD 内存优化型实例也是不错的选择，这种实例的计算价格比其对应的 Intel 产品低 10%，而这样做能够将计算和 SQL 许可费用控制在最低水平。

### 资源需求为平均值的工作负载（小于 128GB RAM）
<a name="avg-resources-128"></a>

大多数 RAM 最多为 128GB 的 SQL Server 工作负载采用 SQL Server 标准版。SQL Server 标准版比 SQL Server 企业版便宜 65-75%，并且可以扩展到 48 v CPUs 和 128 GB 内存。由于 128GB 的 RAM 限制通常会在 48 个 vCPU 的限制之前就被耗尽，因此这是大多数希望避免升级到 SQL Server 企业版的客户所关注的重点。

SQL Server 有一个称为[缓冲池扩展](https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/buffer-pool-extension?view=sql-server-ver16)的功能。此功能使 SQL Server 能够利用磁盘的一部分空间来充当 RAM 的扩展部分。缓冲池扩展与超快速存储（如 [Amazon EC2 实例存储中 NVMe SSDs 使用的存储](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html)）结合使用时效果很好。包含实例存储的 Amazon EC2 实例在实例名称中用“d”表示（例如 r5d、r6id 和 x2iedn）。

缓冲池扩展不能替代普通 RAM。但是，如果您需要超过 128GB 的 RAM，您可以将缓冲池扩展功能与 EC2 实例（如 r6id.4xlarge 和 x2iedn.xlarge）结合使用来推迟升级到企业版许可。

### 高性能工作负载（RAM 超过 128GB）
<a name="high-per-workloads-128"></a>

对于那些对性能要求高的 SQL Server 工作负载而言，进行成本优化颇具挑战性，因为它们依赖大量的资源。然而，了解不同 EC2 实例之间的差异能够帮助您避免做出错误的选择。

下表显示了各种内存优化型 EC2 实例及其性能限制。


****  

|   | r5b | R6idn | r7iz | x2iedn | x2iezn | 
| --- | --- | --- | --- | --- | --- | 
| 处理器 | 3.1 GHz<br />第二代 Intel Xeon 处理器 | 3.5 GHz<br />第三代 Intel Xeon 处理器 | 3.9 GHz<br />第四代 Intel Xeon Scalable 处理器 | 3.5 GHz<br />第三代 Intel Xeon 处理器 | 4.5 GHz<br />第二代 Intel Xeon 处理器 | 
| CPU:RAM 比率 | 1:8 | 1:8 | 1:8 | 1:32 | 1:32 | 
| 最大 vCPU | 96 | 128 | 128 | 128 | 48 | 
| 最大 RAM | 768 GB | 1,024 GB | 1,024 GB | 4,096 GB | 1,536 GB | 
| 实例存储 | – | NVMe SSD<br />（4x 1900GB） | – | NVMe SSD<br />（2x 1900GB） | – | 
| io2 Block Express | 支持 | 支持 | 支持 | 支持 | – | 
| Max EBS IOPS | 260000 | 350,000 | 160000 | 260000 | 80,000 | 
| Max EBS 吞吐量 | 60 Gbps | 80 Gbps | 40Gbps | 80 Gbps | 19 Gbps | 
| 最大网络带宽 | 25 Gbps | 200 Gbps | 50 Gbps | 100 Gbps | 100 Gbps | 

每个实例都有不同的用途。了解您的 SQL Server 工作负载有助于您选择最适合您的实例类型。

有关属性的详细信息：
+ **r5b**：r5b 中的“b”属性表示此实例类型侧重于高 EBS 性能。在第五代内存优化型实例中，r5b 是首选。它是第一个利用 io2 Block Express 卷并达到最大存储 IOPS 260000 的实例类型。r5b 实例类型对于需要高 EBS 性能的情况来说，仍是一种经济实惠的选择。
+ **r6idn**：与上一代相比，第六代内存优化型实例提供了相当大的改进。与 r5b 相比，r6idn 在 EBS 性能方面的改进更进一步，将最大 IOPS 提升到了 350000。r6idn 还为 tempdb 和缓冲池扩展预留了一个实例存储卷，以进一步提升 SQL Server 的性能。
+ **x2iedn**：x2iedn 与 r6idn 相似。它提供类似级别的增强型 EBS、增强型联网和 NVMe SSD 实例存储，但对于高内存工作负载和低 CPU 数量（较低的 SQL Server 许可成本），其 vCPU-to-RAM比例为 1:32。
+ **x2iezn**：x2iezn 中的“z”属性表示此实例类型侧重于高处理器性能。Cascade Lake 处理器的全核睿频最高可达 4.5 GHz。我们建议您在希望将 vCPU 数量保持在较低水平的场景中使用此 EC2 实例，并采用 1:32 的 vCPU-to-RAM比例。这反过来又可以降低 SQL Server 许可费用。
+ **r7iz**：r7iz 中的“z”属性表示此实例类型侧重于高处理器性能。Sapphire rapids 处理器的全核涡轮频率高达 3.9 GHz。与 x2iezn 实例一样，r7iz 优先考虑高频处理器性能，但比例为 1:8。 vCPU-to-RAM

## 其他资源
<a name="right-ec2-instance-resources"></a>
+ [通用型 Amazon EC2 实例](https://aws.amazon.com/ec2/instance-types/)（AWS 文档）
+ [比较工具](https://instances.vantage.sh/)（Vantage）
+ [许可 — SQL Server](https://aws.amazon.com/windows/faq/#licensing-sql)（AWS 文档）