新 Azure SQL 数据库服务等级的性能
4 月 24 日,我们发布了 SQL Database 基本级(预览版)和标准级(预览版)新服务等级的预览版以及新的业务连续性功能。在本博客文章中,我们将深入探究 SQL Database 中新等级的性能。
首先从变革的需求开始。我们之所以关注新服务等级中的性能(具体地说是可预测性能),主要是受客户对 SQL Database Web 级和企业级性能的强烈反馈推动。Web 级和企业级的性能一直都是不可预测的,存在随机性,这就给运行业务关键应用程序的客户带来了问题。我们明白,从客户角度而言,性能的可预测性非常重要。客户告诉我们,如果某个平台的性能长期不可信赖,那么就很难构建出能够在此平台上可靠运行的系统。
针对这一反馈,我们在 SQL Database 高级(预览版)之外又推出了基本级(预览版)和标准级(预览版)。高级(预览版)已于 2013 年 7 月推出预览版,主要专注于提供可预测的性能。客户对高级(预览版)的反馈非常积极。基本级(预览版)和标准级(预览版)也将向客户提供这一优势,而且有新的收费方式。客户现在可以将性能作为他们能够控制的一个杠杆,这也符合当前云计算行业的需要。这一杠杆会是客户从“按存储定价”的 Web 级和企业级服务模式转向“按性能+功能定价”这一新模式的主要推动力。
当您在新服务等级中测试应用程序时,请记住我们目前处于预览阶段,也就是说我们仍在对新性能体验进行持续微调。我们通过发布预览版来仔细倾听您的反馈,并将基于反馈进一步完善新的服务等级。您在运行性能测试时,不妨制定周期性重新运行计划,以确保您能更好地了解这些新服务等级中可用的不同性能级别。我们会在这些预览版的后续发展阶段,尽最大可能发布更多与性能相关的博客文章。
事实上,根据客户的反馈,我们刚刚对 5 月 19 日星期一这一周新推出基本级(预览版)和标准级(预览版)的吞吐量进行了改进:
- 基本(预览版):1 个 DTU –> 5 个 DTU
- S1:5 个 DTU –> 15 个 DTU
- S2:25 个 DTU –> 50 个 DTU
性能是什么意思?
数据库性能是一个复杂的话题,通常会采用大量指标来描述它的状态。从应用程序角度而言,用户真正关心的是:
- 响应时间
- 特定查询执行从开始到结束所经过的时间。
- 吞吐量
- 系统在任何时间点可运行的总体工作或执行速度。通常情况下,只有当单个执行在指定响应时间内完成时,吞吐率才会被视为有效。
影响响应时间和吞吐量的因素有很多,但主要可分为两类,即应用程序设计和硬件资源。以下是对数据库应用程序进行性能故障排除时的一些常见问题示例:
- 应用程序设计
- 是否已创建正确的指数集,为执行查询提供了最好的平台?
- 是否使用了正确的事务隔离级别?系统是否在无谓地等待锁定资源?
- 是否已采用多表批次或存储过程将往返通信最小化?
- 硬件资源
- 是否有执行工作负载的足够可用资源?
- 我需要对先后发生的不同类型的工作负载分配多少资源?
在性能方面,新的 SQL 数据库服务等级可以通过允许客户升级至提供更多硬件资源的性能级别,帮助解决与硬件资源相关的问题。如果采用的是横向伸缩设计模式(分区),您可以根据工作负载给不同分区分配新性能级别以提供不同的资源(例如向一个包含高度活跃客户的分区分配更高的性能级别)。我们正在积极制定一套详细的分区指南,为您提供这方面的帮助,敬请期待!
此外, 云设计的最佳实践之一是持续优化应用程序设计。这些投资可帮助降低对使用更高性能级别的需求,缩减运行数据库工作负载的成本。
有哪些硬件规格?
运行数据库工作负载所需的资源可归结为各种类型的硬件资源,包括 CPU、磁盘 IO 操作(读/写)和内存等。各个资源中的各个方面又存在巨大差异。例如,不同类型的内核有不同的时钟周期和缓存大小,IO 执行规模有大有小,具体取决于数据库系统在做什么。要预测您的应用程序对每种资源实际需要多少,并比对长期利用率,这一任务会非常困难,而且很耗时。在内部部署环境中,您要对数据库在其上运行的硬件进行控制,执行上述任务也无可厚非。移动到云上,尤其是使用 SQL Database 的一大吸引力就在于,您可以集中精力构建强大的应用程序,而无需劳神管理硬件或补丁及维护数据库软件。客户告诉我们,他们不想这么麻烦,只希望吞吐量水平能随时跟上他们的需求。这也正是我们关注性能的一个愿景。
在新服务等级下,我们采用了新的设计原理,可帮助确保性能的可预测性。每个性能级别(基本级(预览版)、S1、S2、P1、P2、P3)对应不同的资源组(如 CPU、内存、IO 等)分配。数据库在每个级别中可使用的最大资源量为既定。设计原理在于,一个数据库的性能应该大致等同于:在具有对应性能级别同样资源组的专用计算机上运行时所能实现的性能。该设计原理是提供可预测性能的基础。
要了解各性能级别的资源差异,我们引进了数据库吞吐量单位 (DTU) 的概念。DTU 是对各性能级别所分配资源的混合衡量指标。例如,P1 具有 100 个 DTU,S1 有 15 个 DTU,也就是说,S1 获得的资源是 P1 的 1/7 左右。按照上述设计原理,您可以预见在 S1 级别运行的数据库所拥有的性能级别类似于:在 CPU 速度、内存和 IO 能力均为 P1 级别 1/7 左右的专用计算机上运行时所能实现的性能。
从用户和故障排除角度来看,我们展示了您的数据库工作负载在各个资源方面所使用的基于当前性能级别的百分比情况,省去了理解不同类型的 IO、磁盘队列长度等诸多麻烦,使您可以轻松了解相对当前性能级别的资源使用情况。
我们在主数据库sys.resource_stats视图中展示了针对 CPU、读写使用情况的遥测数据,稍后还会在预览版中增加内存相关信息。此视图包含针对各资源方面平均 5 分钟(5 分钟内的总使用情况)收集的数据,这对于衡量您的长期资源需求非常有用。此遥测数据也可以在门户网站中获取。有关查询sys.resource_stats以及预测所使用 DTU 的更多详情,您可以阅读此 MSDN 文章,其中介绍了有关新服务等级的信息。
我们知道,提供强大的遥测数据对于性能故障排除非常重要。敬请期待我们在预览期间提供更多相应增强功能。
数据库工作负载生命周期
“使用数据库”的行为不是单个操作,而是由许多不同类型的操作构成。这一点听上去显而易见,但是在您计算哪个性能级别适合您的数据库,从而确定为运行数据库工作负载分配多少资源时却非常重要。答案可能并不像“标准(预览版) S2 @ 200 美元/月”(采用正式发布版价格)这么简单。云(尤其是 SQL Database)带给我们的一大优势就是灵活缩放能力。举例而言,“周一至周四和周六日使用基本(预览版) 应对数量不多的查询,周五使用 S2 管理在特定时间窗口内运行的较大型批量工作,每个月选一天使用 P1 快速执行大规模 ETL 操作:
(基本(预览版)价格/ 30 * 25)= 4.16 美元
(S2 价格/ 30 * 4)= 26.7 美元
(P1 价格/ 30 * 1)= 31 美元
总计 61.86 美元 / 月”
像上例中一样,许多数据库的工作负载生命周期将包含有着不同要求的不同子工作负载,例如:
- 数据库的初始负载(例如,当您向 SQL Database 迁移时)
- 正常使用(例如,在正常工作日使用此应用程序的单个部门的用户活动)
- 高峰使用(例如,每月一次处理针对整个公司全体员工的报告情况)
- 大型提取转换和加载(ETL 或导入/导出)操作
- 物理数据库维护操作(如创建索引)
如果将工作负载按不同要求分类,您将不必一直按峰值负载所需要的性能级别运行,从而可以大大缩减成本。
只需调用指定新服务目标的 Update Database API,您的应用程序代码可在必要时更改性能级别。此更改本身是一项异步操作,您可以使用 Get Database API 监视更改状态。您的数据库在整个更改过程中都将在线可用。
Web 级和企业级对比基本级(预览版)、标准级(预览版)和高级(预览版)
我们经常被问到的一个问题是,新服务等级中的性能与 Web 级和企业级相比如何。这个问题很难直接回答。难就难在新服务等级与 Web 版和企业版有着本质的不同。在 Web 级和企业级中,服务模式仅基于所使用的存储量,不会考虑任何其他硬件资源。系统基于保证存储可用性进行优化,不会考虑用以执行数据库工作负载的任何其他资源,这是一个根本性的缺陷。Web 级和企业级中的性能级别和资源可用性取决于不同的因素,如其他客户在同一计算机中的工作负载以及保护其本身不会过度使用的系统等。您能否利用这些资源要看运气,如果不通过新服务等级予以解决,这一问题会随着时间的推移而越来越突出。
我在文章开头已经说过,客户已经明确告诉我们,他们不希望自己的性能体验不可预测且不确定。新推出的基本级(预览版)、标准级(预览版)和高级(预览版)专注于以不同价位提供高性能的可预测性。也就是说,系统优化不仅是为了提供存储,也是为了兼顾执行数据库工作负载所需要的其他硬件资源。
这些服务等级所采用的设计原理有着本质的不同,因此就如同在比较苹果和橙子一样,并无可比性。
为了帮助您了解 Web 级和企业级的资源使用情况,我们在 sys.resource_stats 中提供了所使用资源的百分比情况(上文已提及)。遥测数据中针对 Web 级和企业级资源百分比计算的参考点设置为标准(预览版) S2 的 ½,因为这是目前 Web 级和企业级数据库的一般价位。请注意,这只是遥测数据的参考点,并不表示 Web 级和企业级中的可用资源量。如上所述,Web 级和企业级中的可用资源量存在不确定性。但想准确了解您的数据库所需的性能级别,您应当升级至这些新服务等级之一,然后运行您的工作负载,查看 sys.resource_stats。针对基本级(预览版)和标准级(预览版)服务仅在新建的逻辑服务器中可用的现有限制条件,会在后续预览阶段予以解除,届时您将不必导入 Web 级和企业级数据库来测试新服务等级。
非常感谢!
我们希望本博客文章可帮助您更深入地理解新服务等级中的性能。引言中已经提到,我们在预览阶段将评估反馈以及性能目标的质量,我们会在了解和收集到反馈后对性能级别做出相应调整。
其他参考文章:
感谢您使用 SQL Database 并试用预览版!
/Tobias 和 SQL Database 团队
本文翻译自:https://azure.microsoft.com/blog/2014/05/19/performance-in-the-new-azure-sql-database-service-tiers/