

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

# SQL Server
<a name="sql-server"></a>

客户运行 Microsoft 工作 AWS 负载的时间已超过 15 年，比任何其他云提供商都要长。这主要是因为在云端使用微软应用程序方面 AWS 拥有最丰富的经验，并且在以下领域为Windows Server和Microsoft SQL Server提供了最佳平台：
+ 更高的性能和可靠性
+ 更好的安全和身份服务
+ 更多的迁移支持
+ 最广泛、最深层次的能力
+ 降低总拥有成本（TCO）
+ 灵活的许可选项

AWS 支持构建和运行依赖于 SQL Server 的 Windows 应用程序所需的一切，包括 Active Directory、.NET、SQL Server、Windows 桌面即服务以及所有支持的 Windows 服务器版本。凭借久经考验的专业知识， AWS 可以帮助您轻松地提升、转移、重构甚至现代化 Windows 工作负载。

**Topics**
+ [选择高可用性和灾难恢复解决方案](sql-server-hadr.md)
+ [了解 SQL Server 许可](sql-server-licensing.md)
+ [为 SQL Server 工作负载选择合适的 EC2 实例。](right-ec2-instance.md)
+ [整合实例](consolidate-instances.md)
+ [比较 SQL Server 版本](sql-server-editions.md)
+ [评估 SQL Server 开发人员版](sql-server-dev.md)
+ [评估 Linux 上的 SQL Server](sql-server-linux.md)
+ [优化 SQL Server 备份策略](sql-server-backup.md)
+ [现代化 SQL Server 数据库](modernize-sql-server.md)
+ [优化 SQL Server 的存储](storage-sql-server.md)
+ [使用 Compute Optimizer 优化 SQL Server 许可](sql-server-compute-optimizer.md)
+ [使用 Compute Optimizer 优化 SQL Server 的大小](sql-server-sizing-compute-optimizer.md)
+ [查看 SQL Server 工作负载 Trusted Advisor 的建议](sql-server-trusted-advisor.md)

# 选择高可用性和灾难恢复解决方案
<a name="sql-server-hadr"></a>

## 概述
<a name="sql-server-hadr-overview"></a>

