写点什么

在 SQL 数据库中使用内存中技术优化性能

  • 2017-09-07
  • 本文字数:2752 字

    阅读完需:约 9 分钟

使用 Azure SQL 数据库中的内存中技术可在各种工作负荷上实现性能改善:事务工作负荷(联机事务处理 (OLTP))、分析工作负荷(联机分析处理 (OLAP))和混合工作负荷(混合事务 / 分析处理 (HTAP))。 由于查询和事务处理的效率提升,内存中技术还可降低成本。 用户通常不需要升级数据库的定价层即可实现性能提升。 在某些情况下,即使是降低定价层,使用内存中技术也能实现性能改善。

以下两个示例演示了如何借助内存中 OLTP 大幅改善性能:

可在高级层中的所有数据库(包括高级弹性池中的数据库)内使用内存中技术。

该视频介绍了使用 Azure SQL 数据库中的内存中技术可带来的潜在性能提升。 请记住,实际带来的性能提升取决于许多因素,包括工作负荷和数据的性质、数据库的访问模式,等等。

Azure SQL 数据库采用以下内存中技术:

  • 内存中 OLTP 可提升吞吐量并降低事务处理的延迟。 可受益于内存中 OLTP 的情况有:高吞吐量事务处理(例如贸易和游戏)、从事件或 IoT 设备引入数据、缓存、数据加载以及临时表和表变量等情况。
  • 聚集列存储索引可减少存储占用(高达 10 倍)并提高报告和分析查询的性能。 将其与数据集市中的事实数据表结合使用,可在数据库中容纳更多数据并提升性能。 此外,将其与操作数据库中的历史数据结合使用,可存档并查询高达 10 倍的额外数据。
  • 用于 HTAP 的非聚集列存储索引:通过直接查询操作数据库来帮助获取业务的实时见解,无需运行开销不菲的提取、转换和加载 (ETL) 过程并等待填充数据仓库。 非聚集列存储索引允许非常快速地对 OLTP 数据库执行分析查询,同时减少对操作工作负荷的影响。
  • 也可以使用内存优化表与列存储的组合。 使用这种组合可以针对相同的数据极快执行事务处理和并发运行分析查询。

列存储索引和内存中 OLTP 分别在 2012 年和 2014 年加入 SQL Server 产品。 Azure SQL 数据库和 SQL Server 共享内存中技术的相同实现。 今后,这些技术的新功能将首先在 Azure SQL 数据库中发布,再加入到下一个版本的 SQL Server。

本主题全面介绍特定于 Azure SQL 数据库的内存中 OLTP 和列存储索引,并提供示例:

  • 介绍这些技术对存储和数据大小限制的影响。
  • 介绍如何控制使用这些技术的数据库在不同定价层之间的移动。
  • 介绍两个示例,演示如何使用 Azure SQL 数据库中的内存中 OLTP 和列存储索引。

有关详细信息,请参阅以下资源。
有关这些技术的深入信息:

有关内存中 OLTP 的快速入门教程:快速入门 1:通过内存中 OLTP 技术加速 T-SQL 性能(另一篇帮助用户入门的文章)
深入介绍这些技术的视频:

存储和数据大小

内存中 OLTP 的数据大小和存储上限

内存中 OLTP 包括用于存储用户数据的内存优化表。 这些表必需在内存可容纳的范围内。由于内存是直接在 SQL 数据库服务中管理的,因此我们提出了用户数据配额的概念。 这种概念称为内存中 OLTP 存储。

每个受支持的独立数据库定价层和每个弹性池定价层都包括一定量的内存中 OLTP 存储。在编写本文时,每 125 个数据库事务单位 (DTU) 或弹性数据库事务单位 (eDTU) 可使用 1 GB 存储。

对于每个受支持的独立数据库和弹性池定价层可用的内存中 OLTP 存储, SQL 数据库服务层一文提供了正式列表

以下各项计入内存中 OLTP 存储上限:

  • 内存优化表中的活动用户数据行和表变量。 请注意,旧行版本不计入上限。
  • 内存优化表中的索引。
  • ALTER TABLE 操作的运营开销。

如果达到上限,将会出现超出配额错误,且无法再插入或更新数据。若要解决此错误,可删除数据或提升数据库或池的定价层。

有关监视内存中 OLTP 存储利用率及配置即将达到上限时的警报的详细信息,请参阅监视内存中存储

关于弹性池

使用弹性池时,池中的所有数据库共享内存中 OLTP 存储。因此一个数据库中的使用量可能对其他数据库造成影响。对此,有
两个缓解方法:

  • 为低于池的 eDTU 计数的数据库整体配置最大 eDTU。此最大值将池中任意数据库中的内存中 OLTP 存储利用率限制为与 eDTU 计数对应的大小。
  • 配置大于 0 的最小 eDTU。此最小值可保证池中的每个数据库都有与配置的最小 eDTU 对应的可用内存中 OLTP 存储量。

列存储索引的数据大小和存储

列存储索引不需要在内存可容纳的范围内。因此,索引大小的唯一上限是最大整体数据库大小,此大小在 SQL 数据库服务层一文中有述。

