内存中OLTP变形记:在SQL Server 2016沐浴重生

日期: 2015-10-19 作者:Basit Farooq翻译:冯昀晖 来源:TechTarget中国 英文

为充分利用现代计算环境,满足商业应用的需求和期望,微软公司推出了内存中OLTP(in-memory OLTP)。该功能支持利用更大量内存和多核CPU来提升OLTP操作的性能,并能缩短处理时间多达30到40倍。内存中OLTP引擎是全ACID兼容的事务数据库引擎,它与原生SQL Server数据库引擎是集成在一起的。 内存中OLTP是在SQL Server 2014版本中首次推出的,在目前最新发布的SQL Server 2016中提供了很多重要的改进。

下面我们就来了解内存中OLTP有哪些重要的提升。 增强内存中处理性能 相比于SQL Server 2014时候的内存技术,SQL Server 20……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

为充分利用现代计算环境,满足商业应用的需求和期望,微软公司推出了内存中OLTP(in-memory OLTP)。该功能支持利用更大量内存和多核CPU来提升OLTP操作的性能,并能缩短处理时间多达30到40倍。内存中OLTP引擎是全ACID兼容的事务数据库引擎,它与原生SQL Server数据库引擎是集成在一起的。

内存中OLTP是在SQL Server 2014版本中首次推出的,在目前最新发布的SQL Server 2016中提供了很多重要的改进。下面我们就来了解内存中OLTP有哪些重要的提升。

增强内存中处理性能

相比于SQL Server 2014时候的内存技术,SQL Server 2016内存中技术提升了查询性能。举例来说:同样的事务在SQL Server 2016内存优化表中运行要比在SQL Server 2014中运行快30倍。

最大化内存优化表(memory-optimized table)的内存

在SQL Server 2014中,微软公司推荐内存优化表的占用内存最大限度是256GB。这个推荐值是基于支持从内存优化表存储数据的检查点文件数量估算而来的,在恢复过程中会用到。在SQL Server 2016中,内存优化表的推荐最大内存是2TB。当然,不管你的内存表中有多少数据,这些表的所有数据必须适合内存大小。

比对方法(Collation)

在SQL Server 2014中,对于任何使用完全或部分索引键的字符类型字段列都只能强制使用BIN2方式比对。此外,在原生编译存储过程中,你也必须使用BIN2做所有字符值的比较。虽然这一点在SQL Server 2016内存OLTP引擎中不再是硬性限制,但也意味着你可以使用任何比较方式用于原生编译存储过程中的字符比较或者部分索引字符列。不过你必须知道,如果你使用BIN2之外的方式用于字符列的比对,可能会有一定的性能损失。

表结构(schema)和数据变化

SQL Server 2014内存中OLTP不允许你在创建内存优化表之后再修改表结构。如果你非要修改内存优化表的结构或者重建其索引,那么你必须先删除表,然后再重新创建内存优化表,使用“DROP TABLE”和“CREATE TABLE”语句。在SQL Server 2016中的内存中OLTP不再有这个限制,创建内存优化表之后也可以修改表结构,使用“ALTER TABLE”语句即可。例如,你可以使用“ALTER TABLE”语句为内存优化表添加、修改或者删除字段,也可以添加、删除和重建索引。下面给出一些例子展示如何修改内存优化表结构以及如何重建索引。

例1:修改内存优化表,增加两个非空列,其中一列使用了“DEFAULT”定义,使用“WITH VALUES”为表的现有行复制。

图1:为现有行新增加的两列提供指定值

例2:修改内存优化表,把“CarrierTrackingNumber ”字段数据类型由“nvarchar(25)”改为“nvarchar(50)”。

图2:修改“CarrierTrackerNumber ”列的数据类型

例3:修改内存优化表删除“UnitPriceDiscount ”列。

图3:删除“UnitPriceDiscount ”列

例4:修改内存优化表重建非簇哈希索引,使用新的bucket count值。

图4:重建非簇哈希索引,使用新的bucket count值

支持更多Transact-SQL功能

SQL Server 2014原生编译存储过程不支持Transact-SQL语言构造的全部,它们是由解释存储过程(基于磁盘)支持的。幸运的是,SQL Server原生编译存储过程支持更多的Transact-SQL特性,包括以下Transact-SQL构成项:


  • LEFT和RIGHT OUTER JOIN
  • SELECT DISTINCT
  • OR和NOT 运算符
  • SELECT语句所有从句中子查询
  • 嵌套存储过程调用
  • UNION和UNION ALL
  • 所有内置数学函数


并行计划

SQL Server 2014的优化器只能为针对内存优化表的操作创建串行计划。然而,SQL Server 2016支持给使用哈希索引的某些操作创建并行计划,前提是他们不是在原生编译存储过程中使用。

透明数据加密(Transparent Data Encryption,简称TDE)

在SQL Server 2014中,TDE功能是不兼容内存优化表的。也就是说,存储在内存优化表中的数据在“MEMORY_OPTIMIZED_DATA”文件组中再磁盘上不是加密留存的。在SQL Server 2016内存优化表中,不再有此限制,TDE功能完全兼容。所有内存优化数据表在磁盘上都是加密的。

AlwaysOn

在SQL Server 2014中,二级复制的内存优化表数据可视性是延后几个事务的。在SQL Server 2016内存优化表中没有这个问题,跟基于磁盘的表一样,所有数据对用户都是立即可见的。

CPU插槽数量

在SQL Server 2016中,内存中OLTP算法方面也有一些改进,包括更优的工作时间队列分区和更多线程量赋予内存数据的垃圾回收。由于这些提升,SQL Server 2016内存中OLTP在多CPU插槽计算机上效率更高。例如,相比于SQL Server 2014内存中OLTP,你可以把SQL Server 2016内存中OLTP扩展到4CPU插槽计算机,会获得出色的效率。

作者

Basit Farooq
Basit Farooq

资深数据库管理员、培训师和技术撰稿人,具有十多年微软SQL Server平台的开发、技术培训和数据库管理的经验。

相关推荐