使用内存技术提升Azure SQL数据库的性能
2016年年末,Microsoft发布了Azure SQL数据库内存技术通用版。该内存处理技术仅能在Azure Premium数据库层使用,它提升了联机事务处理(OLTP)以及混合事务分析处理场景中聚集列存储索引和非聚集列存储索引的性能。
Azure SQL数据库与SQL Server数据库使用了同样的内存技术。之前,Microsoft首先分别在SQL Server 2012和SQL Server 2014的列存储索引及联机事务处理中引入了内存能力。
Microsoft声称通过内存技术联机事务处理的性能最高可以提升30%,分析工作负载最高可以快100x,非常适合于寻找以下内存用例的组织:
得益于内存技术所带来的更加有效的查询和事务处理,组织不需要修改服务层就能获得一定的伸缩空间;除此之外,内存技术还能帮助组织降低成本。通常情况下,组织不需要升级数据库的定价层就能实现性能提升。在某些情况下,甚至降低定价层依然可以实现性能提升。
Microsoft认为在Azure SQL数据库中使用内存技术有以下好处:
- 内存联机事务处理可提升吞吐量并降低事务处理的延迟。
- 聚集列存储索引可减少存储占用(高达10倍)并提升报告和分析查询的性能。将其与数据集市中的事实数据表结合使用,可在数据库中容纳更多数据并提升性能。将其与操作数据库中的历史数据结合使用,可存档并查询高达10倍的额外数据。
- 用于混合事务分析处理 (HTAP)的非聚集列存储索引可以让用户直接查询操作数据库以获取实时的业务见解,无需运行昂贵的抽取、转换、加载(ETL)过程,无需等待数据仓库填充。通过非聚集列存储索引可以对联机事务处理数据库执行快速地分析查询,同时减少对运行负载的影响。
- 用户还可以将内存联机事务处理和列存储索引结合到一起使用。可以使用具有列存储索引的内存优化表,以便于快速地对相同数据执行事务处理并运行分析查询。
在最近的一个Data Exposed演讲中,来自于Microsoft的高级技术布道者Scott Klein和高级项目经理Jos de Bruijn展示了一个使用Azure SQL数据库内存处理的范例。他们构建了一个可以模拟物联网设备遥测输入的应用程序。在该示例中,他们模拟了一个100万电表同时向数据库发送用电信息的场景,示例开始的时候Azure SQL数据库并没有启用内存对象,结果CPU和Log IO承受了非常大的压力,CPU占用率徘徊在89%左右,Log IO占用率达到了86%。在启用了内存对象优化之后,CPU占用率降到了10.47%,Log IO占用率降到了34%。
图片源: (屏幕截图) https://channel9.msdn.com/Shows/Data-Exposed/In-Memory-OTLP-in-Azure-SQL-DB
在遇到性能压力的时候,开发者可能会想提升Azure SQL数据库的吞吐量单位(DTU)。现在,面对性能挑战的时候,人们的答案可能是优化而不是扩展。Quorum Business Solutions公司的解决方案架构师Mark Freydl解释道:
我们针对石油和天然气的物联网平台全年必须保持7*24小时运行,因此性能可扩展是非常关键的。Azure SQL数据库为少数关键操作所提供的内存联机事务处理表和本地编译的存储过程可立即将总体DTU消耗降低70%。
除了物联网遥测示例之外,Microsoft还提到了一些其他的可使用内存处理的场景,包括金融交易、游戏、ASP.NET会话管理、Tempdb替代以及避免无效的抽取转换加载操作。
图片源: (屏幕截图) https://channel9.msdn.com/Shows/Data-Exposed/In-Memory-OTLP-in-Azure-SQL-DB