我们建议您为 AWS 上的 SQL Server 部署设计一种架构，既要满足您的业务需求，又能满足[灾难恢复（DR）目标](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/disaster-recovery-dr-objectives.html)，包括恢复时间目标（RTO）和恢复点目标（RPO）。以下这些解决方案能够帮助您为在 Amazon Elastic Compute Cloud（Amazon EC2）上运行的 SQL Server 设计合适的架构，同时优化您的 SQL Server 工作负载的成本。
+ **SQL Server Always On 可用性组** —**** SQL Server Always On 可用性组提供高可用性和灾难恢复（HA/DR) solutions for SQL Server databases. An availability group consists of a set of user databases that fail over together. Always On availability groups also provide redundancy at the database level, but don't require shared storage—each replica has its own local storage. You can deploy this feature as an HA/DR解决方案。有关更多信息，请参阅 Microsoft 文档中的[什么是 Always On 可用性组？](https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server?view=sql-server-ver16)。
+ **SQL Server 始终开启故障转移群集实例 (FCI)** —**** SQL Server Always On FCIs 使用 Windows 服务器故障转移群集 (WSFC) 在 SQL Server 实例级别提供 HA。 FCIs 需要共享存储空间来托管数据库。您可以使用共享块存储或者共享文件存储。例如，您可以使用适用于 Windows 文件服务器 FSx 的亚马逊或 FSx 适用于 NetApp ONTAP 的亚马逊作为具有多个可用区的共享存储解决方案。有关更多信息，请参阅 Microsoft 文档中的 [Always On 失效转移群集实例（SQL Server）](https://learn.microsoft.com/en-us/sql/sql-server/failover-clusters/windows/always-on-failover-cluster-instances-sql-server?view=sql-server-ver16)。
+ **SIOS DataKeeper** —**** SIOS DataKeeper 可以通过启用跨可用区和可用区的 SQL Server FCI 来帮助您同时满足高可用性和灾难恢复要求。 AWS 区域 SIOS 使用本地 Amazon Elastic Block Store (Amazon EBS) 卷 DataKeeper 创建集群虚拟 SAN，并在可用区之间使用同步复制实现 HA，同时使用区域间的异步复制和灾难恢复。有关更多信息，请参阅 SIOS 文档中的 [Windows 应用程序的高可用性保护](https://us.sios.com/products/windows/)。
+ **分布式可用性组**：****分布式可用性组是一种特殊类型的可用性组，它跨越两个单独的 Always On 可用性组。可用性组可以位于两个不同的区域（例如 `us-east-1` 和 `us-west-1`）。您可以将分布式可用性组视为由多个可用性组组成的可用性组，因为其底层的 Always On 可用性组分别配置在两个不同的 WSFC 集群中。部署分布式可用性组需要 SQL Server 企业版。有关更多信息，请参阅 Microsoft 文档中的[分布式可用性组](https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/distributed-availability-groups?view=sql-server-ver16)。
+ **日志传送**：****您可以实施日志传送来保护您在多个区域间的数据库，以防某个区域出现故障且不可用的情况发生。根据事务和日志传送频率，您能够在几分钟内实现 RPO 和 RTO。有关更多信息，请参阅 Microsoft 文档中的[关于日志传送（SQL Server）](https://learn.microsoft.com/en-us/sql/database-engine/log-shipping/about-log-shipping-sql-server?view=sql-server-ver16)。
+ **AWS 弹性灾难恢复**— Elastic 灾难恢复是一种软件即服务 (SaaS) 应用程序，用于管理服务器从任何基础设施复制到 AWS 灾难恢复。您还可以使用 Elastic Disaster Recovery 跨区域复制 SQL Server。Elastic Disaster Recovery 是一种基于代理的解决方案，它可以将整个虚拟机（包括操作系统、所有已安装的应用程序以及所有数据库）复制到一个暂存区域。有关更多信息，请参阅 Elastic Disaster Recovery 文档中的[什么是 Elastic Disaster Recovery？](https://docs.aws.amazon.com/drs/latest/userguide/what-is-drs.html)。
+ **AWS Database Migration Service (AWS DMS)** — **AWS DMS **支持数据进出实时迁移 AWS，包括不同区域。您可以利用此功能在不同的区域中设置一个独立的 SQL Server 实例，将其用作灾难恢复数据库。有关更多信息，请参阅[什么是 AWS Database Migration Service？](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 在 AWS DMS 文档中。

## SQL Server Always On 可用性组
<a name="sql-server-always-on"></a>

如果您将 SQL Server 企业版仅用于高可用性的 [Always On 可用性组](https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server?view=sql-server-ver16)，则可以利用基本可用性组降级到 SQL Server 标准版。通过使用基本的可用性组而非 Always On 可用性组，您可以将成本降低 65% 至 75%。

**注意**  
有关不同 SQL Server 版本之间成本差异的其他信息，请参阅本指南的[比较 SQL Server 版本](sql-server-editions.md)部分。

**功能**
+ 在 SQL Server 标准版中可用
+ 限制两个副本（主副本和辅助副本）
+ 对辅助副本没有读取访问权限
+ 对辅助副本没有进行完整性检查

**限制**
+ 仅为每个可用性组支持一个可用性数据库
+ 基本可用性组不能成为分布式可用性组的一部分

下图显示了 Windows Server 失效转移群集解决方案的示例架构。



![\[Windows Server 失效转移群集架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/wfc_arch.png)


## SQL Server Always On 失效转移群集实例
<a name="sql-server-always-on-failover"></a>

您可以使用故障转移群集实例 (FCIs) 来确保数据库的持续运行，同时最大限度地减少停机时间并降低数据丢失的风险。 FCIs 如果您希望在不配置只读副本的情况下实现 SQL Server 数据库的高可用性，则可以提供可靠的解决方案。

与可用性组不同，无需 FCIs 使用 SQL Server 企业版即可提供可靠的故障转移解决方案。相反，只 FCIs 需要 SQL Server 标准版许可。您可以使用 FCIs 将 SQL Server 的许可成本降低 65-75%。

**注意**  
有关各 SQL Server 版本之间成本差异的其他信息，请参阅本指南的[比较 SQL Server 版本](sql-server-editions.md)部分。

请考虑以下事项：
+ Amazon FSx for Windows File Server 提供了一个强大的解决方案，可以满足你的 SQL Server FCI 共享存储需求。您可以在 Windows File Server 上使用 FSx ，这样就无需购买存储复制解决方案的许可证，也无需自己管理共享存储。这可能会带来 30% 至 40% 的显著成本节省。有关更多信息，请参阅 AWS 存储博客上的 “[使用亚马逊 FSx Windows 文件服务器简化微软 SQL Server 高可用性部署](https://aws.amazon.com/blogs/storage/simplify-your-microsoft-sql-server-high-availability-deployments-using-amazon-fsx-for-windows-file-server/)” 一文。
+ 借助[软件保障权益摘要](https://download.microsoft.com/download/0/0/3/0039F316-45CF-4083-AA6E-C35DA9D25C1B/SA_InteractiveBenefitsChart.pdf)（可下载的 PDF）和自带许可（BYOL）模型，只要辅助服务器处于被动状态，您就可以利用被动失效转移带来的好处。这可以节省 SQL 许可的成本，因为您无需向集群中的被动节点提供许可证。

下图显示了使用于 Windows 文件服务器的 SQL Server FCI FSx 的示例架构。



![\[FSx 适用于 Windows 文件服务器架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/fsx_arch.png)


## SIOS DataKeeper
<a name="sql-server-sios-datakeeper"></a>

如果您计划在 FCIs 上部署 SQL Server，我们建议您考虑共享存储需求 AWS。传统的本地安装通常使用存储区域网络（SAN）来满足共享存储需求，但这在 AWS上不是一个可行的选项。Amazon FSx for Windows File Server 是 SQL Server FCI 的推荐存储解决方案 AWS，但它存在一些限制，无法在不同的 AWS 区域服务器中添加群集服务器。

您可以使用 [SIOS DataKeeper](https://aws.amazon.com/blogs/architecture/field-notes-implementing-ha-and-dr-for-microsoft-sql-server-using-always-on-failover-cluster-instance-and-sios-datakeeper/) 创建涵盖可用区和区域的 SQL Server FCI，同时将成本降低 58-71%。SIOS DataKeeper 可以帮助您实现 FCI 的高可用性优势。这使得 SIOS DataKeeper 成为组织经济实惠且可靠的解决方案。

请考虑使用 SIOS DataKeeper 的以下其他好处：
+ SIOS 使用本地 EBS 卷 DataKeeper 创建群集虚拟 SAN，并在可用区之间使用同步复制来实现高可用性。为了进行灾难恢复，SIOS DataKeeper 使用区域间的异步复制。
+ SIOS 使用 SQL Server 标准版 DataKeeper 提供企业级群集功能。与使用 SQL Server 企业版的 Always On 可用性组来实现高可用性相比，这能将 SQL Server 的许可成本降低 65% 至 75%。借助 SIOS DataKeeper，您可以创建高度可用、灵活且经济实惠的 SQL Server 环境，以满足您的组织需求。

**注意**  
有关各 SQL Server 版本之间成本差异的其他信息，请参阅本指南的[比较 SQL Server 版本](sql-server-editions.md)部分。

以下图表展示了使用集群式虚拟 SAN 解决方案的 SQL Server FCI 的一个示例架构。



![\[使用集群式虚拟 SAN 解决方案的 SQL Server FCI。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/clustered_vsan_arch.png)


## Always On 可用性组
<a name="sql-server-alwayson-avail-groups"></a>

您可以使用 Always On 可用性组来实现高可用性和灾难恢复的目的。您可以通过跨一个区域内的两个可用区部署 SQL Server 来实现高可用性。您可以通过跨区域扩展可用性组来实现灾难恢复。

以下图表展示了基于 Always On 可用性组的解决方案的示例架构。图中区域 1 中的副本采用了同步提交方式，这种方式能够实现可用性组的自动失效转移。区域 2 中的副本采用的是异步提交方式，这将需要对可用性组进行手动失效转移。



![\[Always On 可用性组架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/alwayson_ag_arch.png)


## 分布式可用性组
<a name="sql-server-distributed-avail-groups"></a>

对于那些对可靠性或灾难恢复有着极高标准要求的任务关键型 SQL Server 部署而言，我们建议采用跨区域部署的方式。将您的可用性组分布到多个区域，是确保业务连续性、最大限度减少停机时间的最可靠解决方案。

该架构充分利用了 Amazon FSx for Windows 文件服务器的功能，包括共享存储、同步块级复制和 SQL Server。 FCIs这些功能使您能够创建一个跨多个可用区的高可用性 SQL Server 环境。通过在另一个区域复制这一设置，您将能够获得一个完全冗余的系统，该系统能够应对任何最严重的中断情况。该解决方案的与众不同之处在于其提供的灵活性和安全性。分布式可用性组独立于域的架构使得底层的 Windows 集群服务器能够加入不同的 Active Directory 域，而基于证书的身份验证则能为您的 SQL Server 环境提供最大程度的保护，并满足多区域 DR 策略的高 RTO 和 RPO 要求。有关构建多区域架构的信息，请参阅架构博客中的[现场注释：使用 FCI 和分布式可用性组为 SQL Server 构建多区域架构](https://aws.amazon.com/blogs/architecture/field-notes-building-a-multi-region-architecture-for-sql-server-using-fci-and-distributed-availability-groups/)。 AWS 

以下图表展示了采用分布式可用性组的多区域解决方案的示例架构。



![\[多区域架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/multi_region_arch.png)


## 日志传送
<a name="sql-server-log-shipping"></a>

日志传送是一种经过验证、可靠且经济高效的解决方案，可在出现意外停机情况时保障您在不同区域中的数据库安全。几十年来，各组织一直采用日志传送的方式来保护其数据。

如果您启用日志传送 AWS，则可以在几分钟内实现 RPO 和 RTO，具体取决于事务和日志传送任务的频率。在极不可能出现的极端情况下，如果某个区域突然无法访问，则日志传送能确保您的数据安全且可恢复。

以下列举了使用日志传送的一些额外优势，请予以考虑：
+ 使用日志传送实现跨区域的灾难恢复韧性，从而降低成本并满足您的业务需求。日志传送能降低您的总拥有成本，因为您只需购买 SQL Server 标准版或 SQL Server Web 版的许可证即可。
+ 通过使用带有有效[软件保障](https://download.microsoft.com/download/0/0/3/0039F316-45CF-4083-AA6E-C35DA9D25C1B/SA_InteractiveBenefitsChart.pdf)的日志传送，消除灾难 recovery/passive 服务器的许可成本。当您使用带软件保障的日志传送时，只需要授权 primary/active SQL Server。
+ 通过消除在不同区域之间设置分布式可用性组的 SQL Server 企业版需求，将 SQL Server 的许可成本降低 65% 至 75%。为此，您可以将 SQL Server 标准版和 SQL Server 与日志传送 FCIs 结合使用，以满足您的灾难恢复要求。

**注意**  
有关各 SQL Server 版本之间成本差异的其他信息，请参阅本指南的[比较 SQL Server 版本](sql-server-editions.md)部分。

有关更多信息，请参阅 AWS 架构博客中的[使用日志传送扩展 SQL Server 灾难恢复和亚马逊 FSx Windows 版 Windows 配置的 SQL Server FCI](https://aws.amazon.com/blogs/architecture/extend-sql-server-dr-using-log-shipping-for-sql-server-fci-with-amazon-fsx-for-windows-configuration/)。

以下图表展示了日志传送解决方案的一个示例架构。



![\[日志传送架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/log_shipping_arch.png)


## AWS Database Migration Service
<a name="sql-server-aws-dms"></a>

您可以使用 AWS Database Migration Service (AWS DMS) 根据您的应用程序需求设计 HA/DR 解决方案。 AWS DMS 使您能够轻松地将数据复制到同一区域 (HA) 或跨区域 (DR) 的辅助 SQL Server 数据库。这种方法在技术上是可行的，它能让您在 AWS 基础设施方面最大化您的投资，同时还能优化资源的利用效率。

AWS DMS 是一项具有成本效益的服务。您只需为传输过程中所使用的 CPU 资源以及任何额外的日志存储付费。这意味着，您可以从该解决方案中获益，同时无需承担过多额外费用。您可以使用 AWS DMS 来确保数据可用且可访问，同时最大限度地降低与许可和资源使用相关的成本。

以下图表展示了基于 AWS DMS的解决方案的一个示例架构。



![\[AWS DMS 建筑\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/aws_dms_arch.png)


## AWS 弹性灾难恢复
<a name="sql-server-aws-edr"></a>

一些组织必须确保所有关键业务应用程序都已实施灾难恢复计划。过去，这些组织中有许多都大量投入资金用于传统的灾难恢复解决方案。这类方案要求您预先构建并维护一个完整的复制基础设施。这种方法成本高昂、耗时长且难以扩展。

现在，您可以使用 AWS 弹性灾难恢复 无需预先构建灾难恢复基础架构。在 Elastic Disaster Recovery 中，灾难恢复设备仅在必要时才会启动。因此，您只需按实际使用量在您需要它时付费。这意味着您能够显著降低软件许可费用和高性能计算成本。

此外，灾难恢复解决方案的暂存区域还包含低成本的 Amazon Elastic Block Store（Amazon EBS）卷。EBS 卷进一步降低了预调配重复资源的成本。这使您能够降低总体的灾难恢复成本，同时仍能维护一个强大且可靠的灾难恢复方案，满足您的业务需求。您可以使用 Elastic 灾难恢复来专注于核心业务活动， AWS 同时为您的灾难恢复解决方案处理底层基础架构。

对于 SQL Server，您可以将 Elastic Disaster Recovery 用作经济高效的灾难恢复选项。如果您使用主动式软件保障服务，那么在具有容错能力且高度可用的 SQL Server 架构中，被动节点的许可费用将包含在内。然而，您仍需支付计算费用才能让该被动服务器保持在线状态。借助 Elastic Disaster Recovery，主服务器可以复制到灾难恢复环境中，而无需保持软件保障的活跃状态，也无需支付灾难恢复的计算费用。这种节省组合可以将您的 SQL Server 灾难恢复成本降低 50% 或更多。

以下图表展示了基于 Elastic Disaster Recovery 的解决方案的一个示例架构。



![\[Elastic Disaster Recovery 架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/aws_drs_arch.png)


有关更多信息，请参阅博 AWS 客[上的 Microsoft 工作负载 AWS 弹性灾难恢复上如何为灾难恢复站点的 SQL Server 设置高可用性](https://aws.amazon.com/blogs/modernizing-with-aws/set-up-high-availability-for-sql-server-at-dr-site-using-aws-elastic-disaster-recovery/)。

## 成本比较
<a name="sql-server-cost-comparison"></a>

下表比较了本节所涵盖的 HA/DR 解决方案的成本。为进行此次比较，我们做出了以下假设：
+ **实例类型**：r5d.xlarge
+ **许可证类型**：包括适用于 Windows 和 SQL Server 的许可证
+ **区域** ‐ `us-east-1`


****  

| 解决方案 | 高可用性 | 灾难恢复 | 企业版 | 标准版 | 成本 | 
| --- | --- | --- | --- | --- | --- | 
| 日志传送 | 否 | 是 | 是 | 是 | SQL Server 企业版：32674.8 美元（2 个节点）SQL Server 标准版：14804.4 美元（2 个节点） | 
| Always On 可用性组 | 支持 | 是 | 是 | 是，但为基本可用性组（2 个节点） | SQL Server 企业版：32674.8 美元（2 个节点）SQL Server 标准版：14804.4 美元（2 个节点） | 
| 永远开启 FCIs | 是 | 否 | 是 | 是（2 个节点） | SQL Server 标准版：14804.4 美元 | 
| 分布式可用性组 | 支持 | 是 | 是 | 否 | SQL Server 企业版：65349.6 美元（4 个节点） | 
| 弹性灾难恢复 | 否 | 是 | 是 | 是 | 复制 1 个实例和 1TB 存储空间的费用约为 107.48 美元/月**注意**：Elastic Disaster Recovery 根据每台复制服务器按小时计费。无论磁盘数量、存储大小、执行演练或恢复操作的次数，还是您正在复制的区域如何，费用都是相同的。 | 
| SIOS Data Keeper | 支持 | 是 | 是 | 是 | 具有软件保障的 Always On 可用性组（2 个节点，24 个内核）：213480 美元在 SQL Server 标准版上运行的 2 节点 SQL Server 群集，具有 SIOS DataKeeper 和软件保障：61,530 美元（2 个节点） | 
| AWS DMS | 否 | 是 | 是 | 是 | r5.xlarge 实例和 1TB 存储费用为 745.38 美元/月 | 

## 成本优化建议
<a name="sql-server-opt-rec"></a>

我们建议您采取以下后续步骤来选择符合组织要求的 HA/DR 解决方案：
+ 请查看本指南的[为 SQL Server 工作负载选择合适的 EC2 实例](right-ec2-instance.md)部分。
+ 通过在工作负载高峰期运行性能计数器，来确定您的工作负载的 IOPS 和吞吐量要求：
  + IOPS = 磁盘 reads/sec \$1 磁盘写入次数/秒
  + 吞吐量 = 磁盘读取 bytes/sec \$1 磁盘写入字节/秒
+ 请使用以下存储卷类型以获得更好的性能和成本节省：
  + NVMe 缓冲池扩展的实例存储空间`tempdb`和缓冲池扩展
  + 用于数据库文件的 io2 卷
+ 使用 [AWS Trusted Advisor](https://docs.aws.amazon.com/awssupport/latest/user/trusted-advisor-check-reference.html) 获取有关 Amazon EC2 上的 SQL Server 成本优化的建议。您无需安装代理即可进行 SQL Server 优化检查。 Trusted Advisor Trusted Advisor 检查您的 Amazon EC2 SQL Server 包含许可证的实例配置，例如虚拟 CPUs (vCPUs)、版本和版本。然后，根据最佳实践 Trusted Advisor 提出建议。
+ 适用 AWS Compute Optimizer 于 Amazon EC2 实例和 Amazon EBS 的正确大小建议。
+ [AWS 定价计算器](https://calculator.aws/#/)用于设计成本估算 HA/DR 策略。
+ 要确定从 SQL Server 企业版降级到 SQL Server 标准版是否是一个可行的选择，可使用 [sys dm\$1db\$1persisted\$1sku\$1features](https://learn.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-db-persisted-sku-features-transact-sql?view=sql-server-ver16) 动态管理视图来识别在当前数据库中处于活动状态的版本特定功能。
**注意**  
Side-by-side 使用包含许可证的 EC2 实例时，需要迁移才能更改 SQL Server 版本。
+ 每半年或每年进行一次灾难恢复演练，以便更好地制定设计方案，确保能够按照既定的 RTO 和 RPO 恢复数据库。这还能帮助您发现任何可能存在的架构缺陷。

## 其他资源
<a name="sql-server-resources"></a>
+ [使用 FSx 适用于 Windows 的亚马逊文件服务器简化微软 SQL Server 高可用性部署](https://aws.amazon.com/blogs/storage/simplify-your-microsoft-sql-server-high-availability-deployments-using-amazon-fsx-for-windows-file-server)（AWS 存储博客）
+ [现场说明：使用 FCI 和分布式可用性组为 SQL Server 构建多区域](https://aws.amazon.com/blogs/architecture/field-notes-building-a-multi-region-architecture-for-sql-server-using-fci-and-distributed-availability-groups/)AWS 架构（架构博客）
+ [为 SQL Server 设计灾难恢复架构 AWS：第 1 部分](https://aws.amazon.com/blogs/database/part-1-architect-a-disaster-recovery-for-sql-server-on-aws/)（AWS 数据库博客）
+ [微软 SQL 借助 FSx 适用于 Windows 的亚马逊实现高可用性](https://www.youtube.com/watch?v=8dsRkVLy0Nc) (YouTube)
+ [利用 Amazon EBS 最大程度提高 Microsoft SQL Server 性能](https://aws.amazon.com/blogs/storage/maximizing-microsoft-sql-server-performance-with-amazon-ebs/)（AWS 存储博客）
+ [将您的本地存储模式与 AWS 存储服务进行比较](https://aws.amazon.com/blogs/storage/comparing-your-on-premises-storage-patterns-with-aws-storage-services/)（AWS 存储博客）
+ [计划用 Amazon FSx 文件网关替换数据中心 NAS](https://aws.amazon.com/blogs/storage/planning-to-replace-a-data-center-nas-with-amazon-fsx-file-gateway/)（AWS 存储博客）
+ [优化高可用性 SQL Server 部署的成本 AWS](https://aws.amazon.com/blogs/storage/optimizing-cost-for-your-high-availability-sql-server-deployments-on-aws/)（AWS 存储博客）
+ [如何使用 AWS 弹性灾难恢复为 SQL Server Always On 可用性组设置灾难恢复](https://aws.amazon.com/blogs/modernizing-with-aws/how-to-set-up-disaster-recovery-for-sql-server-always-on-availability-groups-using-aws-elastic-disaster-recovery/)（ AWS上的 Microsoft 工作负载）
+ [如何在使用恢复的灾难恢复站点上为 SQL Server 设置高可用性 AWS 弹性灾难恢复（开启](https://aws.amazon.com/blogs/modernizing-with-aws/set-up-high-availability-for-sql-server-at-dr-site-using-aws-elastic-disaster-recovery/) Microsoft 工作负载 AWS）

# 了解 SQL Server 许可
<a name="sql-server-licensing"></a>

## 概述
<a name="sql-server-licensing-overview"></a>

随着越来越多的企业将工作负载迁移到云中，优化云平台的成本已成为首要任务。许可是与运行 Microsoft 工作负载相关的最重要成本之一 AWS。本节介绍如何 AWS 通过优化 SQL Server 的 Microsoft 许可来优化成本。

## AWS 许可选项
<a name="sql-server-aws-licensing-options"></a>

AWS 为许可提供了一系列灵活的成本优化选择。这些许可选项旨在帮助您降低成本、确保合规性并满足您的业务需求。



![\[查看许可选项，例如购买或自带许可证。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/aws_licensing_options.png)


AWS 将许可证分为三种主要类型：

1. **包含许可证**：此许可选项允许您按需购买并使用许可证，仅需按实际使用量付费。包含许可证选项非常适合那些您希望在使用许可方面具有灵活性，并且又不想承担前期费用的情况。您可以从一系列 Windows Server、SQL Server 和其他 Microsoft 产品中进行选择。

1. **自带许可证 (BYOL) 产品，具有许可证移动性** — 此许可选项专为已有许可证并希望在云中使用的场景而设计。 AWS 允许客户通过 Microsoft 的许可证[移动性计划将自己的许可证](https://www.microsoft.com/en-us/licensing/licensing-programs/software-assurance-license-mobility)带到云端。您可以将具有许可证移动性的产品（例如带软件保障的 SQL Server (SA)）带到共享或专用租赁，以降低 AWS 实例成本。

1. **没有许可证移动性的 BYOL 产品** — 对于没有许可证移动性的微软产品，例如 Windows Server， AWS 提供了在云中使用这些产品的专用选项。此外，专属主机还提供在物理核心级别进行许可的机会。这能让您在运行工作负载时节省 50% 或更多的许可证费用。专属主机对于那些大部分时间都能保持稳定且可预测的工作负载是一个非常理想的选择。

## 自带许可证对成本的影响
<a name="sql-server-cost-bringing-licenses"></a>

自带许可证可能会对在 AWS上运行 Microsoft 工作负载的成本产生显著影响。如果您自带许可证，则无需为在云中运行的实例支付额外的许可费用。这能够带来显著的成本节省。

以下对比数据展示了全天候运行单个 c5.xlarge 实例的按需每月成本：
+ Windows Server \$1 SQL Server 企业版：1353 美元/月（包含许可证）
+ Windows Server \$1 SQL Server 标准版：609 美元/月（包含许可证）
+ 仅 Windows Server：每月 259 美元（包含许可证）
+ 仅计算（Linux）：每月 127 美元

归根结底，自带许可证可能会对在 AWS上运行 Microsoft 工作负载的成本产生显著影响。如果您使用现有的许可证，则可以降低许可成本并节省总 AWS 账单。

## 许可证优化
<a name="sql-server-license-optimization"></a>

 AWS 优化和许可评估 (AWS OLA) 可以通过降低计算和许可成本来帮助您优化许可。 AWS OLA 旨在评估您对运行的工作负载 AWS 或计划迁移的工作负载的许可要求。 AWS OLA 提供了有关优化许可证使用情况的建议。

优化许可使用的关键策略之一是[合理调整实例大小](rightsize.md)。适当调整大小涉及到根据工作负载对 CPU、内存和存储的需求来选择合适的实例类型。通过选择适当的实例大小，您可以确保以经济高效的方式使用资源。这能够带来显著的成本节省。

使用 Microsoft 软件许可时，软件运行所在的核心数量是决定软件许可费用的关键因素。例如，Windows Server 和 SQL Server 许可证通常根据核心数量进行许可。通过适当调整实例大小，您可以减少 Microsoft 软件运行所在的内核数量，进而降低实例的成本并减少所需的许可证数量。

## 成本优化建议
<a name="sql-server-lic-opt-rec"></a>

优化许可证是 AWS上的成本优化的关键组成部分。通过实施适当的策略，您可以降低许可成本，维护合规性，并从您的许可投资中获得最佳效益。本部分概述了几种许可证优化的策略。

### 自带符合资格的 Windows Server 许可证
<a name="sql-server-rec-byol-windows"></a>

自带 Windows Server 许可证是最有效的许可证优化策略之一。该策略使您能够利用现有投资来减少 AWS 支出。

例如，如果您在 2019 年 1 月 10 日之前购买了许可证，或者在该日期之前根据有效的企业协议进行了许可证的追加购买，则可以在 [Amazon EC2 专属主机](https://aws.amazon.com/ec2/dedicated-hosts/)上部署 Windows Server 2019 及更早版本。该规则基于微软在2019年对没有许可移动性的产品（例如Windows Server）的许可条款和条件所做的更改，这些产品部署在[上市提供商](https://www.microsoft.com/licensing/docs/view/Listed-Providers)（例如阿里巴巴或谷歌云）上。 AWS根据新条款，你不能将自己的 Windows Server 许可证带到， AWS 而必须使用包含许可证的实例。然而，如果您在此之前已购买了永久许可证，那么您仍然可以将这些 Windows Server 许可证部署到 Amazon EC2 专属主机。

### 物理级别的许可证
<a name="sql-server-rec-physical"></a>

在物理核心级别进行许可，允许您仅许可主机的物理核心，这样一来，您就可以在不影响所需许可证数量的情况下部署最多数量的实例。这通常通过使用 Windows Server 数据中心和 SQL Server 企业版来完成。

举个例子，假设一台具有 48 个内核的 R5 专用主机，相当于 96 v。CPUs 如果您使用 Windows 服务器数据中心版，则只需要 48 个许可证。这使您能够部署高达 96 v 的实例组合CPUs，如下图所示。

![\[物理级别的许可证\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/r5_dh_licenses.png)


如果您有足够的工作负载，能够最大限度地利用一台主机来运行多个实例，那么这种方法将会特别具有成本效益。通过在物理核心级别进行许可，您可以避免为每个实例支付额外的许可费用，并实现您在许可方面的最大投资效益。

### 在 SQL Server 的物理核心级别进行许可
<a name="sql-server-rec-physical-core"></a>

在共享租赁中，SQL Server 许可基于CPUs分配给实例的 v 数。相比之下，对于专属主机，您可以按物理核心级别或 vCPU 级别来许可 SQL Server 企业版。

与之前提到的 R5 专属主机的示例一样，如果您在物理核心级别许可了 SQL Server 企业版，那么您只需 48 个 SQL Server 企业版许可证即可为这些主机进行许可。相比之下，在共享租赁模式中（在这种模式下，唯一的选项是按 vCPU 许可使用），要完成相同的工作负载，您必须拥有 96 个 SQL Server 企业版许可证。因此，与共享租赁相比，专属主机最多可以为您节省 50% 的 SQL Server 许可成本。此外，通过自带符合条件的 Windows 许可证，还可以节省实例成本。

### 整合 SQL Server 实例
<a name="sql-server-rec-consolidate-instances"></a>

[SQL Server 整合](consolidate-instances.md)是将多个 SQL Server 实例合并到一台服务器的过程。SQL Server 要求每个实例至少有四个核心许可证，即使该实例只有两个 v CPUs。 这意味着，在少于四个内核的服务器上运行 SQL Server 可能会导致您过度许可这些实例并使用超出必要数量的许可证。

![\[SQL Server 整合\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/sql_server_consolidation.png)


例如，将两个CPUs 各有两个 v 的实例整合为一个带有 4 v 的实例，CPUs 可以将许可要求降低 50%。这是因为只需要四个核心许可证，而不是八个。

有关整合的更多信息，请参阅本指南的 [SQL Server 整合](consolidate-instances.md)部分。

### 降低 SQL Server 版本级别
<a name="sql-server-rec-downgrade-editions"></a>

[更改 SQL Server 版本](sql-server-editions.md)是优化许可使用情况和降低成本的关键策略之一。SQL Server 的企业版价格要比标准版贵得多，因此降级可以节省大量费用。

透明数据加密（TDE）和 Always On 可用性组是 SQL Server 企业版中的两个常用功能。但是，如果您不需要 SQL Server 企业版所包含的全部功能，则还有一些经济高效的替代方案可供您考虑。例如，从 SQL Server 2019 开始，您就可以在 SQL Server 标准版中使用 TDE。在 SQL Server 标准版中，你可以使用开启共享存储的故障转移群集来 FSx 取代 Always On 可用性组，以实现高可用性。

通过从 SQL Server 企业版降级到 SQL Server 标准版，您能够显著降低许可费用。有关更多信息，请参阅 AWS 存储博客[上 AWS发布的 “优化高可用性 SQL Server 部署的成本](https://aws.amazon.com/blogs/storage/optimizing-cost-for-your-high-availability-sql-server-deployments-on-aws/)”。

除了降低许可成本之外，降低 SQL Server 版本的级别还能帮助您减少软件保障费用，并避免未来可能出现的调整费用。如果您将未使用的许可证放回原处，则能避免额外的许可费用，并最大程度地发挥您的许可投资的价值。

重要的是要仔细评估您的 SQL Server 工作负载，并确定哪些功能对于您的业务需求而言至关重要。有关更多信息，请参阅 AWS 规范性指南中的[评估您的环境](https://docs.aws.amazon.com/prescriptive-guidance/latest/evaluate-downgrading-sql-server-edition/assess-environment.html)，并确定您的 Microsoft SQL Server 数据库是否使用特定于 SQL Server 企业版的功能。

如果您选择正确的 SQL Server 版本并使用 SQL Server 企业版功能的替代方案，则能够实现显著的成本节省，同时还能确保符合规定并满足业务需求。有关降级选项的更多信息，请参阅本指南的[比较 SQL Server 版本](sql-server-editions.md)部分。

### 在非生产环境中使用 SQL Server 开发人员版
<a name="sql-server-rec-dev-edition"></a>

在非生产环境中，您可以通过在本地环境中使用 MSDN 订阅来部署可授权使用的 SQL Server 版本，例如企业版或标准版。但是，MSDN 订阅不具有许可证移动性。因此，如果您迁移到 AWS，则无法将这些许可证带过来。您必须改用 SQL Server 开发人员版。

SQL Server 开发人员版是 SQL Server 的全功能版本，免费提供。此版本适用于 SQL Server 版本 2016 及更高版本。您可以从 Microsoft 网站下载它。SQL Server 开发人员版旨在用于所有非生产环境，例如开发、测试和暂存，前提是它未连接到实时生产数据。

如果您在非生产环境中使用 SQL Server 开发人员版，则可以避免额外的许可费用。有关更多信息，请参阅本指南的[评估 SQL Server 开发人员版](sql-server-dev.md)部分。

### 针对 SQL Server 工作负载优化 CPU
<a name="sql-server-rec-cpu-sql"></a>

在某些情况下，由于 RAM 或网络限制等其他因素，您可能需要选择 CPUs超过工作负载所需数量的实例类型。但是， AWS 提供了一种解决方案来帮助您在这些情况下优化许可成本。

您可以像大多数带有 SQL Server 核心许可证的客户一样，在 EC2 实例上禁用超线程或关闭 CPU 以限制主机可用的 CPUs 数量。此选项使您能够利用其他实例功能，例如 RAM，同时还能节省购买额外许可证的费用。

例如，如果您部署一个 r5.4xlarge 实例，因为您的工作负载需要 128 GB 的内存，但您只需要八个 SQL Server 内核，则可以在只有八个内核处于活动状态的情况下禁用实例的超线程处理。 CPUs通过这样做，您可以在所需的 SQL Server 许可证上节省 50% 的费用，因为您只需为正在实际使用的八个核心进行许可即可。


****  

| 实例类型 | 总计 v CPUs | 具有 “优化” 功能的主动 vCPU CPUs  | SQL Server 许可证节省费用 | 
| --- | --- | --- | --- | 
| r5.4xlarge | 16 | 8 | 50% | 
| r5.12xlarge | 48 | 8 | 83% | 

优化 CPU 功能可以在 Amazon EC2 启动配置期间进行配置，也可以通过修改现有实例来配置。它也可以应用于 BYOL 和附带许可证的 Amazon EC2 实例。这种灵活性可以帮助您根据工作负载需求调整CPU的大小，同时还可以减少Windows Server和SQL Server许可。对于包含许可证的 Amazon EC2 实例，减少 CPUs 可以立即节省许可成本。

如果您调整了实例的大小，则可以确保为您的工作负载选择最经济高效的实例类型。随着新实例类型的 AWS 推出，评估这些新实例能否以更少的内核满足工作负载要求非常重要。

## 其他资源
<a name="additional-resources"></a>
+ [亚马逊 Web Services 和微软：常见问题解答](https://aws.amazon.com/windows/faq/)（AWS 文档）

# 为 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 \$1 SQL 开发人员版 | 183.96 美元 | \$10 | \$10 | 183.96 美元 | 
| r5.xlarge | Windows Server（LI） | 183.96 美元 | 134.32 美元 | - | 318.28 美元 | 
| r5.xlarge | Windows \$1 SQL 开发人员版 | 183.96 美元 | 134.32 美元 | \$10 | 318.28 美元 | 
| r5.xlarge | Windows \$1 SQL Web 版（LI） | 183.96 美元 | 134.32 美元 | 49.64 美元 | 367.92 美元 | 
| r5.xlarge | Windows \$1 SQL 标准版（LI） | 183.96 美元 | 134.32 美元 | 350.4 美元 | 668.68 美元 | 
| r5.xlarge | Windows \$1 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第二代 Intel Xeon 处理器 | 3.5 GHz第三代 Intel Xeon 处理器 | 3.9 GHz第四代 Intel Xeon Scalable 处理器 | 3.5 GHz第三代 Intel Xeon 处理器 | 4.5 GHz第二代 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（4x 1900GB） | – | NVMe SSD（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 文档）

# 整合实例
<a name="consolidate-instances"></a>

本部分重点介绍将多个 SQL Server 实例整合到同一台服务器上的成本优化方法，旨在降低许可成本并最大限度地提高资源利用率。

## 概述
<a name="consolidate-instances-overview"></a>

创建实例是安装 SQL Server 数据库引擎这一过程的一部分。SQL Server 实例是一个完整的安装版本，包含其自身的服务器文件、安全登录信息以及系统数据库（master、model、msdb 和 tempdb）。因为每个实例都有其自身的文件和服务，所以您可以在同一操作系统上安装多个 SQL Server 实例，而这些实例之间不会相互干扰。但是，由于这些实例都安装在同一台服务器上，因此它们共享相同的硬件资源，包括计算能力、内存和网络连接。

在生产环境中，通常每个服务器只会使用一个 SQL Server 实例，这样“繁忙”的实例就不会过度占用共享硬件资源。为每个 SQL Server 实例配备其专属的操作系统，并为其分配独立的资源，这比依赖资源治理方式要好得多。这对于那些需要大量 RAM 和 CPU 资源的高性能 SQL Server 工作负载来说尤其适用。

但是，并非所有 SQL Server 工作负载都会消耗大量资源。例如，一些组织会为其每位客户分配专属的 SQL Server 实例，以满足合规或安全方面的要求。对于规模较小的客户或者那些通常不太活跃的客户而言，这意味着以最少的资源来运行 SQL Server 实例。

正如 [Microsoft SQL Server 2019：许可指南](https://download.microsoft.com/download/e/2/9/e29a9331-965d-4faa-bd2e-7c1db7cd8348/SQL_Server_2019_Licensing_guide.pdf)中所述，每台运行 SQL Server 的服务器必须至少占用四个 CPU 许可证。这意味着，即使你运行的服务器只有两个 vCPUs，你仍然必须为四个 v 的 SQL Server 授予许可CPUs。 根据[微软的公开SQL Server定价](https://www.microsoft.com/en-us/sql-server/sql-server-2022-pricing)，如果你使用SQL Server标准版，则相差3,945美元。对于那些使用单一 SQL Server 实例来运行多台服务器且资源使用量最低的组织而言，由于必须为未使用的资源支付许可费用，这可能会产生相当大的成本。

## 成本优化方案
<a name="consolidate-instances-cost-opt-scenario"></a>

本节探讨了一个示例场景，该场景对比了运行四台 Windows Server 服务器（每台服务器仅配备一个 SQL Server 实例）与运行一台更大规模的 Windows Server 服务器（该服务器同时运行多个 SQL Server 实例）之间的差异。

如果每个 SQL Server 实例只需要两个 v CPUs 和 8 GB 内存，则每台服务器的 SQL Server 许可证总成本为 7,890 美元，此外每小时的计算成本为 0.096 美元。


****  

| EC2 实例 | v CPUs | RAM | Price | v CPUs 获得许可 | SQL Server 许可总成本 | 
| --- | --- | --- | --- | --- | --- | 
| m6i.large | 2 | 8 | 0.096 | 4 | 7,890 美元 | 

如果将服务器数量扩大到四台，那么总的费用将是 31560 美元，其中包括 SQL Server 的许可费用，以及每小时 0.384 美元的计算费用。


****  

| EC2 实例 | v CPUs | RAM | Price | v CPUs 获得许可 | SQL Server 许可总成本 | 
| --- | --- | --- | --- | --- | --- | 
| 4x m6i.large | 2 | 32 | 0.384 | 16 | 31,560 美元 | 

如果将全部四个 SQL Server 实例整合到一个 EC2 实例中，则总的计算资源量和计算能力将保持不变。但是，通过消除不必要的 SQL Server 许可成本，您能够将运行该工作负载的总成本降低 15780 美元。


****  

| EC2 实例 | v CPUs | RAM | Price | v CPUs 获得许可 | SQL Server 许可总成本 | 
| --- | --- | --- | --- | --- | --- | 
| m6i.2xlarge | 8 | 32 | 0.384 | 8 | 15,780 美元 | 

**注意**  
在前面的表格中，计算成本显示了在 `us-east-1` 区域运行 Windows Server 的 Amazon EC2 服务器的每小时按需定价。SQL Server 标准版的许可费用指的是 [Microsoft 的 SQL Server 公开定价](https://www.microsoft.com/en-us/sql-server/sql-server-2022-pricing)。

## 成本优化建议
<a name="consolidate-instances-cost-opt-rec"></a>

如果您正在考虑整合 SQL Server 实例，那么您最需要关注的问题就是您想要整合的每个实例所消耗的资源情况。为了更好地了解每台服务器上的工作负载模式，收集一段时间内的性能指标很重要。一些用于监控资源消耗的常用工具包括[亚马逊 CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-basic-detailed.html)、[Windows 性能监控器](https://techcommunity.microsoft.com/blog/askperf/windows-performance-monitor-overview/375481) (perfmon) 和 SQL Server 的[本机监控工具](https://learn.microsoft.com/en-us/sql/relational-databases/performance/performance-monitoring-and-tuning-tools?view=sql-server-ver16)。

我们建议您在分析您的 SQL Server 工作负载是否能够合并以使用同一服务器资源（同时确保这些资源不会相互干扰）时，考虑以下问题：
+ 稳定运行状态下消耗了哪些资源（CPU、内存和网络带宽）？
+ 峰值状态下消耗了哪些资源（CPU、内存和网络带宽）？
+ 峰值多久发生一次？ 峰值是否一致？
+ 一台服务器的资源峰值是否与另一台服务器的资源峰值重合？
+ SQL Server 使用的存储 IOPS 和吞吐量分别是多少？

如果您打算继续实施将 SQL Server 实例合并的计划，请参阅 AWS 云运营与迁移博客中的[在一个 Amazon EC2 实例上运行多个 SQL Server 实例](https://aws.amazon.com/blogs/mt/run-multiple-instances-sql-server-on-one-amazon-ec2-instance/)一文。这篇文章详细介绍了如何在 SQL Server 中进行配置更改以添加更多实例。开始操作之前，请先考虑一下在同一台服务器上安装多个实例时可能出现的细微差异：
+ 默认的 SQL Server 数据库实例名为 `MSSQLSERVER` 并使用端口 1433。
+ 安装在同一台服务器上的每个其他实例都是一个“命名的”数据库实例。
+ 每个命名的实例都有一个唯一的实例名称和一个唯一的端口。
+ [SQL Server 浏览器](https://learn.microsoft.com/en-us/sql/tools/configuration-manager/sql-server-browser-service?view=sql-server-ver16)必须运行，以便协调对命名实例的访问流量。
+ 每个实例都可以为数据库数据文件和单独的登录信息分别指定不同的位置。
+ SSQL Server 的[最大服务器内存设置](https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/server-memory-server-configuration-options?view=sql-server-ver16)必须根据每个实例的性能需求进行配置，其组合总内存还会为底层操作系统留出足够的内存。
+ 您可以利用 SQL Server 的[本机备份和恢复](https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/back-up-and-restore-of-sql-server-databases?view=sql-server-ver16)功能，或 [AWS DMS](https://aws.amazon.com/blogs/database/consolidate-data-from-identical-sql-server-databases-into-a-single-amazon-rds-for-sql-server-database-using-aws-dms/) 进行迁移或整合。

## 其他资源
<a name="consolidate-instances-resources"></a>
+ [SQL Server 许可数据表](https://download.microsoft.com/download/0/5/c/05c60185-ebdd-4472-895a-3d8e8da55682/SQL_Server_2019_Licensing_Datasheet.pdf)（AWS 云运营和迁移博客）
+ [SQL Server 多实例设置博客文章](https://aws.amazon.com/blogs/mt/run-multiple-instances-sql-server-on-one-amazon-ec2-instance/)（AWS 云操作和迁移博客）

# 比较 SQL Server 版本
<a name="sql-server-editions"></a>

## 概述
<a name="sql-server-editions-overview"></a>

Microsoft SQL Server 许可费用是 Windows 工作负载环境中的最大费用之一。SQL Server 的许可费用可能会远远超出运行工作负载所需的计算成本。如果选错了版本，您可能会为一些您根本不用或根本不需要的功能付费。本部分比较了以下 SQL Server 版本，包括其功能和相关成本：
+ **企业版**：SQL Server 企业版提供数据中心功能，包括高性能、无限虚拟化和多种商业智能（BI）工具。
+ **标准版**：SQL Server 标准版为规模较小的组织和部门提供基本的数据管理和商业智能服务。
+ **Web** — SQL Server 网络版适用于作为网络托管商或网络增值提供商的公司 (VAPs)。此版本具有较低的总拥有成本，并且为从小型到大型规模的 Web 应用程序提供可扩展性和管理能力。
**重要**  
您可以使用 SQL Server Web 版支持公用且可通过互联网访问的网页、网站、Web 应用程序和 Web 服务。您不能使用 SQL Server Web 版来支持 line-of-business应用程序（例如客户关系管理或企业资源管理应用程序）。
+ **开发人员版**：SQL Server 开发人员版包含企业版的所有功能，但仅用于开发目的。
+ **精简版**：SQL Server 精简版是一款免费的数据库软件，可用于学习或构建桌面应用程序。您可以将精简版更新到其它版本。

**注意**  
SQL Server 评估版提供 180 天的试用期。

## 成本影响
<a name="sql-server-editions-cost-impact"></a>

您可以从 Microsoft 的经销商处购买 SQL Server 许可证，并使用软件保障将其带到 AWS 。或者，您可以将 SQL Server 许可证与包含许可证的 Amazon EC2 pay-as-you-go 型号一起使用。 AMIs

如果您从 Microsoft 经销商处购买 SQL Server 许可证，则核心许可证以两份为一包进行出售，每台服务器至少需要购买四份核心许可证。下表显示了企业版和标准版的成本比较。


****  

| 版本 | SQL Server 企业版（2 个核心一包） | SQL Server 标准版（2 个核心一包） | 节省成本 | 
| --- | --- | --- | --- | 
| 2022 | 15,123 美元 | 3,945 美元 | 74% | 
| 2019 | 13,748 美元 | 3,586 美元 | 74% | 

**注意**  
上表中的定价基于 Microsoft 对 [SQL Server 2022](https://www.microsoft.com/en-us/sql-server/sql-server-2022-pricing) 和 [SQL Server 2019](https://www.microsoft.com/en-us/sql-server/sql-server-2019-pricing) 的公开定价。

以下成本比较显示了使用包含许可证的 Amazon EC2 托管不同版本的 SQL Server。 AMIs在此比较中，SQL Server 托管在 `us-east-1` 区域的 r6i.xlarge（4 个 vCPU）上。


****  

| 实例 | 计算成本 | Windows 许可证成本 | SQL Server 许可证成本 | Total | 
| --- | --- | --- | --- | --- | 
| R6i.xlarge（Linux） | 183.96 美元 | – | – | 183.96 美元 | 
| R6i.xlarge \$1 Windows | 183.96 美元 | 134.32 美元 | – | 318.28 美元 | 
| R6i.xlarge \$1 SQL Server Web 版 | 183.96 美元 | 134.32 美元 | 49.35 美元 | 367.63 美元 | 
| R6i.xlarge \$1 SQL Server 标准版 | 183.96 美元 | 134.32 美元 | 350.4 美元 | 668.68 美元 | 
| R6i.xlarge \$1 SQL 企业版 | 183.96 美元 | 134.32 美元 | 1,095 美元 | 1,413.28 美元 | 

通过为您的工作负载选择适当的 SQL Server 版本，您最多可以节省 95% 的 SQL Server 许可费用。下表比较了 r6i.xlarge 实例上 SQL Server 许可证的费用。


****  

| Edition | 节省成本 % | 
| --- | --- | 
| 标准版与企业版对比 | 68% | 
| Web 版与标准版对比 | 86% | 
| Web 版与企业版对比 | 95% | 

在大多数情况下，组织会从企业版切换到标准版，但也有一些情况下可以从标准版或企业版切换到 Web 版。

## 成本优化建议
<a name="sql-server-editions-opt-rec"></a>

您可以根据扩展限制、高可用性、性能和安全性等因素，为您的工作负载选择最适合的版本。以下表格列出了各 SQL Server 版本所支持的功能。这能帮助您确定使用哪个版本。这种比较适用于 [SQL Server 2016 SP1 及更高版本](https://learn.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2022?view=sql-server-ver16)。

### 扩展限制
<a name="sql-server-editions-opt-rec-scaling"></a>

以下表格对比了不同 SQL Server 版本的扩展限制情况。


****  

| 功能 | 企业版 | 标准版 | Web 版 | 精简版 | 
| --- | --- | --- | --- | --- | 
| 单个 SQL Server 数据库引擎、SQL Server 分析服务（SSAS）或 SQL Server Reporting Services（SSRS）实例所使用的最大计算容量 | 操作系统最大值 | 最多只能选择 4 个插槽或者 24 个核心中的较少者 | 最多只能选择 4 个插槽或者 16 个核心中的较少者 | 最多只能选择 4 个插槽或者 4 个核心中的较少者 | 
| 每个 SQL Server 数据库引擎实例的缓冲池最大内存 | 操作系统最大值 | 128 GB | 64 GB | 1410 MB | 
| 每个 SQL Server 数据库引擎实例的缓冲池扩展的最大容量 | 已配置最大内存的 32 倍 | 已配置最大内存的 4 倍 | 不适用 | 不适用 | 
| 最大关系数据库大小 | 524 PB | 524 PB | 524 PB | 10 GB | 
| Columnstore 缓存或内存优化型数据的最大内存 | 操作系统最大值 | 32 GB | 16 GB | 352 MB | 

如果您的应用程序需要少于 16 个内核 (32 vCPUs) 和 64 GB 的内存，则可以从 SQL Server 网页版开始评估。如果您的工作负载需要超过 64 GB 的内存或者其他高可用性选项，则您必须升级到 SQL Server 标准版。

您可以使用 SQL Server Web 版来支持面向公众和互联网的网页、网站、Web 应用程序以及 Web 服务，但不能使用 SQL Server Web 版来支持业务线应用程序。有关 SQL Server Web 版使用案例的更多信息，请联系 [Microsoft 许可支持部门](https://www.microsoft.com/licensing/docs/view/Licensing-Use-Rights)或您的 Microsoft 经销商。

您可以将 SQL Server 标准版用于内存不超过 24 个内核 (48 vCPUs) 和 128 GB 内存的工作负载。但是，您可以使用[缓冲池扩展](https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/buffer-pool-extension?view=sql-server-ver16)来使 SQL Server 标准版能够利用[本地实例存储](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html)，就像 r6id EC2 实例中所具备的那种存储方式一样。这样可以将内存最高扩展到最大内存配置的四倍。这种组合功能能够在内存需求开始增加时，推迟服务器升级至企业版的过程。

您可以通过在缓冲池和[页生命周期](https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-buffer-node?view=sql-server-ver16)计数器中查找数据库页面来识别内存利用率。页生命周期是指页面在内存中停留的时间（即数据在内存中保存多久后才会被刷新回磁盘）。该计数器的默认值为 300。如果页面在内存中停留数小时或数天，则有降低内存分配量的可能性。

### 高可用性
<a name="sql-server-editions-opt-rec-avail"></a>

以下表格对比了不同 SQL Server 版本的高可用性功能。


****  

| 功能 | 企业版 | 标准版 | Web 版 | 精简版 | 
| --- | --- | --- | --- | --- | 
| 服务器核心支持 1 | 支持 | 是 | 是 | 是 | 
| 日志传送 | 支持 | 是 | 是 | 否 | 
| 数据库镜像 | 是 | 完全安全模式 | 仅作为见证 | 仅作为见证 | 
| 备份压缩 | 支持 | 是 | 否 | 否 | 
| Always On 失效转移群集实例 | 16 个节点 | 2 个节点 | 否 | 否 | 
| Always On 可用性组 | 最多 8 个辅助副本，包括 2 个同步辅助副本 | 否 | 否 | 否 | 
| 基本可用性组 | 否 | 2 个节点 | 否 | 否 | 
| 在线页面和文件恢复 | 是 | 否 | 否 | 否 | 
| 在线索引 | 是 | 否 | 否 | 否 | 
| 在线架构更改 | 是 | 否 | 否 | 否 | 
| 快速恢复 | 是 | 否 | 否 | 否 | 
| 镜像备份 | 是 | 否 | 否 | 否 | 
| 热添加内存和 CPU | 是 | 否 | 否 | 否 | 
| 加密备份 | 支持 | 是 | 否 | 否 | 
| 混合备份到 Microsoft Azure（备份到 URL） | 支持 | 是 | 否 | 否 | 
| 用于灾难恢复的失效转移服务器 | 支持 | 是 | 否 | 否 | 
| 用于实现高可用性的失效转移服务器 | 支持 | 是 | 否 | 否 | 

### 其他常见功能
<a name="sql-server-editions-opt-rec-features"></a>

以下表格对比了不同 SQL Server 版本的最常见功能。有关功能的详尽列表，请参阅 Microsoft 文档中的 [SQL Server 2019 的版本和支持的功能](https://learn.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2019?view=sql-server-ver16)。


****  

| 功能 | 企业版 | 标准版 | Web 版 | 精简版 | 
| --- | --- | --- | --- | --- | 
| （性能）资源调控器 | 是 | 否 | 否 | 否 | 
| （安全）透明数据库加密（TDE） | 支持 | 是 | 否 | 否 | 
| （安全）可扩展密钥管理（EKM） | 是 | 否 | 否 | 否 | 
| （复制）Oracle 出版物 | 是 | 否 | 否 | 否 | 
| （复制）对等事务复制 | 是 | 否 | 否 | 否 | 
| 更改数据捕获 | 支持 | 是 | 否 | 否 | 

### SQL Server 开发人员版
<a name="sql-server-editions-opt-rec-developer"></a>

所有非生产工作负载（例如开发、QA、测试、暂存和 UAT 环境）都可以使用 SQL Server 开发人员版来节省 100% 的 SQL Server 许可费用。[下载 SQL Server](https://www.microsoft.com/en-us/sql-server/sql-server-downloads) 后，您可以通过使用共享租赁的方式在 EC2 实例上安装 SQL Server 开发人员版。SQL Server 开发人员版无需专用基础设施。有关更多信息，请参阅本指南中的对 [SQL Server 开发人员版](sql-server-dev.md)的建议。

### 切换版本
<a name="sql-server-editions-opt-rec-switching"></a>

对于现有的工作负载而言，从一个版本切换到另一个版本需要进行大量的测试。遵循最佳实践是检查运行在企业版或标准版上的工作负载，以查看是否使用了特定于版本的功能，以及是否有针对这些功能的替代解决方案。例如，如果您想查看您的数据库是否使用了任何企业级功能，可以像下面的示例命令所示，在所有数据库上运行[动态管理视图（DMV）](https://learn.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-db-persisted-sku-features-transact-sql?view=azuresqldb-current)。

`SELECT feature_name FROM sys.dm_db_persisted_sku_features; GO`

有些企业版的功能无法通过 T-SQL 来实现，比如作为 SQL 维护作业一部分的在线重新索引功能。这些功能必须手动验证。

### 迁移注意事项
<a name="sql-server-editions-opt-rec-migration"></a>

您对 SQL Server 的许可方式将决定您切换版本的选项。包括 SQL Server AMI 在内的 AMI 将许可费用包含在 EC2 实例的价格中，即将许可费用与 AMI 绑定。您可以使用 [AWS 账单代码](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/billing-info-fields.html)来验证您的 AMI 中包含的 SQL Server 版本。对于 AWS 包含许可证的实例，在操作系统内更改 SQL Server 版本并不会改变与 AMI 相关的账单。您必须将您的数据库迁移至一个新的 EC2 实例，并使用运行新版本 SQL Server 的 AMI 来完成迁移操作。

如果您自带许可证，则可以拥有更大的灵活性。通常仍建议您迁移到运行新版本的另一个 EC2 实例上。这样一来，如果出现未按预期进行的情况，也能方便地进行失效自动恢复。但是，如果必须使用现有服务器，则仍然可以 side-by-side安装 SQL Server 并在实例之间迁移数据库。有关 side-by-side版本降级的更多详细步骤，请参阅网站上的 [SQL Server 版本升级和降级](https://www.mssqltips.com/sqlservertip/6686/edition-upgrade-and-downgrade-in-sql-server/)。 MSSQLTips

## 其他资源
<a name="sql-server-editions-resources"></a>
+ [SQL Server 2022 的版本和支持功能](https://learn.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2022?view=sql-server-ver16)（Microsoft Learn）
+ [sys.dm\$1db\$1persisted\$1sku\$1features（Transact-SQL）](https://learn.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-db-persisted-sku-features-transact-sql?view=azuresqldb-current)（Microsoft Learn）
+ [您应该使用哪个 SQL Server 版本？](https://www.brentozar.com/archive/2019/01/which-version-of-sql-server-should-you-use/) （Brent Ozar Unlimited）
+ [AWS 定价计算器](https://calculator.aws/#/estimate?id=e138c18348afd3853a4874681c660bc1947ec5ca) (AWS)

# 评估 SQL Server 开发人员版
<a name="sql-server-dev"></a>

## 概述
<a name="sql-server-dev-overview"></a>

[SQL Server 开发人员版](https://www.microsoft.com/en-us/sql-server/sql-server-downloads)是 SQL Server 的免费版本，包含了企业版的所有功能，并且可以在任何非生产环境中使用。在无法使用 Microsoft 开发人员网络（MSDN）许可的云中，SQL Server 开发人员版是节省成本的好方法，无需为开发和测试工作负载提供许可证。这对于那些运行庞大的开发和测试环境并试图降低不必要的开支的团队来说尤其适用。

生产环境是指由应用程序（如互联网网站）的最终用户所访问的环境，其用途不仅限于收集反馈或对该应用程序进行验收测试。其他构成生产环境的场景包括：
+ 连接到生产数据库的环境
+ 能够为生产环境提供灾难恢复或备份功能的环境
+ 至少部分时间用于生产的环境，例如在活动高峰期被轮换至生产模式使用的服务器。

有关更多许可信息，请参阅 AWS 文档中的 [Amazon Web Services 和 Microsoft：常见问题](https://aws.amazon.com/windows/faq/)。

## 成本影响
<a name="sql-server-dev-cost-impact"></a>

如果您将 SQL Server 开发人员版用于非生产工作负责，那么您就可以 100% 节省目前用于开发和测试环境的 SQL Server 许可费用。


****  

| SQL Server 版本 | SQL Server 企业版（2 个核心一包） | SQL Server 标准版（2 个核心一包） | SQL Server 开发人员版 | 
| --- | --- | --- | --- | 
| 2022 | 15,123 美元 | 3,945 美元 | 免费 | 
| 2019 | 13,748 美元 | 3,586 美元 | 免费 | 

**注意**  
上表中的定价基于 Microsoft 对 [SQL Server 2022](https://www.microsoft.com/en-us/sql-server/sql-server-2022-pricing) 和 [SQL Server 2019](https://www.microsoft.com/en-us/sql-server/sql-server-2019-pricing) 的公开定价。

下表比较了在该`us-east-2`地区运行 4 v CPUs 和使用按需定价的不同 SQL Server 版本的成本。这适用于依赖中包含许可证的实例的场景。 AWS


****  

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

### 成本优化方案
<a name="sql-server-dev-opt-scenario"></a>

一家数据完整性公司完成了新一轮的收购之后，打算将新收购的工作负载从其当前托管于一家服务提供商的位置迁移出来，以便与 AWS 云中的其他工作负载进行整合。初步定价显示，该公司的SQL Server工作负载运行成本将 AWS 比当前托管服务提供商高60％。一家 MACO SME 对这一估算结果进行了评估，发现客户实际上是在向托管服务提供商支付用于其开发和测试环境的 SQL Server 许可费用。通过在迁移过程中将非生产工作负载切换到 SQL Server 开发人员版，该公司将其 SQL Server 许可费用减低了 40%。

### Amazon EC2 上包含的 SQL Server 许可证
<a name="sql-server-dev-opt-scenario-li"></a>

如果您在 EC2 实例上安装了 SQL Server AMIs，并且使用[附带许可证](https://docs.aws.amazon.com/sql-server-ec2/latest/userguide/sql-server-on-ec2-amis.html)，则无法直接从企业版转换为开发者版。包含许可证的实例的许可费用与 AMI 相关。即使从操作系统内部卸载了 SQL Server，EC2 实例仍需支付许可费用。

要转换为开发人员版，必须[下载 SQL Server 开发人员版](https://download.microsoft.com/download/c/c/9/cc9c6797-383c-4b24-8920-dc057c1de9d3/SQL2022-SSEI-Dev.exe)，将其安装到一个新的 EC2 实例上，然后迁移您的数据库。您可以通过多种方式在 EC2 实例之间迁移 SQL Server 数据库。有关更多信息，请参阅*将 Microsoft SQL Server 数据库迁移到 AWS 云*指南中的 [SQL Server 数据库迁移方法](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/methods.html)。您还可以使用[自动化 SQL Server 开发人员解决方案](https://aws.amazon.com/blogs/modernizing-with-aws/automating-sql-server-developer-deployments/)来准备您计划迁移到的新实例。

### Amazon EC2 上的 SQL Server BYOL
<a name="sql-server-dev-opt-scenario-byol"></a>

如果您有使用 BYOL 的 SQL Server 实例，则可以从以下就地转换或 side-by-side降级选项中进行选择：
+ 从 Microsoft 网站下载 [SQL Server 开发人员版](https://www.microsoft.com/en-us/sql-server/sql-server-downloads)。有关手动或自动安装的说明，请参阅 AWS 博客上的[自动化 SQL Server 开发人员部署](https://aws.amazon.com/blogs/modernizing-with-aws/automating-sql-server-developer-deployments/)一文。
+ 使用 [SQL Server 本机备份和恢复](https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/back-up-and-restore-of-sql-server-databases?view=sql-server-ver16)将数据库或 detach/attach 数据库从一个 SQL 实例迁移到另一个 SQL 实例。
+ 使用[自动化工具](https://github.com/aws-samples/ssm-automation-deploy-sql-developer)进行批量部署。

**注意**  
SQL Server 开发人员版仅适用于非生产环境。

## 其他资源
<a name="additional-resources"></a>
+ [自动部署 SQL Server 开发人员以在 EC2 上部署 SQL Server 开发人员版](https://aws.amazon.com/blogs/modernizing-with-aws/automating-sql-server-developer-deployments/)（AWS 博客）
+ [SQL 2022 定价](https://www.microsoft.com/en-us/sql-server/sql-server-2022-pricing)（Microsoft）
+ [SQL 2019 定价](https://www.microsoft.com/en-us/sql-server/sql-server-2019-pricing)（Microsoft）
+ [许可选项](https://docs.aws.amazon.com/sql-server-ec2/latest/userguide/sql-server-on-ec2-licensing-options.html)（Amazon EC2 上的 SQL Server）
+ [AWS 定价计算器](https://calculator.aws/#/addService/ec2-enhancement)（Amazon EC2 上的 SQL Server 文档）
+ [Microsoft SQL Server 2019 许可指南](https://download.microsoft.com/download/e/2/9/e29a9331-965d-4faa-bd2e-7c1db7cd8348/SQL_Server_2019_Licensing_guide.pdf)（从 Microsoft 中下载）
+ [SQL Server 2022 开发人员版](https://download.microsoft.com/download/c/c/9/cc9c6797-383c-4b24-8920-dc057c1de9d3/SQL2022-SSEI-Dev.exe)（从 Microsoft 中下载）

# 评估 Linux 上的 SQL Server
<a name="sql-server-linux"></a>

## 概述
<a name="sql-server-linux-overview"></a>

自 SQL Server 2017 开始，可以在 Linux 操作系统上安装 SQL Server。Linux 上的 SQL Server 已为企业做好准备，具有灵活性、高性能、安全 HA/DR 功能、降低的总体拥有成本、功能和出色的用户体验。您可以从 Windows Server 上的 SQL Server 切换到 Linux 上的 SQL Server，以节省 Windows Server 的许可费用。

对于 Linux，SQL Server 可以在 Red Hat Enterprise Linux（RHEL）、SUSE Linux Enterprise Server（SLES）、Ubuntu 和 Amazon Linux 2 上部署。SQL Server 数据库引擎在 Windows Server 和 Linux 上的运行方式是相同的，但在使用 Linux 系统时，某些任务存在一些根本性的变化。在 Linux 和 Windows 上运行 SQL Server Always On 应用程序的一个关键区别与失效转移群集有关。如果您在 Windows Server 主机上部署 Always On 可用性组，则可以利用 [Windows Server 失效转移群集（WSFC）](https://learn.microsoft.com/en-us/sql/sql-server/failover-clusters/windows/windows-server-failover-clustering-wsfc-with-sql-server?view=sql-server-ver16)和 Active Directory 作为支持失效转移群集的内置功能。但是，WSFC 和 Active Directory 都无法在 Linux 上支持失效转移群集。如果要在 Linux 上启动 SQL Server 的故障转移群集，则可以使用 [ClusterLabs Pacem](https://aws.amazon.com/blogs/opensource/deploying-a-highly-available-microsoft-sql-server-on-linux-on-aws/) aker [AWS Launch Wizard](https://aws.amazon.com/launchwizard/)来简化集群设置和 Linux 实例上的 SQL 安装。

Windows 和 Linux 上的 SQL Server 共享一个共同的代码库。也就是说，SQL Server 核心引擎根本没有任何更改即可在 Linux 上运行。SQL Server 引入了平台抽象层（SQLPAL），如下图所示。

![\[序列服务器平台抽象层（SQLPAL）\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/sql_pal.png)


SQLPAL 负责对 SQL Server 与底层操作系统之间的调用及通信进行抽象处理。主机扩展只是一个原生的 Linux 应用程序。低级操作系统函数是针对优化 I/O、内存和 CPU 使用情况而进行的原生调用。当主机扩展启动时，它会加载并初始化 SQLPAL，随后便会启动 SQL Server。SQLPAL 会启动独立的软件进程，这些进程会为其余的代码提供所需的转换服务。在 SQL Server 架构中新增这一层意味着，那些使 SQL Server 在 Windows 系统上表现如此强大的企业级核心功能和优势，在任何操作系统环境下都能得以实现。

## 成本影响
<a name="sql-server-linux-cost-impact"></a>

对于 r5.2xlarge 实例，在每种情况下，Windows Server 的许可费用均降低约 268 美元。与使用价格较低的 SQL Server 版本相比，此次成本削减占服务器总成本的比例更高。下表显示成本节省情况。


****  

| 实例 | Edition | Windows 上的 SQL Server 的每月费用 | Linux 上的 SQL Server 的每月费用 | 节省成本 | 
| --- | --- | --- | --- | --- | 
| r5.2xlarge | Web | 735 美元 | 466 美元 | 37% | 
| r5.2xlarge | 标准 | 1,337 美元 | 1,068 美元 | 20% | 
| r5.2xlarge | Enterprise | 2,826 美元 | 2,558 美元 | 10% | 

**注意**  
上表中的价格估算基于 `us-east-1` 区域的按需定价，可以直接在 [AWS 定价计算器](https://calculator.aws/#/estimate?id=fd37122637710aa7ba46d1949e8b6a15f68d3c0f) 中查看。

以一个示例场景为例，一家处于 SMB 细分领域的 ISV 客户希望在其开发环境方面节省成本。他们已经在一组 Windows 服务器上使用了 SQL Server 开发人员版。通过从使用 SQL Server 开发人员版的 Windows 切换到使用 SQL Server 开发人员版的 Linux，ISV 客户可以节省 33% 的开发工作负载费用。以下表格列出了此情景下的相关估算成本。


****  

| Estimate | 月度成本 | 
| --- | --- | 
| [Windows \$1 SQL Server](https://calculator.aws/#/estimate?id=da0a0f5f58ddf91aa3398af3a78691cfa2204673) | 9,307.72 美元 | 
| [Linux \$1 SQL Server](https://calculator.aws/#/estimate?id=131966c579020eaec957f441c67e9aa0bfd32411) | 6,218.36 美元 | 
| 预估的成本节省 | 3089.36 美元（33%） | 

在另一个示例场景中，一家公司将包含许可证的 SQL Server EC2 实例从 Windows 迁移到了 Linux。该公司每年在 Windows Server 的许可费用上节省了总计 30 万美元——约占其整个 AWS 费用的 20%。

## 成本优化建议
<a name="sql-server-linux-optrec"></a>

我们建议您考虑以下几点：
+ 从 SQL Server 2017 开始，Linux 上的 SQL Server 受到支持。
+ 为了帮助进行切换，您可以使用[适用于 Microsoft SQL Server 数据库的 Windows 到 Linux 平台更换助手](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/replatform-sql-server.html)。平台更换助手是一款脚本工具，能够帮助您将现有的 SQL Server 工作负载从 Windows 迁移到 Linux 操作系统。它会检查常见的不兼容性，从 Windows 主机中导出数据库，然后将这些数据库导入到在 Ubuntu 16.04 上运行 Microsoft SQL Server 2017 的 EC2 实例中。
+ 您也可以使用 SQL Server 中的[备份和还原](https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/back-up-and-restore-of-sql-server-databases?view=sql-server-ver16)功能从 Windows 上的 SQL Server 切换到 Linux。
+ 您可以使用 [AWS Launch Wizard](https://docs.aws.amazon.com/launchwizard/latest/userguide/what-is-launch-wizard.html) 轻松快速地部署到 Linux 或 Ubuntu 上的 SQL Server。Launch Wizard 可以根据您的应用程序需求，在独立部署和高可用性场景下，在 Linux 或 Ubuntu 系统上部署 SQL Server。有关更多信息，请参阅 Microsoft 工作负载博客[上的 “始终在 Linux 上部署到 SQL Server](https://aws.amazon.com/blogs/modernizing-with-aws/deploy-microsoft-sql-server-always-on-to-linux-with-aws-launch-wizard/)” 的 AWS 文章。 AWS Launch Wizard

下图展示了采用 Microsoft SQL Server 数据库的 Windows 到 Linux 更换平台助手的解决方案架构。

![\[Windows 到 Linux 的更换平台助手架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/replatforming_assistant.png)


## 其他资源
<a name="sql-server-linux-resources"></a>
+ [Linux 上的 SQL Server 概述](https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-overview?view=sql-server-ver16)（Microsoft Learn）
+ [Linux 上的 SQL Server 的安装指南](https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-setup?view=sql-server-ver16)（Microsoft Learn）
+ 使用 AWS Launch Wizard（ AWS 博客@@ [上的微软工作负载）在 Linux 上部署到 SQL Server](https://aws.amazon.com/blogs/modernizing-with-aws/deploy-microsoft-sql-server-always-on-to-linux-with-aws-launch-wizard)
+ [Linux 上的高可用性 SQL Server](https://aws.amazon.com/blogs/opensource/deploying-a-highly-available-microsoft-sql-server-on-linux-on-aws/)（AWS 开源博客）

# 优化 SQL Server 备份策略
<a name="sql-server-backup"></a>

## 概述
<a name="sql-server-backup-overview"></a>

大多数组织都在寻找合适的解决方案，以确保其在 [Amazon EC2](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/ec2-sql.html) 上的 SQL Server 的数据安全，从而满足其当前对于恢复点目标（RPO）（即自上一次备份以来的最大可接受时间间隔）以及恢复时间目标（RTO）（即服务中断与恢复服务之间最大可接受延迟时间）的要求。如果在 EC2 实例上运行 SQL Server，您可以通过多种方式创建数据备份和还原数据。保护 Amazon EC2 上的 SQL Server 数据的备份策略包括以下内容：
+ 使用启用了 Windows 卷影复制服务（VSS）的 [Amazon Elastic Block Store（Amazon EBS）](https://learn.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service)快照或 [AWS Backup](https://aws.amazon.com/backup/) 进行服务器级备份
+ 在 SQL Server 中使用[本机备份和还原](https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/back-up-and-restore-of-sql-server-databases)进行数据库级备份

对于[数据库级本机备份](https://docs.aws.amazon.com/prescriptive-guidance/latest/sql-server-managing-on-aws/database-level-backup.html)，您具有以下存储选项：
+ 使用 [Amazon EBS 卷](https://docs.aws.amazon.com/prescriptive-guidance/latest/sql-server-managing-on-aws/database-level-backup.html#ebs-volumes)进行本地备份
+ 使用亚马逊（[ FSx 适用于 Windows 文件服务器）或亚马逊（适用于 NetApp ONTAP） FSx 进行网络文件](https://docs.aws.amazon.com/prescriptive-guidance/latest/sql-server-managing-on-aws/database-level-backup.html#amazon-fsx)系统备份
+ 使用 [AWS Storage Gateway](https://docs.aws.amazon.com/prescriptive-guidance/latest/sql-server-managing-on-aws/database-level-backup.html#storage-gateway) 进行到 Amazon Simple Storage Service（Amazon S3）的网络备份
+ 直接备份到适用于 SQL Server 2022 的 Amazon S3

该部分会执行以下操作：
+ 突出展示有助于您节省存储空间的功能
+ 比较不同后端存储选项的成本
+ 提供指向深入文档的链接，以帮助实施这些建议

## 使用启用 VSS 的快照进行服务器级备份
<a name="sql-server-backup-vss"></a>

支持 VSS 的快照架构使用 AWS Systems Manager [运行命令在](https://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html) SQL Server 实例上安装 VSS 代理。您还可以使用 Run Command 调用整个工作流程，包括将操作系统和应用程序缓冲区刷新到磁盘、暂停 I/O 操作、拍摄 EBS 卷的 point-in-time快照，然后恢复 I/O。

这个 Run Command 会为所有连接到目标实例的 EBS 卷创建自动化快照。您还可以选择排除根卷，因为用户数据库文件通常存储在其他卷上。如果您对多个 EBS 卷进行条带化来为 SQL Server 文件创建单个文件系统，Amazon EBS 还支持使用单个 API 命令的崩溃一致性多卷快照。有关[启用 VSS 的应用程序一致性 EBS 快照](https://aws.amazon.com/blogs/mt/take-microsoft-vss-enabled-snapshots-using-amazon-ec2-systems-manager/)的更多信息，请参阅 Amazon EC2 文档中的[创建 VSS 应用程序一致性快照](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/application-consistent-snapshots.html)。

以下图表展示了使用启用 VSS 的快照进行的服务器级备份的架构。



![\[启用 VSS 的快照架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/snapshots_backup_arch.png)


请考虑使用启用 VSS 的快照的以下益处：
+ 数据库实例的第一个快照包含完整数据库实例的数据。相同数据库实例的后续快照为[增量](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-snapshots.html#how_snapshots_work)快照，这意味着仅会保存在最新快照后更改的数据。
+ EBS 快照提供 point-in-time恢复功能。
+ 您可以[从快照还原到新的 SQL Server EC2 实例](https://docs.aws.amazon.com/prescriptive-guidance/latest/backup-recovery/restore.html)。
+ 如果使用 Amazon EBS 对实例进行加密，或者使用 TDE 对实例中的数据库进行加密，则该实例或数据库将使用相同的加密方式自动还原。
+ 您可以复制您的[自动跨区域备份](https://docs.aws.amazon.com/ebs/latest/userguide/event-policy.html)。
+ 从快照中还原 EBS 卷时，应用程序可以立即对其进行访问。这意味着，在从快照中还原 SQL Server 的一个或多个底层 EBS 卷后，您可以立即将 SQL Server 置于在线状态。
+ 默认情况下，还原后的卷会在应用程序首次尝试读取卷时从 Amazon S3 获取底层块。这意味着从快照还原 EBS 卷后，性能可能会出现延迟。卷最终捕获到标称性能。但是，您可以使用[快速快照还原（FSR）](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-fast-snapshot-restore.html)快照避免出现该延迟。
+ 您可以使用 [EBS 快照的生命周期管理](https://aws.amazon.com/blogs/aws/new-lifecycle-management-for-amazon-ebs-snapshots/)。

请考虑使用启用 VSS 的快照的以下限制：
+ 您无法使用 SQL Server 实例的加密快照执行跨区域 point-in-time恢复。
+ 您无法创建未加密实例的加密快照。
+ 您无法还原单个数据库，因为快照是在 EBS 卷级拍摄的。
+ 您无法将实例还原到其自身位置。
+ 数据库实例的快照必须使用与数据库实例相同的 AWS Key Management Service （AWS KMS）密钥进行加密。
+  I/O 在快照备份过程中，存储会暂停几分之一秒（大约 10 毫秒）。

## 使用 SQL 服务器备份 AWS Backup
<a name="sql-server-backup-aws-backup"></a>

您可以使用[AWS Backup](https://aws.amazon.com/backup/)来集中和自动执行数据 AWS 服务保护。 AWS Backup 提供了一种经济实惠、完全托管、基于策略的解决方案，可大规模简化数据保护。 AWS Backup 还可以帮助您履行监管合规义务并实现业务连续性目标。结合使用 AWS Organizations， AWS Backup 使您能够集中部署数据保护（备份）策略，以配置、管理和治理您 AWS 账户 组织和资源的备份活动。

下图显示了通过使用 AWS Backup在 EC2 上构建 SQL Server 备份与还原解决方案的架构。

![\[AWS Backup 建筑\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/aws_backup_arch.png)


请考虑使用 AWS Backup备份 SQL Server 的以下益处：
+ 您可以自动备份计划、保留管理和生命周期管理。
+ 您可以将备份策略集中到整个组织中，跨多个账户和。 AWS 区域
+ 您可以集中监控备份活动，并跨 AWS 服务发出提醒。
+ 您可以为灾难恢复计划实施跨区域备份。
+ 该解决方案支持跨账户备份。
+ 您可以使用二级备份加密来执行安全备份。
+ 所有备份都支持使用加密密钥进行 AWS KMS 加密。
+ 该解决方案适用于 TDE。
+ 您可以从 AWS Backup 控制台中还原到特定的恢复点。
+ 您可以备份整个 SQL Server 实例，其中包括所有 SQL Server 数据库。

## 数据库级备份
<a name="sql-server-backup-database"></a>

这些方法使用 Microsoft SQL Server 的本机备份功能。您可以对 SQL Server 实例上的单个数据库进行备份，也可以恢复单个数据库。

这些用于本机 SQL Server 备份和恢复的选项还支持以下内容：
+ 压缩备份和多文件备份
+ 完整备份、差异备份和 T 日志备份
+ TDE 加密的数据库

### SQL Server 本机备份并还原到 Amazon S3
<a name="sql-server-backup-native-s3"></a>

Amazon EC2 上的 SQL Server 支持 SQL Server 数据库的本机备份和恢复。您可以对 SQL Server 数据库进行备份，然后将备份文件还原到现有数据库、新的 SQL Server EC2 实例、Amazon RDS for SQL Server 或本地服务器。

Storage Gateway 是一项混合云存储服务，它为本地应用程序提供对几乎无限的云存储的访问权限。您可以使用存储网关将您的 Microsoft SQL Server 数据库直接备份到 Amazon S3，从而减少本地存储占用空间，并使用 Amazon S3 实现持久、可扩展且经济实惠的存储。

下图显示了使用存储网关和 Amazon S3 的本机备份和还原解决方案的架构。

![\[存储网关和 Amazon S3 架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/storage_gateway_backup_arch.png)


请考虑使用 存储网关进行本机 SQL Server 备份的以下益处：
+ 您可以将存储网关映射为 EC2 实例上的服务器消息块（SMB）文件共享，并将备份发送到 Amazon S3。
+ 备份直接或通过存储网关文件缓存发送到 S3 存储桶。
+ 支持多文件备份。

考虑使用存储网关进行本机备份的以下限制：
+ 必须为每个单独的数据库设置备份和恢复。
+ 您必须为备份文件管理 [Amazon S3 生命周期政策](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)。

有关如何设置存储网关的更多信息，请参阅 AWS 博客上的[使用 AWS Storage Gateway将 SQL Server 备份存储到 Amazon S3 中](https://aws.amazon.com/blogs/database/storing-sql-server-backups-in-amazon-s3-using-aws-storage-gateway/)。

### SQL Server 本机备份到 EBS 卷
<a name="sql-server-backup-native-ebs"></a>

您可以对 SQL Server 数据库进行本机备份，并将文件存储在 Amazon EBS 卷中。Amazon EBS 是一项高性能的数据块存储服务。EBS 卷具有弹性，支持加密功能。它们可以分离并连接到 EC2 实例。您可以将 EC2 实例上的 SQL Server 在相同或不同的 EBS 卷类型上进行备份。备份到不同的 EBS 卷的一个优点是可以节省成本。

下图显示了 EBS 卷的本机备份的架构。



![\[Amazon EBS 卷架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/ebs_backup_arch.png)


考虑使用 SQL Server 本机备份到 EBS 卷的以下益处：
+ 您可以对 SQL Server EC2 实例上的单个数据库进行备份，也可以恢复单个数据库，无需恢复整个实例。
+ 支持多文件备份。
+ 您可以使用 SQL Server Agent 和 SQL Server 作业引擎安排备份作业。
+ 您可以通过选择硬件来实现更高的性能。例如，您可以使用 st1 存储卷来实现更高的吞吐量。

考虑使用到 EBS 卷的本机备份的以下限制：
+ 您必须手动将备份从 EBS 卷移至 Amazon S3。
+ 对于大型备份，您必须管理 Amazon EC2 上的磁盘空间。
+ 在 EC2 实例上，Amazon EBS 吞吐量可能是一个瓶颈。
+ 在 Amazon EBS 上存储备份需要额外的存储空间。

### FSx 适用于 Windows 文件服务器的 SQL Server 本机备份到亚马逊
<a name="sql-server-backup-native-fsx"></a>

[Amazon FSx for Windows 文件服务器](https://aws.amazon.com/fsx/windows/)是一个完全托管的本机 Windows 文件系统，可提供高达 64 TB 的存储空间，旨在提供快速、可预测和稳定的性能。 AWS 在 Windows 文件服务器上引入了[对多可用区文件系统部署 FSx 的本机支持](https://aws.amazon.com/blogs/aws/amazon-fsx-for-windows-file-server-update-new-enterprise-ready-features/)。本机支持具有跨多个可用区的高可用性和冗余性，使在 AWS 上部署 Windows 文件存储变得更加容易。 AWS 还推出了对 [SMB 连续可用的（CA）文件共享](https://aws.amazon.com/about-aws/whats-new/2019/11/amazon-fsx-for-windows-file-server-adds-support-for-high-availability-microsoft-sql-server-deployments/)的支持。您可以将 Windows 文件服务器 FSx 用作 SQL Server 数据库的备份存储。

下图显示了 Windows 文件服务器的本机 SQL Server 备份 FSx 的体系结构。

![\[FSx 适用于 Windows 文件服务器备份架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/fsx_backup_arch.png)


考虑使用本机 SQL Server 备份到 FSx Windows 文件服务器有以下好处：
+ 您可以将 SQL Server 数据库备份到亚马逊 FSx 文件共享中。
+ 您可以对 SQL Server 实例上的单个数据库进行备份，也可以恢复单个数据库，无需恢复整个实例。
+ 支持多部分备份。
+ 您可以使用 SQL Server Agent 和作业引擎安排备份作业。
+ 与 Amazon EBS 相比，这些实例的网络带宽更高。

使用本机 SQL Server 备份到 FSx Windows 文件服务器时，请考虑以下限制：
+ 您必须使用 AWS Backup 或手动将备份从亚马逊移至 Amazon FSx S3 AWS DataSync。
+ 在 Amazon 上，大型备份可能需要额外的磁盘空间管理开销 FSx。
+ EC2 实例网络吞吐量可能是一个瓶颈。
+ 需要额外的存储空间才能存储 Windows 文件服务器 FSx 的备份。

### FSx 适用于 NetApp ONTAP 的 SQL Server 备份到亚马逊
<a name="sql-server-backup-fsx-netapp"></a>

使用 f FSx or ONTAP 的快照始终保持崩溃一致性，但它们需要您暂停（或暂停）数据库才能创建应用程序一致 I/O 性的快照。您可以将（带有适用于特定应用程序 NetApp SnapCenter （包括 SQL Server）的插件的编排工具）与 FSx for ONTAP 一起使用，以创建应用程序一致的快照并保护、复制和克隆数据库，无需支付额外费用。

#### NetApp SnapCenter
<a name="sql-server-backup-netapp-snapcenter"></a>

NetApp SnapCenter 是一个用于实现应用程序一致性数据保护的统一平台。 SnapCenter 将快照称为备份。本指南采用相同的命名惯例。 SnapCenter 提供了用于管理应用程序一致性备份、恢复和克隆的单一管理面板。您可以为特定的数据库应用程序添加 SnapCenter 插件来创建应用程序一致性备份。SQL Server SnapCenter 插件提供以下功能，可简化您的数据保护工作流程。
+ 适用于完整备份和日志备份的细粒度备份与还原选项
+ 就地还原并恢复到其他位置

有关更多信息 SnapCenter，请参阅 AWS 存储博客上的 “[使用 NetApp SnapCenter Amazon FSx for NetApp ONTAP 保护你的 SQL Server 工作负载](https://aws.amazon.com/blogs/storage/using-netapp-snapcenter-with-amazon-fsx-for-netapp-ontap-to-protect-your-sql-server-workloads/)” 一文。

### 备份的成本优化
<a name="sql-server-backup-cost-opt"></a>

以下选项可以帮助您降低在 AWS上存储 SQL Server 备份的成本。
+ 在创建备份文件期间启用 [SQL Server 压缩](https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/backup-compression-sql-server?view=sql-server-ver16)功能，并将尽可能小的文件发送到存储中。例如，3:1 的压缩比意味着您能节省约 66% 的磁盘空间。要对这些列进行查询，您可以使用以下 Transact-SQL 语句：`SELECT backup_size/compressed_backup_size FROM msdb..backupset;`。
+ 对于传送到 S3 存储桶的备份，启用 [Amazon S3 Intelligent-Tiering](https://aws.amazon.com/s3/storage-classes/intelligent-tiering/) 存储类别将存储成本降低 30%。 
+ 对 FSx 于 Windows 文件服务器或 ONTAP FSx 的备份，使用单个可用区可节省 50% 的成本（与使用多个可用区相比）。有关定价信息，[ FSx 请参阅亚马逊 Windows 文件服务器定价](https://aws.amazon.com/fsx/windows/pricing/)和[亚马逊 FSx NetApp ONTAP 定价](https://aws.amazon.com/fsx/netapp-ontap/pricing/)。
+ SQL Server 2022 最高效的备份选项是直接备份到 Amazon S3。您可以通过避免使用存储网关来节省额外的费用。

### 备份的基准测试结果
<a name="sql-server-backup-benchmark"></a>

本部分依据本指南中所涵盖的备份解决方案的性能基准测试结果，从成本和性能的角度，针对一个 1TB 的数据库样本，对以下选项进行比较。
+ **EC2 实例规格**：搭载 Windows Server 2019 和 SQL Server 2019 开发人员版的 r5d.8xlarge
+ **数据库规格**：禁用 TDE 时大小为 1TB

测试是以 r5d.8xlarge 实例和 1TB SQL Server 数据库作为源进行的。源系统是根据最佳实践配置的，源数据库包含四个数据文件（每个文件为 250GB）和一个日志文件（50GB），分布在不同的 gp3 卷中。SQL Server 本机 `BACKUP` 命令包括写入 10 个备份文件、使用压缩来优化备份性能，以及减少通过网络发送写入目标的数据量。在所有测试案例中，存储性能都是瓶颈所在。

这些类型的测试几乎有无穷无尽的可能配置。此测试侧重于从性能、成本、可扩展性以及实际使用案例等方面进行优化。以下表格列出了针对备份目标选项所获取的性能指标。


****  

| 备份选项 | 级别 | 运行持续时间（Appx） | 备份速率 | 每月费用（美元）\$1 | 
| --- | --- | --- | --- | --- | 
| 本机备份到本地 EBS st1 HDD，2TB | 数据库 | 00:30:46 分钟 | 554.7 Mbps | 92.16 美元 | 
| 本机备份到本地 EBS SSD gp3，2TB | 数据库 | 00:22:00 分钟 | 512 Mbps | 193.84 美元 | 
| Windows 文件服务器硬盘 FSx 的本机备份，2 TB @512 Mbps 吞吐量 | 数据库 | 00:20:58 分钟 | 814.0Mbps | [1,146 美元](https://calculator.aws/#/estimate?id=e13d8a385d25b2d4f1320c5b1156b953355b7c13) | 
| Windows 文件服务器固态硬盘 FSx 的本机备份，2 TB @512 Mbps 吞吐量 | 数据库 | 00:20:00 分钟 | 814.0Mbps | [1,326 美元](https://calculator.aws/#/estimate?id=e13d8a385d25b2d4f1320c5b1156b953355b7c13) | 
| 本机备份到具有 2TB gp3 的 S3 文件网关 m6i.4xlarge（16 vCPU，64GB） | 数据库 | 00:23:20 分钟 | 731.5Mbps | 470.42 美元 | 
| EBS VSS 快照 | EBS 卷 | 00:00:02 秒00:00:53 秒 | N/A 快照 | [51 美元](https://calculator.aws/#/estimate?id=e13d8a385d25b2d4f1320c5b1156b953355b7c13) | 
| AWS Backup （AMI 备份） | AMI | 00:00:04 秒00:08:00 分钟 | N/A 快照 | [75 美元](https://calculator.aws/#/estimate?id=e13d8a385d25b2d4f1320c5b1156b953355b7c13) | 
| 直接 SQL Server 本机备份到 Amazon S3（SQL Server 2022） | 数据库 | 00:12:00 分钟 | 731.5Mbps | [前 50TB /月，每 GB 0.023 美元，每月 23.55 美元](https://calculator.aws/#/estimate?id=e13d8a385d25b2d4f1320c5b1156b953355b7c13) | 
| ONTAP FSx 的本机备份（使用 SnapCenter） | 数据库 | – | – | [440.20 美元](https://calculator.aws/#/estimate?id=8c9a0b2c296f9839f3ca16bdc2dcd9a6f52f1faf) | 

上述表格进行如下假设：
+ 数据传输和 Amazon S3 费用不包括在内。
+ 存储价格包含在实例定价中。
+ 费用以 `us-east-1` 区域为准。
+ 当进行多次备份时，吞吐量和 IOPS 分别增长 10%。而整个月内的总体变化率为 10%。

测试结果显示，最快的选择是将本机 SQL Server 数据库备份到 FSx Windows 文件服务器。备份到存储网关以及本地连接的 EBS 卷是一种成本效益更高的选项，但其性能会相对较慢。对于服务器级备份 (AMI)，我们建议使用 AWS Backup 以获得最佳性能、成本和可管理性。

## 成本优化建议
<a name="sql-server-backup-opt-rec"></a>

了解在 Amazon EC2 上备份 SQL Server 的可能解决方案至关重要，它能够保障您的数据安全、确保您满足备份需求以及制定计划以从关键事件中恢复过来。本部分探讨的备份和恢复 SQL Server 实例及数据库的不同方法，能够帮助您制定出既能保护数据又能满足组织需求的备份和恢复策略。

本部分将介绍以下备份选项：
+ 压缩
+ Amazon S3 Intelligent-Tiering
+ 单可用区
+ 备份到 URL

针对这些选项所提供的指南都是较为宏观的。如果您希望在您的组织中实施上述任何一项建议，我们建议您联系您的客户团队。然后，该团队可以与 Microsoft 的专业服务代表进行沟通，由其主导对话过程。您也可以通过发送电子邮件至 optimize-microsoft@amazon.com 进行联系。

总之，我们建议执行下列操作：
+ 如果您使用的是 SQL Server 2022，则备份到 Amazon S3 是最经济高效的选项。
+ 如果您使用的是 SQL Server 2019 及更早版本的 SQL Server，则考虑备份至由 Amazon S3 支持的存储网关，因为该方法是最经济高效的选项。

### 压缩
<a name="sql-server-backup-opt-rec-compression"></a>

压缩的目的是减少每次备份所占用的存储空间，这对于各种存储选项都是有益的。您必须在 [SQL Server 实例](https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/view-or-configure-the-backup-compression-default-server-configuration-option?view=sql-server-ver16)级别为 SQL Server 备份启用压缩。以下示例展示了如何为备份数据库添加压缩关键字：

`BACKUP DATABASE <database_name> TO DISK WITH COMPRESSION (ALGORITHM = QAT_DEFLATE)`

### Amazon S3 Intelligent-Tiering
<a name="sql-server-backup-opt-rec-tiering"></a>

对于传送到 Amazon S3 存储桶的备份，您可以启用 [Amazon S3 Intelligent-Tiering](https://aws.amazon.com/s3/storage-classes/intelligent-tiering/) 作为您的 Amazon S3 文件网关[存储类别](https://docs.aws.amazon.com/filegateway/latest/files3/storage-classes.html#ia-file-gateway)。这会将存储成本最高降低 30%。然后，您可以通过使用与 [Active Directory 与](https://docs.aws.amazon.com/filegateway/latest/files3/CreatingAnSMBFileShare.html#configure-SMB-settings)集成的 SMB 文件共享来将 S3 文件网关挂载到您的 SQL 服务器上。这为您提供了对共享的访问控制，让您能够利用现有的服务账户，并能够通过一个以 Microsoft 为中心的通用文件协议访问 Amazon S3。对于那些可能无法直接连接到域控制器的账户，您可以使用 [Active Directory Connector](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_ad_connector.html) 来实现与本地或云的 Active Directory 的通信。要在网关上配置 Active Directory 设置，必须 IPs 为域控制器指定 Active Directory 连接器，以代理对活动目录的请求。

以下图表展示了基于 S3 Intelligent-Tiering 的解决方案的一个架构。

![\[S3 Intelligent-Tiering 架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/ad_connector_arch.png)


默认情况下，写入 S3 存储桶的备份文件使用的是标准层。要将备份文件从标准层转换为 S3 Intelligent-Tiering，必须[创建生命周期规则](https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html)。您还可以使用 [AWS 管理控制台](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-intelligent-tiering.html#enable-auto-archiving-int-tiering) 启用 S3 Intelligent-Tiering。有关更多信息，请参阅 AWS 文档中的[开始使用 Amazon S3 Intelligent-Tiering](https://aws.amazon.com/getting-started/hands-on/getting-started-using-amazon-s3-intelligent-tiering/)。

### 单可用区
<a name="sql-server-backup-opt-rec-singleAZ"></a>

要创建单可用区文件系统，请在[创建 FSx 适用于 Windows 文件服务器的文件系统](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/getting-started.html)时选择单可用区选项。Amazon FSx 还使用 Windows 卷影复制服务每天对您的文件系统进行高度持久的备份（存储在 Amazon S3 中），并允许您随时进行其他备份。请记住使用单可用区时所存在的某些问题。例如，如果预调配文件系统的某个受影响可用区因故障而长时间（数小时）无法运行，则该 SMB 文件共享就会无法使用。如果您需要访问这些数据，必须从源区域中的某个可用区中的备份恢复数据。有关更多信息，请参阅本指南的[使用单可用区](storage-fsx-single-az.md)部分。

### 备份到 URL
<a name="sql-server-backup-opt-rec-url"></a>

对于 SQL Server 2022，[备份到 URL](https://www.microsoft.com/en-us/sql-server/blog/2022/09/29/backup-and-restore-to-url-for-s3-compatible-object-storage/) 功能支持直接备份到 Amazon S3。这是运行 SQL Server 2022 的理想备份方法， AWS 因为您可以在存储层获得 Amazon S3 的完整功能集，并消除了先前版本中实现此功能所需的 AWS Storage Gateway 设备成本。在实施此功能时，需要考虑两项主要费用：数据传输费用以及所选择的 S3 存储类别费用。如果您希望利用 Amazon S3 的原生灾难恢复功能，则必须考虑到[跨区域复制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/replication.html#crr-scenario)会产生跨区域[数据流出费用](https://aws.amazon.com/s3/pricing/?p=pm&c=s3&z=4)。要了解有关如何配置此选项的更多信息，请参阅 AWS 博客上有关 Microsoft 工作负载的[将 SQL Server 数据库备份到 Amazon S3](https://aws.amazon.com/blogs/modernizing-with-aws/backup-sql-server-to-amazon-s3/)一文。

## 其他资源
<a name="sql-server-backup-resources"></a>
+ [亚马逊 EC2 上的 SQL Server 的备份和还原选项](https://docs.aws.amazon.com/prescriptive-guidance/latest/sql-server-managing-on-aws/welcome.html)（AWS 规范性指南）
+ [Point-in-time 使用 AWS Backup（AWS 存储博客）对 Amazon RDS 进行恢复和持续备份](https://aws.amazon.com/blogs/storage/point-in-time-recovery-and-continuous-backup-for-amazon-rds-with-aws-backup/)
+ [使用 NetApp SnapCenter Amazon FSx for NetApp ONTAP 保护你的 SQL Server 工作负载](https://aws.amazon.com/blogs/storage/using-netapp-snapcenter-with-amazon-fsx-for-netapp-ontap-to-protect-your-sql-server-workloads/)（AWS 存储博客）
+ [开始使用 Amazon S3 智能分层](https://aws.amazon.com/getting-started/hands-on/getting-started-using-amazon-s3-intelligent-tiering/)（AWS 入门资源中心）
+ 适用于 [SQL Server 的 Amazon RDS 的备份和还原策略](https://aws.amazon.com/blogs/database/backup-and-restore-strategies-for-amazon-rds-for-sql-server/)（AWS 数据库博客）
+ 将@@ [本地微软 SQL Server 数据库迁移到亚马逊 EC2](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2.html)（AWS 规范性指南）
+ [在亚马逊 EC2 上部署微软 SQL Server 的最佳实践](https://docs.aws.amazon.com/whitepapers/latest/best-practices-for-deploying-microsoft-sql-server/best-practices-for-deploying-microsoft-sql-server.html)（AWS 白皮书）

# 现代化 SQL Server 数据库
<a name="modernize-sql-server"></a>

## 概述
<a name="modernize-sql-server-overview"></a>

如果您正着手实现遗留数据库的现代化，以提升其可扩展性、性能和进行成本优化，那么您可能会遇到使用 SQL Server 这类商业数据库时所面临的种种难题。商业数据库价格昂贵，会将客户牢牢束缚在其中，并且其许可条款还颇具惩罚性。本部分对从 SQL Server 迁移与现代化至开源数据库的各种方案进行了概述，并介绍了如何根据您的工作负载选择最佳方案的相关信息。

您可以将 SQL Server 数据库重构为像 Amazon Aurora PostgreSQL 这样的开源数据库，以此来节省 Windows 和 SQL Server 的许可费用。像 Aurora 这样的云原生现代数据库将开源数据库的灵活性和低成本与商业数据库可靠的企业级功能相结合。如果您有不稳定的工作负载或者多租户工作负载，您也可以迁移到 [Aurora Serverless V2](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.html)。这能够将成本降低 90% 之多，具体取决于工作负载的特点。[此外，还 AWS 提供诸如适用于 [Aurora PostgreSQL 的 Babelfish、() 之类的工具以及诸如 [AWS Schema Conversion Tool (AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/) 之类的服务，用于简化 S](https://aws.amazon.com/rds/aurora/babelfish/) QL Server 数据库的迁移和现代化。AWS Database Migration ServiceAWS DMS](https://aws.amazon.com/dms/) AWS

## 数据库产品
<a name="modernize-sql-server-database"></a>

从 Windows 上的 SQL Server 迁移到像 Amazon Aurora、Amazon RDS for MySQL 或 Amazon RDS for PostgreSQL 之类的开源数据库，可以在不影响性能或功能的情况下节省大量费用。请考虑以下事项：
+ 从 Amazon EC2 上的 SQL Server 企业版切换到 Amazon RDS for PostgreSQL 或 Amazon RDS for MySQL 最多可以节省 80% 的费用。
+ 从 Amazon EC2 上的 SQL Server 企业版切换到 Amazon Aurora PostgreSQL 兼容版或 Amazon Aurora MySQL 兼容版最多可以节省 70% 的费用。

对于传统的数据库工作负载，Amazon RDS for PostgreSQL 和 Amazon RDS for MySQL 能够满足需求，并为关系型数据库提供了一种经济高效的解决方案。Aurora 增加了众多以往仅由昂贵的商业供应商才能提供的可用性和性能方面的功能。Aurora 中的韧性功能需要额外付费。然而，与其他商业供应商提供的类似功能相比，Aurora 的韧性功能成本仍然低于商业软件针对同类功能所收取的费用。Aurora 架构经过了优化，与标准的 MySQL 和 PostgreSQL 部署相比，能够显著提升性能。

由于 Aurora 能够与开源的 PostgreSQL 和 MySQL 数据库兼容，所以还具有可移植性的额外优势。究竟最佳选项是 Amazon RDS for PostgreSQL、Amazon RDS for MySQL 还是 Aurora，这取决于对业务需求的了解以及将必要的功能与最佳选项进行匹配。

## Amazon RDS 和 Aurora 的比较
<a name="modernize-sql-server-rds-aurora"></a>

下表总结 Amazon RDS 与 Amazon Aurora 之间的关键差异。


****  

| 类别 | Amazon RDS for PostgreSQL 或 Amazon RDS for MySQL | Aurora PostgreSQL 或 Aurora MySQL | 
| --- | --- | --- | 
| 性能 | 性能良好 | 3 倍或以上的性能 | 
| 失效转移 | 通常为 60–120 秒\$1 | 通常为 30 秒\$1 | 
| 可扩展性 | 最多 5 个只读副本延迟时间（以秒为单位） | 最多 15 个只读副本延迟时间（以毫秒为单位） | 
| 仓储服务 | 高达 64 TB | 高达 128 TB | 
| 存储 HA | 多可用区配置，其中包含一个或两个备用实例，每个备用实例都有数据库副本 | 默认情况下，在 3 个可用区中有 6 个数据副本 | 
| 备份 | 每日快照和日志备份 | 持续、异步备份到 Amazon S3 | 
| Aurora 的创新 | NA | 100 GB快速数据库克隆 | 
|   | 自动扩缩只读副本 |   | 
|   | 查询计划管理 |   | 
|   | Aurora Serverless |   | 
|   | 跨区域副本与全局数据库 |   | 
|   | 集群缓存管理\$1\$1 |   | 
|   | 并行查询 |   | 
|   | 数据库活动流 |   | 

\$1大型事务会增加失效转移时间

\$1\$1在 Aurora PostgreSQL 中可用

以下表格显示了本部分所涵盖的不同数据库服务的每月预估费用。


****  

| 数据库服务 | 每月费用（美元）\$1 | AWS 定价计算器 （需要 AWS 账户） | 
| --- | --- | --- | 
| Amazon RDS for SQL Server 企业版 | 3,750 美元 | [Estimate](https://calculator.aws/#/estimate?id=16f190d818045bb99fb59659cecca80f92db4bbc) | 
| Amazon RDS for SQL Server 标准版 | 2,318 美元 | [Estimate](https://calculator.aws/#/estimate?id=5a5e9832ae80fd9ad9e8010c9a17f57d5a0415ca) | 
| Amazon EC2 上的 SQL Server 企业版 | 2,835 美元 | [Estimate](https://calculator.aws/#/estimate?id=0976f53e9b1b55d5475dc394c8caae9d5581183b) | 
| Amazon EC2 上的 SQL Server 标准版 | 1,345 美元 | [Estimate](https://calculator.aws/#/estimate?id=3cada8ab6d72b68a2eb3bc92927990c9f7e264ca) | 
| Amazon RDS for PostgreSQL | 742 美元 | [Estimate](https://calculator.aws/#/estimate?id=bd825d40c79c0df8f0cf053d55ca39acc8a927fe) | 
| Amazon RDS for MySQL | 712 美元 | [Estimate](https://calculator.aws/#/estimate?id=c0f61d7b67652e58df5bf6cb244e9455ff4a8558) | 
| Aurora PostgreSQL | 1,032 美元 | [Estimate](https://calculator.aws/#/estimate?id=a557d7d740e5d87c9764bd369de81a5873dad053) | 
| Aurora MySQL | 1,031 美元 | [Estimate](https://calculator.aws/#/estimate?id=5924d827c98beadda65368c8e64eb249c001afd6) | 

\$1存储价格包含在实例定价中。费用以 `us-east-1` 区域为准。吞吐量和 IOPS 是假设值。这些计算针对的是 r6i.2xlarge 和 r6g.2xlarge 实例。

## 成本优化建议
<a name="modernize-sql-server-opt-rec"></a>

异构数据库迁移通常需要将数据库的架构从源数据库引擎转换为目标数据库引擎，并将数据从源数据库迁移到目标数据库。迁移的第一步是评估并将 SQL Server 的架构和代码对象转换为目标数据库引擎。

您可以使用 [AWS Schema Conversion Tool （AWS SCT）](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)来评估和评测该数据库是否与各种目标开源数据库选项兼容，例如 Amazon RDS for MySQL 或 Amazon RDS for PostgreSQL、Aurora MySQL 和 PostgreSQL。您也可以使用 Babelfish Compass 工具来评测与适用于 Aurora PostgreSQL 的 Babelfish 的兼容性。这使得 AWS SCT 和 Compass 成为了在决定迁移策略之前了解所涉及的前期工作的强大工具。如果您决定继续， AWS SCT 会自动对架构进行所需的更改。Babelfish Compass 背后的核心理念是让 SQL 数据库能够迁移到 Aurora，无需进行任何修改，或者只需进行极少的修改。Compass 将对现有的 SQL 数据库进行评估，以确定是否能够实现这一目标。这样一来，在将数据从 SQL Server 迁移到 Aurora 之前，结果就已经明确了。

AWS SCT 自动将数据库架构和代码转换和迁移到目标数据库引擎。您可以使用适用于 Aurora PostgreSQL 的 Babelfish 将数据库和应用程序从 SQL Server 迁移到 Aurora PostgreSQL，无需或只需进行少量的架构更改。这可以加快您的迁移速度。

架构迁移完成后，您可以使用迁 AWS DMS 移数据。 AWS DMS 可以执行完整数据加载和复制更改，以便在最短的停机时间内执行迁移。

本部分将更详细地探讨以下工具：
+ AWS Schema Conversion Tool
+ 适用于 Aurora PostgreSQL 的 Babelfish
+ Babelfish Compass
+ AWS Database Migration Service

### AWS Schema Conversion Tool
<a name="modernize-sql-server-opt-rec-schema"></a>

您可以使用 AWS SCT 评估现有的 SQL Server 数据库并评估与 Amazon RDS 或 Aurora 的兼容性。为了简化迁移过程，您还可以在异构数据库迁 AWS SCT 移中使用将架构从一个数据库引擎转换为另一个数据库引擎。您可以使用评估您的应用程序 AWS SCT ，并转换编写 C\$1、C\$1\$1、Java 和其他语言的应用程序的嵌入式应用程序代码。有关更多信息，请参阅 AWS SCT 文档中的[使用 AWS SCT转换应用程序 SQL](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.App.html)。

AWS SCT 是一款支持许多数据库[源的](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.html)免费 AWS 工具。要使用 AWS SCT，请将其指向源数据库，然后进行评估。然后，[AWS SCT](https://aws.amazon.com/blogs/database/convert-database-schemas-and-application-sql-using-the-aws-schema-conversion-tool-cli/) 将评估架构并生成评测报告。评测报告包括一份执行摘要、复杂性及迁移所需的工作量、适用的目标数据库引擎以及转换建议。要下载 AWS SCT，请参阅 AWS SCT 文档 AWS SCT中的[安装、验证和更新](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html)。

下表显示了由 AWS SCT 生成的执行摘要示例，旨在说明将数据库转换至不同目标平台所涉及的复杂性。


|  |  |  | 
| --- |--- |--- |
| **目标平台** | **自动更改或最小更改** | **复杂操作** | 
|  | **存储对象** | **代码对象** | **转换操作** | **存储对象** | **代码对象** | 
| Amazon RDS for MySQL | 60（98%） | 8（35%） | 42 | 1（2%） | 1 | 15（65%） | 56 | 
| Amazon Aurora MySQL 兼容版 | 60（98%） | 8（35%） | 42 | 1（2%） | 1 | 15（65%） | 56 | 
| Amazon RDS for PostgreSQL | 60（98%） | 12（52%） | 54 | 1（2%） | 1 | 11（48%） | 26 | 
| Amazon Aurora PostgreSQL 兼容版 | 60（98%） | 12（52%） | 54 | 1（2%） | 1 | 11（48%） | 26 | 
| Amazon RDS for MariaDB | 60（98%） | 7（30%） | 42 | 1（2%） | 1 | 16（70%） | 58 | 
| Amazon Redshift | 61（100%） | 9（39%） | 124 | 0（0%） | 0 | 14（61%） | 25 | 
| AWS Glue | 0（0%） | 17（100%） | 0 | 0（0%） | 0 | 0（0%） | 0 | 
| Babelfish | 59（97%） | 10（45%） | 20 | 2（3%） | 2 | 12（55%） | 30 | 

 AWS SCT 报告还提供有关无法自动转换的架构元素的详细信息。您可以参考[AWS 迁移行动手册](https://aws.amazon.com/blogs/database/the-database-migration-playbook-has-landed/)来缩小 AWS SCT 转化差距并优化目标架构。有许多数据库迁移行动手册可以帮助进行异构迁移。

### 适用于 Aurora PostgreSQL 的 Babelfish
<a name="modernize-sql-server-opt-rec-babelfish"></a>

适用于 Aurora PostgreSQL 的 Babelfish扩展了您的 Aurora PostgreSQL，以能够接受来自 SQL Server 客户端的数据库连接。使用 Babelfish，最初为 SQL Server 构建的应用程序可以直接与 Aurora PostgreSQL 协作，代码更改很少，而且无需更改数据库驱动程序。Babelfish 将 Aurora PostgreSQL 变成了双语，这样 Aurora PostgreSQL 就可以同时使用 T-SQL 和语言。 PL/pgSQL Babelfish 最大程度减少了从 SQL Server 迁移到 Aurora PostgreSQL 的工作量。这能加快迁移进程，最大程度降低风险，并大幅减少迁移成本。您可以继续在迁移后使用 T-SQL，但也可以[选择使用 PostgreSQL 原生工具](https://aws.amazon.com/blogs/database/category/database/amazon-aurora/babelfish-for-aurora-postgresql/)进行开发。

以下图表展示了使用 T-SQL 的应用程序如何连接到 SQL Server 中的默认端口 1433，并通过 Babelfish 翻译器与 Aurora PostgreSQL 数据库进行通信，而使用 PL/pgSQL 的应用程序则可以直接并同时通过 Aurora PostgreSQL 中的默认端口 5432 与 Aurora PostgreSQL 数据库进行连接。

![\[适用于 Aurora PostgreSQL 的 Babelfish。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/images/babelfish_tsql.png)


Babelfish 不支持某些 SQL Server T-SQL 功能。因此，Amazon 提供了评估工具，用于 line-by-line分析您的 SQL 语句并确定 Babelfish 是否不支持其中任何语句。

Babelfish 评估有两种选择。 AWS SCT 可以评估你的 SQL Server 数据库与 Babelfish 的兼容性。另一个选项是 Babelfish Compass 工具，这是推荐的解决方案，因为 Compass 工具已根据新版本的适用于 Aurora PostgreSQL 的 Babelfish 进行了更新。

### Babelfish Compass
<a name="modernize-sql-server-opt-rec-babelfish-compass"></a>

[Babelfish Compass](https://github.com/babelfish-for-postgresql/babelfish_compass) 是一款可免费下载的工具，与最新版本的适用于 Aurora PostgreSQL 的 Babelfish 保持一致。相比之下， AWS SCT 将在一段时间后支持更新的Babelfish版本。[Babelfish Compass](https://github.com/babelfish-for-postgresql/babelfish_compass/blob/main/README.md) 针对 SQL Server 数据库架构进行运行。您也可以使用 SQL Server Management Studio（SSMS）等工具提取源 SQL Server 数据库架构。然后，您可以通过 Babelfish Compass 运行架构。这将生成报告，其中详细说明 SQL Server 架构与 Babelfish 的兼容性情况，以及在迁移之前是否需要进行任何更改。Babelfish Compass 工具还能自动完成其中的许多更改，从而最终加快您的迁移进程。

评测和更改完成后，您可以使用 SSMS 或 sqlcmd 等 SQL Server 原生工具将架构迁移到 Aurora PostgreSQL。有关说明，请参阅 AWS 数据库博客上的[使用 Babelfish 从 SQL Server 迁移到 Amazon Aurora](https://aws.amazon.com/blogs/database/migrate-from-sql-server-to-amazon-aurora-using-babelfish/) 一文。

### AWS Database Migration Service
<a name="modernize-sql-server-opt-rec-database-migration"></a>

迁移架构后，您可以使用 AWS Database Migration Service (AWS DMS) 在停机时间最短的情况下将数据迁移到。 AWS AWS DMS 不仅可以加载完整数据，还可以在源系统启动并运行时将更改从源系统复制到目标。源数据库和目标数据库同步后，可以在应用程序指向完成迁移的目标数据库时进行直接转换活动。 AWS DMS 目前仅使用 Babelfish 对 Aurora PostgreSQL 目标执行完整数据加载，不会复制更改。有关更多信息，请参阅文档 AWS Database Migration Service中的 “[使用 Babelfish 作为目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Babelfish.html)” AWS DMS 。

AWS DMS 可以进行同构（跨同一个数据库引擎）和异构（跨不同的数据库引擎）迁移。 AWS DMS 支持许多源数据库和目标数据库引擎。有关更多信息，请参阅数据库博客中的[使用 AWS DMS文章将您的 SQL Server 数据库迁移到 Amazon RDS for SQL Server](https://aws.amazon.com/blogs/database/migrating-your-sql-server-database-to-amazon-rds-for-sql-server-using-aws-dms/)。 AWS 

## 其他资源
<a name="modernize-sql-server-resources"></a>
+ [再见微软 SQL Server，你好 Babelfish](https://aws.amazon.com/blogs/aws/goodbye-microsoft-sql-server-hello-babelfish/)（AWS 新闻博客）
+ [使用 AWS Schema Conversion Tool CLI（数据库博客）转换AWS 数据库架构和应用程序 SQL](https://aws.amazon.com/blogs/database/convert-database-schemas-and-application-sql-using-the-aws-schema-conversion-tool-cli/)
+ [使用最佳实践和现场AWS 经验教训将 SQL Server 迁移到 Amazon Aurora PostgreSQL（数据库博](https://aws.amazon.com/blogs/database/migrate-sql-server-to-amazon-aurora-postgresql-using-best-practices-and-lessons-learned-from-the-field/)客）
+ 在@@ [从微软 SQL Server 迁移到亚马逊 RDS for PostgreSQL 和亚马逊 Aurora PostgreSQL（数据库博客）AWS 后验证数据库对象](https://aws.amazon.com/blogs/database/validate-database-objects-post-migration-from-microsoft-sql-server-to-amazon-rds-for-postgresql-and-amazon-aurora-postgresql/)

# 优化 SQL Server 的存储
<a name="storage-sql-server"></a>

## 概述
<a name="storage-sql-server-overview"></a>

本部分重点介绍针对 EC2 工作负载上的 SQL Server 的 Amazon Elastic Block Store（Amazon EBS）SSD 存储的成本优化。

您可以使用多种存储选项来部署和运行 SQL Server 工作负载 AWS。应根据用途、架构、耐久性、性能、容量和成本来选择合适的存储。 AWS 运行 SQL Server 工作负载的客户通常会组合使用亚马逊 EBS、 NVMe FSx、亚马逊和亚马逊简单存储服务 (Amazon S3) Service 存储。

Amazon EBS 是与 EC2 计算实例相连的网络附加存储，用于存储和处理操作系统、应用程序、数据库以及备份文件等。Amazon EBS 固态驱动器（SSD）存储包括：通用型 SSD（gp2 和 gp3）和预调配 IOPS SSD（io1、io2 和 io2BX）。请考虑以下事项：
+ 某些 EC2 实例（例如 r5d）在本地 NVMe SSDs 物理连接到主机实例。这些卷提供通常用于 SQL Server tempdb 或缓冲池扩展的块级存储。
+ 适用于 Windows File Server 的 Amazon FSx 是一项完全托管的文件存储服务，而 NetApp 适用于 ONTAP 的 Amazon FSx 是 NetApp基于广受欢迎的 ONTAP 文件系统构建的完全托管的共享存储。Amazon FSx 经常用于在高可用性的 SQL Server 失效转移群集实例（FCI）配置中运行 SQL Server 工作负载。该解决方案托管 SQL Server 数据和日志文件，从而降低 EC2 实例上的 EBS 性能要求。
+ Amazon S3 是一项对象存储服务，可提供行业领先的可扩展性、数据可用性、安全性和性能。您可以在 Amazon S3 上存储 SQL Server 原生备份文件 AMIs、EBS 快照、应用程序日志等。

## Amazon EBS 的 SSD 存储类型、性能和成本
<a name="ssd-storage-types-performance-and-cost-for-amazon-ebs"></a>

Amazon EBS 的 SSD 存储成本通常会随着持久性和性能的提升而增加。存储目前有五种卷类型，每种都有[自己独特的性能指标](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html)。有关支持 SSD 的卷的使用案例和特征的摘要，请参阅 Amazon EBS 文档的[固态驱动器（SSD）卷](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html#vol-type-ssd)部分的表格。

您可以使用 Amazon CloudWatch 监控固态硬盘性能，捕获趋势数据，并在达到特定阈值时设置警报。如果您正在运行 SQL Server 工作负载 AWS，请考虑启用[详细监控](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-metrics-basic-detailed.html)并部署[CloudWatch 自定义指标](https://aws.amazon.com/blogs/database/monitor-your-microsoft-sql-server-using-custom-metrics-with-amazon-cloudwatch-and-aws-systems-manager/)以捕获详细的卷性能指标，例如磁盘延迟、IOPS、吞吐量、磁盘队列长度、已用容量与可用容量等。您可以使用这些 CloudWatch 性能指标来识别配置不足和过度配置的存储，并提供历史数据点以准确定义存储需求。

Amazon EBS 的 SSD 存储成本也因分配的容量而异。下面的表格对不同的卷类型进行了比较。所有卷类型都有 1TB 的容量和类似的性能配置。


****  

| 卷类型 | 最大 IOPS（16KiB I/O） | 最大吞吐量（128KiB I/O） | 每 TB 价格 | 节省成本百分比 | 
| --- | --- | --- | --- | --- | 
| gp2 | 3000 | 250 | 102.40 美元 |   | 
| gp3 | 3000 | 250 | 86.92 美元 | 15% | 
| io1 | 16000 | 500 | 1,168 美元 |   | 
| io2 | 16000 | 500 | 1,168 美元 |   | 
| gp3 | 16000 | 500 | 146.92 美元 | 87% | 
| io2bx | 16000 | 4,000 | 1,168 美元 |   | 
| gp3 | 16000 | 1000 | 181.92 美元 | 84% | 

**注意**  
前面表格中的性能和成本指标基于 AWS 定价计算器中的[估算值](https://calculator.aws/#/estimate?id=b637bb9c21ae8ad62f440e349dd2067de80e76b2)按每个卷进行计算。需要 AWS 账户 使用才能访问中的估算值 AWS 定价计算器。

Amazon EBS SSD gp3 卷以低成本提供卓越的性能。对于需要低于 16,000 IOPS 和 500 吞吐量的工作负载，如果您选择 gp3 卷而不是 io1 或 io2 卷，则最多可以节省 87%。 MiBps 

io2 Block Express（io2BX）卷相比常规的 io2 卷具有更高的性能。在 16,000 IOPS 时，io1 或 io2 卷只能达到 500 个 MiBps吞吐量，而 io2bx 卷最多可以配置为 4,000 个吞吐量。 MiBps 与 io1 和 io2 卷相比，io2BX 卷能够以完全相同的价格提供四倍以上的吞吐量，介于 16000 至 64000 IOPS 之间。可以通过将常规的 io2 卷附加到 io2BX 支持的 EC2 实例，将其转换为 io2BX 卷。有关支持 io2BX 的 EC2 实例的列表，请参阅 Amazon EBS 文档中的[预调配 IOPS SSD 卷](https://docs.aws.amazon.com/ebs/latest/userguide/provisioned-iops.html#io2-block-express)。在部署新存储之前，您可以使用 [AWS 定价计算器](https://calculator.aws/) 来估算每月成本，并根据持久性、性能和容量之间的权衡来了解对成本的影响。

## Amazon EBS 的通用 SSD 成本优化
<a name="storage-sql-server-overview-ssd-ebs"></a>

我们建议您对所存储的内容进行评估，并确保您使用的是正确的存储类型和类别。例如，Amazon S3 提供了极具性价比的价格、内置的生命周期策略以及适合 SQL Server 备份的复制选项。SQL Server 2022 能够直接将数据备份到 Amazon S3，而之前版本的 SQL Server 则依赖于本机备份。如果您运行的是旧版本的 SQL Server，请考虑备份到 Amazon EBS HDD 卷，然后将备份复制到 Amazon S3。与使用 gp3 卷进行备份相比，此解决方案可以节省 53% 的费用。

下表显示了 Amazon EBS gp3、Amazon EBS HDD st1 和 Amazon S3 上 1TB 存储空间的价格差异。


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/storage-sql-server.html)

**注意**  
前面表格中的成本指标基于 AWS 定价计算器中的[估算值](https://calculator.aws/#/estimate?id=ba6032e10a5f8a82807c1e3b7d5a64ceb2cdcbde)进行计算。需要 AWS 账户 使用才能访问中的估算值 AWS 定价计算器。

我们建议您考虑以下几点：
+ 启用详细监控并部署 CloudWatch 自定义指标，以准确捕获其存储性能需求。
+ 将 Amazon EBS 存储从 gp2 升级到 gp3，以降低成本、增强灵活性并提升性能。
+ 将 Amazon EBS 存储从 io1 升级到 io2，以提高持久性和性能灵活性。
+ 尽可能使用 io2BX 而非 io1 或 io2，以提高持久性和性能。
+ 在选择存储器时，请考虑一种有助于降低容量需求和高性能卷成本 mix-and-match的方法。例如，您可以将低成本的 gp3 卷用于根卷（操作系统）、SQL Server 安装、系统数据库（不包括 tempdb）以及性能较低的用户数据库。这有助于降低 io2 卷的容量和成本，从而使其能够专门用于高性能用户数据库。
+ 如果您在上托管 SQL Server 数据库 AWS，我们建议您在每个数据库中使用多个 SQL Server 数据文件。这允许将 read/write 工作负载分配到多个卷，从而降低每个卷的性能和容量需求，从而降低成本。
+ 即便生产工作负载需要性能更高的存储，例如 io1 或 io2/io2BX 类型的存储，对于非生产工作负载而言，也应考虑使用 gp3 卷，以帮助降低成本。
+ 跟踪并分析存储的使用情况随时间的变化趋势，以便轻松识别使用高峰和意外产生的费用。
+ 将 [AWS Compute Optimizer](https://aws.amazon.com/compute-optimizer/) 用于根据实际使用情况对 EBS 卷进行纵向扩展或缩减的建议操作。
+ 使用的弹性 AWS 来调整 Amazon EBS 固态硬盘卷的性能和容量需求。与本地环境不同的是，您无需为未来的工作负载过度预调配存储性能和容量。您可以将现有的 SQL Server 工作负载迁移到上 AWS 并根据需要调整性能或容量，同时保持数据库在线。

## 其他资源
<a name="storage-sql-server-resources"></a>
+ [Amazon EBS 卷类型](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html)（Amazon EBS 文档）
+ [Amazon Elastic Block Store（Amazon EBS）](https://docs.aws.amazon.com/ebs/latest/userguide/what-is-ebs.html)（Amazon EBS 文档）
+ [预调配 IOPS SSD 卷](https://docs.aws.amazon.com/ebs/latest/userguide/provisioned-iops.html)（Amazon EBS 文档）
+ [SSD 实例存储卷](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ssd-instance-store.html)（Amazon EC2 文档）
+ [亚马逊 EBS 的亚马逊 CloudWatch 指标](https://docs.aws.amazon.com/ebs/latest/userguide/using_cloudwatch_ebs.html)（亚马逊 EBS 文档）
+ [Amazon EC2 存储优化型实例规格](https://docs.aws.amazon.com/ec2/latest/instancetypes/so.html)（Amazon EC2 文档）
+ [使用 NetApp SnapCenter Amazon FSx for NetApp ONTAP 保护你的 SQL Server 工作负载](https://aws.amazon.com/blogs/storage/using-netapp-snapcenter-with-amazon-fsx-for-netapp-ontap-to-protect-your-sql-server-workloads/)（AWS 存储博客）
+ [亚马逊 EC2 常见问题解答](https://aws.amazon.com/ec2/faqs/)（AWS 产品页面）

# 使用 Compute Optimizer 优化 SQL Server 许可
<a name="sql-server-compute-optimizer"></a>

有关如何使用优化 SQL Server 许可证的指南 AWS Compute Optimizer。

## 概述
<a name="sql-server-compute-optimizer-overview"></a>

[AWS Compute Optimizer](https://docs.aws.amazon.com/compute-optimizer/latest/ug/what-is-compute-optimizer.html) 可以推荐针对 Amazon Elastic Compute Cloud（Amazon EC2）上的 Microsoft SQL Server 工作负载的许可优化机会。Compute Optimizer 可以提供自动化的建议，以降低许可费用。Compute Optimizer 提供的建议列在具有 Microsoft SQL Server 许可证的每个 EC2 实例旁边。提供的信息包括建议节省机会、EC2 实例按需价格和每小时自带许可 (BYOL) 价格。此信息将有助于您决定是否应降低您的许可证版本。

Compute Optimizer 会根据推断出的工作负载类型自动发现您在 Amazon EC2 上的 SQL Server 实例。要查看许可建议，您可以在 Compute Optimizer 中选择 SQL Server 实例，然后使用您的只读数据库凭证通过 A [mazon App CloudWatch lication Insigh](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html) ts 进行身份验证。Compute Optimizer 会分析您是否在使用任何 SQL Server 企业版功能。如果未使用企业版的任何功能，Compute Optimizer 建议您降级到标准版以降低许可成本。

您还可以使用 Compute Optimizer 为运行 SQL Server 工作负载的 Amazon EC2 实例提出调整大小建议。有关更多信息，请参阅本指南中的[使用 Compute Optimizer 优化 SQL Server 的大小](sql-server-sizing-compute-optimizer.md)。

## 成本优化建议
<a name="sql-server-compute-optimizer-recommendations"></a>

Compute Optimizer 中的许可证建议能够帮助您评估在 Microsoft SQL Server 中所使用的各项功能，并为您的工作负载选择最经济高效的版本。SQL Server 企业版的价格要比标准版贵得多。有关更多信息，请参阅本指南中的[比较 SQL Server 版本](sql-server-editions.md)和 Microsoft 网站上的 [SQL Server 2022 定价](https://www.microsoft.com/en-us/sql-server/sql-server-2022-pricing)。花些时间来配置 Compute Optimizer，以评估您的 SQL Server 实例集并提供相关建议，这样可以显著降低您的许可费用。

在**许可证详情**页面上，提供以下信息：
+ 请使用表格将您当前的许可证设置（例如版本、模型以及实例核心数量）与 Compute Optimizer 的建议进行对比。
+ 使用利用率图表查看分析期间使用的企业版功能数量。

有关更多信息，请参阅 Compute Optimizer 文档中的[查看商业软件许可证建议的详细信息](https://docs.aws.amazon.com/compute-optimizer/latest/ug/view-license-recommendations.html#license-viewing-details)。

## 配置 Compute Optimizer
<a name="sql-server-compute-optimizer-configuration"></a>

Compute Optimizer 使用 `mssql_enterprise_features_used` 指标分析商业软件许可证。有关该指标的更多信息，请参阅[商业软件许可证的指标](https://docs.aws.amazon.com/compute-optimizer/latest/ug/metrics.html#license-metrics-analyzed)。

1. 确保您拥有选择加入 Compute Optimizer 的适当权限。有关更多信息，请参阅下列内容：
   + [选择加入 Compute Optimizer 的政策](https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#opting-in-access)
   + [为独立 AWS 账户授予访问 Compute Optimizer 的权限的策略](https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#standalone-account-access)
   + [授予组织管理账户访问 Compute Optimizer 访问权限的策略](https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#organization-account-access)

1. 附加 App CloudWatch lication Insights 所需的实例角色和策略。有关说明，请参阅[启用商业软件许可证建议的策略](https://docs.aws.amazon.com/compute-optimizer/latest/ug/security-iam.html#license-access)。

1. 使用你的 Microsoft SQL Server 数据库凭据启用 CloudWatch 应用程序见解。有关说明，请参阅 CloudWatch 文档中的[设置应用程序以进行监控](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/appinsights-setting-up.html)。
**注意**  
要生成商用软件许可证推荐，至少需要连续 30 小时的 CloudWatch 指标数据。有关更多信息，请参阅[CloudWatch 指标要求](https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html#requirements-metrics)。

1. 使用以下 SQL 查询配置 App CloudWatch lication Insights 的最低权限访问权限。

   ```
   GRANT VIEW SERVER STATE TO [LOGIN];
   GRANT VIEW ANY DEFINITION TO [LOGIN];
   ```

   这将启用一项新服务 PrometheusSqlExporter SQL。

1. 从目标 AWS 账户 或组织管理账户中，选择加入 Compute Optimizer。有关说明，请参阅[选择加入您的账户](https://docs.aws.amazon.com/compute-optimizer/latest/ug/getting-started.html#account-opt-in)。
**注意**  
选择加入后，最长可能需要 24 小时才能生成结果和优化建议。

1. 在 [Compute Optimizer 控制台](https://console.aws.amazon.com/compute-optimizer/)中，选择导航窗格中的**许可证**。

1. 在**调查发现**列中，搜索具有**指标不足**调查发现的任何实例。如果 Compute Optimizer 检测到 CloudWatch 应用程序见解未启用或权限不足，则会返回此结果。有关更多信息，请参阅[调查发现原因](https://docs.aws.amazon.com/compute-optimizer/latest/ug/view-license-recommendations.html#license-finding-reasons)。请按照以下步骤来解决这些调查发现：

   1. 选择实例。

   1. 添加机密密钥。

   1. 确认已附加实例角色和策略。

   1. 选择**启用许可证建议**。

1. 在**调查发现**列中，搜索调查发现为**未优化**的任何实例。Compute Optimizer 在检测到 Amazon EC2 基础设施没有使用您购买的任何 Microsoft SQL Server 许可证功能时返回此调查发现。有关更多信息，请参阅[调查发现原因](https://docs.aws.amazon.com/compute-optimizer/latest/ug/view-license-recommendations.html#license-finding-reasons)。请按照以下步骤来解决这些调查发现：

   1. 选择实例。

   1. 将当前许可证版本与建议版本进行比较。

   1. 查看当前的许可证使用图表。

   1. 如果要降级许可证，请选择**实施建议**。

   1. 查看要求并按照说明降级许可证。如果要自动化该过程，请参阅[使用 AWS Systems Manager 文档降级 SQL Server 企业版以降低成本](https://aws.amazon.com/blogs/mt/downgrade-sql-server-enterprise-edition-using-aws-systems-manager-document-to-reduce-cost/)（AWS 博客）。

## 其他资源
<a name="sql-server-compute-optimizer-resources"></a>
+ 通过 AWS Compute Optimizer（AWS 博客）[降低微软 SQL Server 许可成本](https://aws.amazon.com/blogs/modernizing-with-aws/reduce-microsoft-sql-server-licensing-costs-with-aws-compute-optimizer/)
+ [什么是 AWS Compute Optimizer？](https://docs.aws.amazon.com/compute-optimizer/index.html) （AWS 文档）
+ [查看商业软件许可证建议](https://docs.aws.amazon.com/compute-optimizer/latest/ug/view-license-recommendations.html)（AWS 文档）
+ [降级您的 Microsoft SQL Server 版本](https://docs.aws.amazon.com/sql-server-ec2/latest/userguide/downgrade-sql-server-on-ec2.html)（AWS 文档）
+ [AWS上的 Microsoft SQL Server](https://aws.amazon.com/sql/)（AWS）
+ [AWS上的 Microsoft 许可](https://aws.amazon.com/windows/resources/licensing/)（AWS）
+ [Microsoft SQL Server 2019 定价](https://www.microsoft.com/en-us/sql-server/sql-server-2019-pricing)（Microsoft）
+ [Microsoft SQL Server 2022 定价](https://www.microsoft.com/en-us/sql-server/sql-server-2022-pricing)（Microsoft）

# 使用 Compute Optimizer 优化 SQL Server 的大小
<a name="sql-server-sizing-compute-optimizer"></a>

## 概述
<a name="sql-server-sizing-compute-optimizer-overview"></a>

[AWS Compute Optimizer](https://docs.aws.amazon.com/compute-optimizer/latest/ug/what-is-compute-optimizer.html) 帮助数据库管理员（DBA）在 Amazon Elastic Compute Cloud（Amazon EC2）上发现 Microsoft SQL Server 工作负载并适当调整 EC2 实例的大小，从而将许可证费用最多降低 25%。Compute Optimizer 中的[推断工作负载类型](https://docs.aws.amazon.com/compute-optimizer/latest/ug/inferred-workload-type.html)功能使用机器学习 (ML)，并自动检测可能在您的资源上 AWS 运行的应用程序。Compute Optimizer 支持将 SQL Server 作为一种推断的工作负载类型。通过使用推断的工作负载类型功能，您可以根据您在 Amazon EC2 实例上运行的特定工作负载，精准找出节省成本的途径。

使用此功能，您可以按支持的推断工作负载类型（例如 SQL Server）对节省成本的机会进行分类。Compute Optimizer 可以自动发现过度预调配的 SQL Server EC2 实例。您可以切换到 EC2 控制台来缩小实例大小，这有助于降低许可和基础设施成本。

您也可以使用 Compute Optimizer 提出 SQL Server 许可建议。有关更多信息，请参阅本指南中的[使用 Compute Optimizer 优化 SQL Server 许可](sql-server-compute-optimizer.md)。

## 配置 Compute Optimizer
<a name="sql-server-sizing-compute-optimizer-configuration"></a>

有关将 Compute Optimizer 用于 SQL Server 推断的工作负载的说明，请参阅[优化性能和降低许可成本：利用 Amazon AWS Compute Optimizer EC2 SQL Server 实例](https://aws.amazon.com/blogs/modernizing-with-aws/optimizing-performance-and-reducing-licensing-costs-leveraging-aws-compute-optimizer-for-ec2-sql-server-instances/)（AWS 博客）。您可以选择加入独立账户、属于某个组织成员的账户和组织的管理账户。对于独立账户和成员账户，选择加入仅会为该账户启用 Compute Optimizer。对于组织管理账户，您可以选择是仅在该账户中启用 Compute Optimizer，还是为该组织的所有成员账户启用 Compute Optimizer。

Compute Optimizer 选择加入流程会自动创建一个 AWS Identity and Access Management (IAM) 服务相关角色。有关更多信息，请参阅[为 AWS Compute Optimizer使用服务相关角色](https://docs.aws.amazon.com/compute-optimizer/latest/ug/using-service-linked-roles.html)。

Compute Optimizer 根据亚马逊 CloudWatch 指标（例如 CPU、I/O、网络和亚马逊弹性区块存储 (Amazon EBS) 的使用情况）分析您的资源。要生成推荐，需要在过去 14 天内至少连续 30 小时的 CloudWatch 指标数据。如果您启用增强型基础设施指标功能，则该利用率指标将延长至 93 天。有关更多信息，请参阅 Compute Optimizer [文档中的[CloudWatch指标要求](https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html#requirements-metrics)和增强型基础架构指标](https://docs.aws.amazon.com/compute-optimizer/latest/ug/enhanced-infrastructure-metrics.html)。

Compute Optimizer 根据 vCPU、内存、存储、网络、风险和迁移工作量提供选项以及与每个选项相关的节省金额。您可以使用 CloudWatch 指标仪表板来分析用于提出建议的数据。利用这些数据，您可以调整运行 SQL Server 工作负载的 EC2 实例的大小。有关如何更改实例类型的更多信息，请参阅 Amazon EC2 文档中的[更改实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-resize.html)。

## 其他资源
<a name="sql-server-sizing-compute-optimizer-resources"></a>
+ [AWS Compute Optimizer 识别和筛选微软 SQL Server 工作负载](https://aws.amazon.com/about-aws/whats-new/2023/05/aws-compute-optimizer-identifies-filters-sql-server-workloads/) (AWS)
+ [优化性能和降低许可成本：利用 AWS Compute Optimizer Amazon EC2 SQL Server 实例](https://aws.amazon.com/blogs/modernizing-with-aws/optimizing-performance-and-reducing-licensing-costs-leveraging-aws-compute-optimizer-for-ec2-sql-server-instances/)（AWS 博客）
+ [什么是 AWS Compute Optimizer？](https://docs.aws.amazon.com/compute-optimizer/latest/ug/what-is-compute-optimizer.html) （AWS 文档）
+ [查看 EC2 实例建议](https://docs.aws.amazon.com/compute-optimizer/latest/ug/view-ec2-recommendations.html)（AWS 文档）

# 查看 SQL Server 工作负载 Trusted Advisor 的建议
<a name="sql-server-trusted-advisor"></a>

## 概述
<a name="sql-server-trusted-advisor-overview"></a>

[AWS Trusted Advisor](https://docs.aws.amazon.com/awssupport/latest/user/trusted-advisor.html) 提供了一些建议，可帮助您遵循 AWS 最佳实践。通过分析您的使用情况、配置和支出， Trusted Advisor 提供切实可行的建议，以降低成本、提高系统可用性和性能，或帮助填补安全漏洞。本节重点介绍可帮助您降低在中操作 SQL Server 工作负载的成本的 Trusted Advisor 检查 AWS 云。

## 成本优化建议
<a name="sql-server-trusted-advisor-recommendations"></a>

Trusted Advisor 提供了一些建议，可帮助您在亚马逊弹性计算云 (Amazon EC2) 上优化 SQL Server 工作负载。这些检查可用于检查您的 SQL Server 工作负载并自动列出需要优化的实例。实施 Trusted Advisor 建议可以降低成本并改善组织的安全状况。

以下是以微软 SQL Server 为重点的 Trusted Advisor 检查：
+ [为 Microsoft SQL Server 过度预调配的 Amazon EC2 实例](https://docs.aws.amazon.com/awssupport/latest/user/cost-optimization-checks.html#ec2-instance-over-provisioned-microsoft-sql-server) – 此检查会分析运行 SQL Server 的 Amazon EC2 实例，并在实例超出 SQL Server 软件 vCPU 限制时提醒您。例如，采用 SQL Server 标准版的实例最多可以使用 48 v CPUs。 带有 SQL Server Web 的实例最多可以使用 32 v CPUs。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/optimize-costs-microsoft-workloads/sql-server-trusted-advisor.html)
+ [Microsoft SQL Server 的 Amazon EC2 实例整合](https://docs.aws.amazon.com/awssupport/latest/user/cost-optimization-checks.html#ec2-instances-consolidation-sql-server) – 此检查会分析您的 Amazon EC2 实例，并在实例的 SQL Server 许可证数量少于最低数量时提醒您。您可以整合较小的 SQL Server 实例以帮助降低成本。如果您有许多包含许可证的小型 SQL Server 实例，请考虑整合。根据 [Microsoft SQL Server 2019 许可指南](https://download.microsoft.com/download/e/2/9/e29a9331-965d-4faa-bd2e-7c1db7cd8348/SQL_Server_2019_Licensing_guide.pdf)，SQL Server 的每个实例至少需要 4 个 vCPU 许可证。如果您整合这些数据库，则可以节省许可成本。您可以根据实例上的数据库数量、最大数据库大小和数据库总大小来做出决定。SQL Server 的 Web 版、标准版和企业版均支持整合。有关更多信息，请参阅[整合 SQL Server 数据库](https://learn.microsoft.com/en-us/archive/blogs/mvpawardprogram/consolidating-sql-server-databases)（Microsoft 博客文章）。

  AWS 不建议将大型生产数据库只放在一台服务器上。但是，您可以整合那些用于非生产环境（如开发、测试和暂存环境）的较小数据库。这取决于您当前的 SQL Server 使用情况；如果您的数据库使用量较低，则可以整合到一台服务器上。

## 配置 Trusted Advisor
<a name="sql-server-trusted-advisor-configuration"></a>

执行以下操作来评估以 SQL Server 为重点的签入 Trusted Advisor。

1. 登录到 AWS 管理控制台。

1. 打开 [AWS Trusted Advisor 控制台](https://console.aws.amazon.com/trustedadvisor/home)。

1. 在导航窗格中的**建议**下，选择**成本优化**。

1. 在**成本优化检查**清单中，查看 **Microsoft SQL Server 的 Amazon EC2 实例整合**和**为 Microsoft SQL Server 过度预调配的 Amazon EC2 实例**检查的状态。
   + 绿色勾号表示您的 Amazon EC2 实例已实现最佳配置。
   + 橙色提醒符号表示有改进的机会。

1. 选择一项检查以查看其详细信息和建议。

1. 按照检查提供的说明进行操作，以优化运行 SQL Server 工作负载的 Amazon EC2 实例。

1. 定期监控您的实例，并定期刷新检查。

## 其他资源
<a name="sql-server-trusted-advisor-resources"></a>
+ [Trusted Advisor 查看参考资料](https://docs.aws.amazon.com/awssupport/latest/user/trusted-advisor-check-reference.html)（AWS 文档）
+ [AWS上的 Microsoft SQL Server](https://aws.amazon.com/sql/)（AWS）
+ [AWS上的 Microsoft 许可](https://aws.amazon.com/windows/resources/licensing/)（AWS）
+ [SQL Server 2019 定价](https://www.microsoft.com/en-us/sql-server/sql-server-2019-pricing)（Microsoft）
+ [AWS Launch Wizard 适用于 SQL 服务器](https://docs.aws.amazon.com/launchwizard/latest/userguide/launch-wizard-sql.html)（AWS 文档）