SQL Server 2016新变化:内存中OLTP功能大改进

日期: 2015-10-18 作者:Robert Sheldon翻译:冯昀晖 来源:TechTarget中国 英文

与SQL Server 2016的其它许多功能一样,内存中OLTP(in-memory OLTP)在新版本中也有很大改进,包括扩展性、性能以及扩展T-SQL用于使用和管理内存优化表的功能方面。

内存中OLTP提供了针对内存优化表基于行的数据访问方式,使其支持高性能负载成为可能,无需特别的硬件和软件。该技术自带有直接操作表的引擎,极大地提升了吞吐量,降低了延时。该引擎会管理维护内存表,数据完全是可持久化且支持事务的。

微软公司在SQL Serve 2014版本中首次推出内存中OLTP,当时的项目名是“Hekaton”。但是当时该功能还有很多局限,比如:不支持表更新,不支持多线程日志读取。SQL Server 2016中解决了许多这类问题,提供了更加健壮完整的功能,处理了内存和CPU数限制等问题,增加了对透明数据加密(TDE)功能和多活动结果集(MARS)功能的支持。

内存中OLTP之扩展性与性能

在SQL Server 2014版本的时候,微软公司推荐使用内存优化表的总大小不要超过256GB内存。尽管这不是绝对不能逾越的警戒线,但是根据内存OLTP的工作方式来看,更大的尺寸是不太现实的。在SQL Server 2016中,微软把推荐的容量限制提升到了2TB,因为内存OLTP的各方面都有了提升。此外,SQL Server 2016还支持四CPU插槽的计算机用于内存中OLTP,而SQL Server 2014支持多CPU插槽的服务器有一定难度。

另一个性能提升是多日志读取线程的工作方式。在SQL Server 2014中,内存中OLTP引擎对每个数据库使用单个离线检查点线程来扫描事务日志中与内存优化表有关的变化。如果有大量事务发生,该线程的工作任务就会滞后。而SQL Server 2016可以使用多个线程对内存优化表做持久化变更,这样就获得了更好的扩展性和性能。

在SQL Server 2014中内存OLTP还有其他功能局限。该版本中的优化器不能为针对内存优化表的查询创建并行计划。SQL Server 2016中克服了这个问题,只是对于使用哈希索引的操作和未使用本地编译的存储过程的操作可以不受限制。SQL Server 2016还优化了垃圾回收算法,以前的清理行版本操作不再需要了。这些提升对于较大负载情况下尤其有益,以前的版本在大负荷情况下会导致垃圾回收处理跟不上删除数据列所需操作。

另外,SQL Server 2016从文件流依赖把文件组中的单个文件解耦,进而改进了内存中OLTP。SQL Server 2014版本使用文件流技术来直接分配和管理文件。而在SQL Server 2016中,内存中OLTP引擎直接控制了文件,这对创建或删除文件以及执行垃圾回收等操作都非常有好处。

内存中OLTP之T-SQL编程

SQL Server 2014的内存中OLTP有一个最大的问题,就是优化内存表一旦创建就不支持修改,这样一来要对表做优化就非常困难了。SQL Server 2016解决了这个局限性,支持直接修改表结构,无需删除表然后再重建。然而,要注意的是,修改内存优化表是离线操作,需要两倍内存量才可以执行更新。如果应用在更新期间访问该表,该操作会阻塞直到该表回到联机状态。SQL Server 2016还支持修改本地编译的存储过程。

事实上,SQL Server 2016在T-SQL操作内存中OLTP方面有许多改进。内存优化表现在支持外键、检查约束、唯一性约束、外链接和运算符(比如:UNION [ALL],DISTINCT,IN和EXISTS)。此外,你可以运行“sp_”针对本地化编译好的存储过程重新编译系统存储过程。另外,SQL Server 2016还增加了内存优化表对DML触发器和LOB数据类型的支持。你甚至可以对允许为“NULL”的字段创建索引。

内存中OLTP的比对方法(collation,也称排序规则)也优化了很多。在SQL Server 2016之前,内存优化表中字符类型列必须使用“BIN2”比对方式。SQL Server 2016中的内存中OLTP对于比较和索引提供了全面的支持。即便如此,BIN2提供的性能仍然是最佳的。其它比对方法会带来明显的性能损耗。(译注:BIN2方式指的是指定使用SQL Server中引入的码位比较语义的二进制排序顺序)

SQL Server 2016还从其它方面改进了本地编译的存储过程,比如支持子查询和嵌套本地存储过程调用。此外,微软公司还增加了对本地编译标量型用户定义函数(UDF)的支持,你可以用在使用内置标量函数的任何地方。当然,与存储过程一样,本地编译的标量型UDF在初始化创建以后可以修改或者删除。

内存中OLTP的工具之增强

微软公司在SQL Server 2008版本中推出了透明数据加密(TDE)功能。TDE功能内置于数据库引擎中,是一种可以对数据库中数据、日志和备份文件实施加密的一种技术。该功能的加密和解密过程对于应用程序和用户是透明的,在访问数据时无需特殊权限,只需要正常访问的授权就可以。该功能在SQL Server 2016中也有变化,内存优化表持久化存储到磁盘以后可以使用TDE进行加密保护,就像对其它普通数据库操作效果一样。

SQL Server 2016还支持MARS访问内存优化表。MARS使应用可以通过多个查询访问数据,在提取下一个结果集之前无需提取整个结果集。这样一来,应用可以打开多个结果集,可以交叉访问数据和执行其它语句。那些结果集可以是基于引用内存优化表和原生编译存储过程查询产生的。

SQL Server 2016在其它方面也有很多提升。例如,它增强了事务性能分析报表功能,你可以用它评估内存OLTP是否提高了你的应用程序性能。此外,SQL Server管理器中的表设计器现在也支持操作内存优化表了。

SQL Server 2016之内存中OLTP

以上绝不是SQL Server 2016在内存OLTP方面所做改进的全部清单,不过这些信息足以展示微软公司在内存处理技术方面的一些重要改进方式。新版本支持更大的内存,更多CPU插槽使用和多线程日志,以及支持修改内存优化表和原生编译存储过程,相比于在SQL Server 2014版本的时候,内存中OLTP在许多方面有了极大的飞跃。

这些功能变化提升足够说服SQL Server 2014用户升级到新版本了吗?当然,现在下结论还为时尚早。但是SQL Server 2016还有许多其他新功能和改进,只不过单单内存中OLTP的功能提升就足以展示微软对该版本的重视和该版本的优势了。

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

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

作者

Robert Sheldon
Robert Sheldon

自由技术撰稿人和技术咨询专家,曾出版和发布若干本书籍、文章和培训教材,重点关注Windows、数据库、商务智能等。

相关推荐