SQL Server 2016带来了扩展数据库到Azure、Hadoop查询、内置的R分析、更好的安全性和更高的性能。
微软公司将SQL Server 2016称为SQL Server数据库27年发展演变史上 最大的飞跃 。正如我们将看到的,尽管围绕着SQL Server 2016数据库存在着过度的炒作,但其也的确为广大的企业组织机构提供了许多相当吸引人的新功能,包括内置的R分析、外部的Hadoop查询、Azure数据存储以及强大的管理和数据安全功能。
此外,SQL Server 2016提高了内存联机事务处理(OLTP)引擎、内存列存储(columnstore)、以及在SQL Server 2014中所推出的Azure云集成。其还为现有的SQL Server安装提供了一个合理的阶梯式升级。但所有上述的这些改进,以及微软对于目前Oracle的数据库用户所提供的免费的数据库许可证授权是否足以吸引这些用户迁移到SQL Server,则完全是另外一个问题。
在我开始详细介绍其新的和改进的功能之前,我应该介绍一下能够让您自己入手亲历亲为的部署SQL Server 2016的一些好的方法:下载并安装一款免费的开发人员或评估副本,或启动一款预配置的Azure虚拟机,并尝试各种不同的TechNet虚拟实验室。
安装和升级
在本地安装SQL Server 2016需要进行一些规划,连同适当地更新Windows 8、Windows 10或Windows Server 2012。即使是一款完全的当前版本的Windows 10,也需要在SQL Server 2016的安装之前进行一个Visual Studio运行时更新安装,而如果您想要使用 PolyBase(在Hadoop或Azure Blob存储中运行数据查询),您必须同时安装Oracle的Java 7或更高版本。而一款Linux版本的SQL Server 2016已经公布,且红帽和Canonical公司都已经承诺支持,Linux版本仍然还处于私下预览。
SQL Server 2016的安装设置与以前版本的安装是非常类似的。其有一些额外的配置步骤和选项 例如,设置微软R和PolyBase查询服务,这是新的功能特点。
SQL Server 2016的主要客户将是那些已经运行了SQL Server 2014,并想要升级他们的生产数据库,以便能够充分利用新的功能以及改进的性能,安全性,可扩展性等等的企业组织机构。如果您所在的企业组织便是这类客户的其中之一,那么,我们建议您可以分阶段的安装SQL Server 2016,从一个大概的测试或开发初步的数据库开始。微软的建议是从数据库兼容级别不变开始,然后将其兼容级别提高到130,并测试您的生产查询。如果您需要修复回归(Regression),您可以在您这样做时暂时降低兼容级别;而当您无需回归,并可以在130的兼容级别运行时,您应该可以看到改进的查询优化,并行查询计划,更积极的自动统计更新,和其他方面的性能提升。
性能的改进
微软公司为SQL Server 2016的性能提升进行了重大声明。在一个较高的水平,该公司宣称其两款拥有44个内核的TPC-E(OLTP)价格/性能获得了相当高的评分,一款具有富士通服务器,另一款带有联想服务器。此外,他们声称其拥有30TB和1TB数据库规模大小的TPC-H(分析)在性能和价格/性能方面获得相当高的评分。
而标准化的TPC基准是随着 标杆营销(Bench Marketing) 的一项改进,其在被正式推出之前,已经被数据库业界广泛应用,但仍然受到供应商们博奕的牵制。TPC-E在其指定的 pseudo-SQL 中,而不是明确的SQL语句是相当离奇的,并且从各种不同版本的Microsoft SQL Server获得唯一的列出结果。
TPC-H展示了更多种类的供应商;而从实际的TPC-H列表的观察中,我所不理解的是微软如何能够声称其在30TB和1TB的类别所获得的成功,当SQL Server 2016已经完全被群集的EXACluster OS 5.0在这两种情况下所扰乱。也许微软意在限制其对于非聚合(nonclustered)结果的声称,但却忘了说了。
所以,让我印象平平的是对于TPC结果的引用。微软为SQL Server 2016较之SQL Server 2014在特定的情况下的使用做出了额外的加速声明;这其中的一些都是很专业的,如 19倍更快的空间原生功能, 而其他的声明则更一般,如 Tableau工具190%更快的查询。 无论SQL Server 2016是否能够在Tableau查询方面超越亚马逊Aurora,都不是微软目前所自愿回答的问题。
对于SQL Server 2014的客户而言,重要的性能问题是在于探索他们自己的数据库负载是否能够在SQL Server 2016上运行得更快或更好的实现规模化。微软的测量和基准可能是富于暗示的,但他们最终与您企业自己的数据库如何执行则不太相关。
另一个潜在的提升性能和改进可扩展性的领域是增加内存(12TB)及SQL Server 2016可用的运行在Windows Server 2016上的内核的数量。这对于内存OLTP和内存中的运行分析肯定是相当重要的,但其同时也需要更大的服务器开销:将需要更多的内存、更多的内核和SQL Server 2016许可证包。
除了最大化的增加内存,自从该公司推出其SQL Server 2014以来,内存OLTP就已经获得了改进。微软表示,其拥有一个重写引擎,无阻塞的并发控制(nonblocking concurrency control),为本地代码编写T-SQL。微软声称,他们为磁盘上的联机事务处理带来了高达30倍的性能提高。
在SQL Server 2014中推出的内存OLTP,已经通过一个新的引擎得到了加强,并能够为本地代码编译T-SQL。
时态表和查询存储
大多数数据库都有两个数据存储:数据库和事务日志。使用事务日志将数据库回溯到历史上的某个点是一个考验耐心的尝试。
SQL Server 2016推出了在数据库中的暂存历史。其能够自动跟踪数据变化的历史,并使得历史数据状态能够方便地查询。基本上,这通过为旧的数据增加了历史表格,实现了一款ANSI 2011设施的部署,一个时间段的数据表格,和为系统时间条款选择statement操作的语法。
查询存储保持对查询文本的跟踪(加上所有相关的属性),存储所有的方案选择及性能指标,并交叉进行重启、升级和重新编译。一个查询存储允许您能够轻松地查询性能,比较查询计划,并根据过去的性能来强制实施计划选择。
安全性的改进
数据安全比以往任何时候都更为重要。我甚至无需提到HIPAA和PCI-DSS规定和相关的罚款。毕竟,去年美国人事管理办公室的政府雇员个人数据信息泄露事件和知名的婚外情网站AshleyMadison被黑客攻击并导致资料外泄事件已经广为人知了。
在SQL Server 2016中的最大的安全方面的改进被称为始终加密。这是相当聪明的措施:数据库中的敏感数据在列级加密,而未加密的数据在信任边界之外是永远看不到的。
上图勾勒出了由SQL Server 2016为 始终处于加密状态 的数据提供安全保障的一种方式。请注意,个人身份SSN从不发送到信任边界之外。
SQL Server 2016有两种加密实现方式:随机的和确定的。随机形式更为安全,但确定形式的加密允许在位置、区别和群组条款和联接进行同等比较。随机和确定这两种加密方式都允许透明检索。
SQL Server 2016的另一大重要的安全功能是动态数据屏蔽。这在查询时通过将他们与非特权用户进行混淆,来保护敏感列。假设,员工的社会安全号码表格已经被屏蔽:
ALTER TABLE [Employee] ALTER COLUMN [SocialSecurityNumber]ADD MASKED WITH (FUNCTION = SSN() )
那么,任何没有被授予访问特权的用户都将只能从查询返回的社会安全号码中看到一部分,例如:123-45-6789将以XXX-XX-XX89返回。
动态数据屏蔽适用于列。而在某些情况下,对于行级安全(RLS)又有一个额外的需要,例如对于医务人员如何对患者进行治疗数据的限制,或者在一个多租户数据库,当前租客对于属于自己的记录的行的可视化的限制。RLS是通过使用过滤断定,调用内联表值函数部署实现的。内联函数被进行了优化,使他们有与之相媲美的性能。
运营分析
传统上,OLTP数据库服务器和分析数据库服务器是单独分开的,而一款ETL进程则周期性的从OLTP服务器提取新数据以便在分析服务器上更新OLAP cubes。这是相当昂贵的;其也推出了数据延迟,有太多的移动部件以带来高可靠性。
在SQL Server 2016中的新的实时运营分析模式使用现场非聚集列存储索引,直接从OLTP数据库更新。最近的 尾 巴行进入到一个内存OLTP表,以便他们可以无需开销任何列存储索引费用而被查询。一个后台进程任务从尾部在100万行块迁移行到列存储。微软建议将列存储分析与群组可用性相结合,以实现最好的性能分析和规模化缩放。
内置R服务
R编程语言连同Python是数据科学家们的最爱。当运行R程序时所遇到的一个主要问题是,大型数据集的回归需要把数据带给R服务器或工作站。通常情况下,数据科学家们会通过将一个小的随机样本数据拉到R服务器以进行开发和测试,来绕过这个问题,而他们只运行了R脚本,而不是运行完整的数据作为最后一步。
在SQL Server 2016中,高性能并行R服务内置到数据库中,可以与T-SQL结构相互作用,基本上是把分析带给数据,而不是将数据带给分析。这不仅快得多,而且也更具可扩展性和更少的内存密集型。其有足够的快,使得数据科学家们可以在数据库中开发和测试他们的R脚本。微软还提供了一个独立的R服务器。
混合云与大数据
微软喜欢谈论 超大规模 的功能特点在Azure云中与SQL Server 2016的结合。这些功能特点中最棒的是数据库的扩展。基本上,您企业可以在内部部署的数据库实例和一款Azure SQL数据库之间通过开启 远程数据存档 功能以创建一个链接,在SQL Server为您提供Azure管理员凭据,并且改变您想要的远程数据归档的数据库的名字。
然后,为了控制迁移,您可以选择定义一款功能或一组功能来定义数据中的哪一部分将被扩展(例如,在一个订单表中完成的订单)。最后,您可以为想要扩展的表打开远程数据归档迁移状态。
其他超大规模的功能包括高可用性,数据库副本,以及增强备份到Azure上。您也可以将企业内部部署的SQL Server实例完全自动的迁移到SQL Azure上。
PolyBase是微软在在SQL Server 2016中对于一款统一视图的关系数据和HDFS (Hadoop)中的半结构化的数据或Azure的Blob存储的术语。PolyBase集群通过头节点和多个计算节点以大致相同的方式向外扩展,Hadoop集群通过一个名称节点和多个数据节点向外扩展。 PolyBase目前支持的Cloudera、Hortonworks数据平台和HDInsight。
如果您企业需要庞大的规模,您可以在云中或企业内部部署环境配置一款Azure SQL数据仓库或Azure数据湖,在企业内部部署环境安装一款微软分析平台系统设备。事实上,您可以把所有的这一切变成一个混合的解决方案。微软声称,该系统将能够扩展到多个数据字节,所您所在的公司是否需要任何的SQL Server 2016的新功能呢?如果您的企业正在运行SQL Server的旧版本,也很容易通过建立一个测试实例来测试兼容性和其所能带来的实实在在的好处,无论是在本地还是在Azure云中,通过您企业的数据库加载,并测试您的应用程序。在已经经历过这一切后,您要么知道不值得升级,要么知道您企业有一个很好的理由进行升级了。
与此同时,如果您企业正在运行Oracle的数据库,微软公司也愿意给您企业SQL Server 2016的许可证,以方便您企业的迁移,并为您提供对于该公司迁移工具的访问权限。在我最后一次查看该进程过程时,微软已经实现了大约90%的Oracle到SQL Server迁移的自动化,还提供了很好的手动步骤文档介绍。然而,这仍然是一项艰巨的任务,尤其是如果您企业的应用程序大量使用了甲骨文的特定功能的话。然而,如果Oracle到SQL Server的迁移已经是您企业的路线发展规划的一部分,那么这将可能是一个来进行过渡的很好的时间。
关于作者
本文作者马丁 海勒是InfoWorld网站的特约编辑和审稿人。此前曾是一名Web和Windows程序设计顾问,他于1986年到2010年,曾经在位于马萨诸塞州安杜佛的办公室负责开发过数据库,软件和网站。最近,他曾担任过Alpha Software公司的技术和教育的副总裁,以及Tubifi的董事长兼CEO。