使用聚集列存储索引时,对基础表存储使用列式压缩。这种压缩可显著减少用户数据的存储占用,意味着数据库中可容纳更多数据。使用纵栏表存档压缩可进一步提高压缩率。 可实现的压缩量取决于数据的性质,但 10 倍压缩并不少见。

例如,如果数据库的最大大小为 1 TB,则使用列存储索引实现 10 倍压缩时,该数据库中可容纳总共 10 TB 的用户数据。
使用非聚集列存储索引时,仍以传统行存储格式存储基础表。 因此节省的存储小于使用聚集列存储索引节省的空间。但是,如果使用单个列存储索引取代众多传统非聚集索引,则仍可整体减少表的存储占用。

在定价层之间移动使用内存中技术的数据库

升级到更高的定价层时(例如,从标准层升级到高级层),绝对不会出现任何不兼容性或其他问题。 可用的功能和资源只会增加。

但是,降级定价层可能会对数据库造成负面影响。 如果数据库包含内存中 OLTP 对象,则从高级层降级到标准或基本层时,影响就尤为明显。 降级后,内存优化表和列存储索引不可用(即使它们保持可见)。 降低弹性池的定价层或将使用内存中技术的数据库移动到标准或基本弹性池时,也应考虑这些问题。

内存中 OLTP

降级到基本 / 标准层:标准或基本层中的数据库不支持内存中 OLTP。 此外,不能将包含任何内存中 OLTP 对象的数据库移到标准或基本层。

将数据库降级到标准 / 基本层之前,请删除所有内存优化表和表类型,以及所有本机编译的 T-SQL 模块。
可通过编程方式了解给定的数据库是否支持内存中 OLTP。 可执行以下 Transact-SQL 查询:

2017-09-07 00:341272

评论

发布
暂无评论
发现更多内容

RxJava-不是上帝,真不推荐再用了,移动混合开发框架

android 程序员 移动开发

Linux编程之权限系统与工具使用(二),【大牛系列教学】

android 程序员 移动开发

livedatabus详解,阿里是如何用他来做淘宝架构的?,android开发视频百度云

android 程序员 移动开发

Meterial Design常见控件的使用(五),移动端h5开发框架

android 程序员 移动开发

MVVM系列之三:ViewModel,最新Android开发进阶

android 程序员 移动开发

ObjectBox 集成指南,建议细读

android 程序员 移动开发

MVPArms官方快速组件化方案开源,来自5K star的信赖,安卓性能优化和内存优化

android 程序员 移动开发

OOM问题原理解析(二),android开发教程pdf

android 程序员 移动开发

RxJava 沉思录(三),微信小程序的事件处理

android 程序员 移动开发

static修饰符学习汇总,android系统软件开发

android 程序员 移动开发

Native开发工具之交叉编译移植(五),android开发基础教程视频

android 程序员 移动开发

《个人信息保护法》正式实施,企业如何保证数据安全合规?

腾讯安全云鼎实验室

数据安全

offer求比较+部分大厂Android面经+真题解析,给2021的Android一些建议

android 程序员 移动开发

超牛无损图片放大神器PhotoZoom,你值得拥有!

淋雨

PhotoZoom

LeakCanary源码学习二:LeakCanary,sw实战营文件下载

android 程序员 移动开发

万人逐鹿、十强争霸!华为云GaussDB数据库两大重量级赛事圆满落幕

华为云数据库小助手

GaussDB 大赛 华为云数据库

Native开发工具之应用开发编辑器&打包发布(一),kotlin构造器

android 程序员 移动开发

RxJava-2-0还没熟悉,RxJava-3-0说来就来了!,安卓开发工具

android 程序员 移动开发

Meterial Design常见控件的使用(一),安卓面试题2018中高级

android 程序员 移动开发

offer求比较+部分大厂Android面经+真题解析(1),覆盖所有面试知识点

android 程序员 移动开发

OkHttp踩坑记:为何 response,androidui设计

android 程序员 移动开发

合同管理系统主要增加了安全性,对于大型企业作用重大

低代码小观

企业管理 管理系统 管理工具 合同管理系统 企业合同管理

LeakCanary源码分析以及ContentProvider的优化方案,android移动开发

android 程序员 移动开发

MaterialDesign系列文章(十一)Google2018年大会新出的控件汇总集合

android 程序员 移动开发

Meterial Design常见控件的使用(八),【面试总结】

android 程序员 移动开发

Probe:Android线上OOM问题定位组件,移动互联网app检测取证系统

android 程序员 移动开发

RecyclerView-的复用机制,Android开发面试技能介绍

android 程序员 移动开发

Go语言HTTPServer开发的六种实现

FunTester

HTTP Fasthttp Server Go 语言 FunTester

OkHttp 的 IO 操作和进度监听,android应用开发实训总结

android 程序员 移动开发

Okio—— 更加高效易用的IO库,一线互联网架构师Android框架体系架构

android 程序员 移动开发

RecyclerView 是 “何方神圣“,农民工看完都学会了

android 程序员 移动开发

在 SQL 数据库中使用内存中技术优化性能_微软_微软中国_InfoQ精选文章