本着一些早期问题的精神,询问有关首选sql Server的各种新版本的理由而不是之前的版本,公司可能会考虑在早期版本上升级到sql Server 2016的一些客观技术或业务原因,甚至更晚的版本发布如sql Server 2014?
(这个关于sql Server 2012的question与sql Server 2008相比,或者说this one关于sql Server 2012与sql Server 2005相比,这个问题的精神可以作为这个问题的例子.他们的答案也扩展了公司的一些原因.从sql Server 2008或sql Server 2005开始)
解决方法
重大原因:现在标准版中提供了许多功能
2016年11月16日,微软宣布推出针对sql Server 2016的Service Pack 1.随着此次发布,他们还宣布以前为企业版客户保留的许多功能将在sql Server的所有版本中提供 – 标准版,Express版(带有少数例外),Web除企业版外.
对于开发和销售具有sql Server后端的软件的软件供应商而言,这应该是一个非常令人信服的理由 – 现在可以为客户提供许多功能,无论他们的sql Server许可版本如何.对于那些必须保持随着时间的推移而添加到产品中的审计或其他安全性增强的行业的公司而言,这也很有吸引力.
在我看来,在使用sql Server超过17年的时间里,这使得sql Server 2016 SP1很可能成为最引人注目的升级,因为我已经开始使用6.5版本的sql Server了. (不要误解我的意思,2000年,2005年和2012年也有他们的时代优势!)
请看下面的列表,但作为您现在可以在标准版中使用的一些功能的快速示例,您可以使用以下内容:压缩,更改数据捕获,细粒度审计,行级安全性,始终加密,分区,数据库快照,内存中OLTP,列存储.
我试图将本节中的原因仅限于sql Server 2016中引入的功能.我也只是在这个答案中描述核心引擎增强功能,而不是报告,分析,数据集成等.
安全相关
行级安全性 – 我有许多客户希望能够逐行实现安全性. “用户x可以查看此行上的数据,但不能查看该行”.许多客户已经创建了功能和/或基于复杂视图的结构来实现这一目标.在sql Server 2016中,可以使用内置的谓词和安全策略来提供帮助.您可以阅读有关RLS here的更多信息.
动态数据屏蔽 – 这个在纸面上听起来很棒,但我想知道它是否会证明它比安全区域中的其他两个变化更有用.基本上,您可以根据调用者的权限在查询时动态屏蔽或混淆数据.要混淆的数据量是可编程的.例如,在Microsoft使用的示例中,您可以屏蔽除信用卡号码的最后四位数之外的所有数字,以便呼叫中心的呼叫接收者可以验证最后的四位数.您可以阅读有关该here的更多信息.
始终加密 – 也许您已经听说过有关透明数据加密的一些缺陷或担忧.也许您不想使用TDE,因为担心具有SA访问权限的人可以根据需要明确解密. Always Encrypted作为一项功能发布,将解密/加密功能放在应用程序调用sql Server的手中. sql Server中的静态数据已加密.由于这种方法,飞行前往sql Server的数据也被加密.您可以阅读有关Always Encrypted here的更多信息.
HA / DR功能
这里有一些功能.一种是在sql Server Standard中使用Always On Availability Groups的能力 – 基本可用性组.这是必要的,因为镜像已弃用且无替换.功能仅限于副本数量和同步方法.你可以阅读更多here.
这不是对可用性组的唯一更改(顺便提一下,它是在sql Server 2012中引入的).还有一些其他更改(您可以看到详尽的列表,其中包含指向其他更改的链接here):
>支持组托管服务帐户.
>支持分布式事务(某些为caveats).
>读取意图连接可以在只读副本之间进行负载平衡.
>现在有三个副本可以参与自动故障转移.
>加密数据库现在可以加入Always On Availability Group.
>性能改进 – sql Server 2016主题的一部分是“它只是更快” – 这是微软营销的旋转,但它正在市场上证明.对可用性组性能进行了一些改进.
安装程序修复了一些常见错误
从sql Server 2016开始的sql Server安装程序修复了配置TempDB时出现的一些常见错误.设置GUI现在指导您完成最佳实践配置.
查询商店
sql Server MVP和调谐器中的最爱.此功能是一种工具,可让您深入了解引擎如何执行查询.特别适用于跟踪查询计划随时间变化导致的性能问题.这可以是一个查看工具,也可以是一个修复工具.有助于简化一些性能调优概念.您可以阅读有关该here的更多信息.
时间表
我经常看到有必要提出一个问题,例如“这样的数据看起来像这样的日期”.时态表是这样做的一种方法.绝对有一些仓储用例.查看更多here.
列存储改进
这对我来说有三个很大的改进.一个是可更新的非聚簇列存储索引. sql Server 2014为我们提供了可更新的集群,但现在我们已经更新了nonclusted. sql Server 2016还允许内存中OLTP表上的列存储索引.现在,sql Server 2016中存在将传统B树非聚簇索引放置在聚簇列存储索引上的功能.
内存中OLTP的其他功能改进
现在可以使用In-Memory表或本机编译过程中不支持的一些功能.一些附加内容(但请参阅this article了解更多信息):UNIQUE约束,检查约束,DML中的OUTPUT子句,外部联接,选择列表中的子查询,SELECT DISTINCT,UNION / UNION ALL等.
一般性能改进
sql Server 2014在每个版本的几个关键领域对性能进行了一些改进. sql Server 2016在整个产品中进行了额外的关键增强.这包括为许多客户消除由于基数估算器更改而升级到sql Server 2014时有时会遇到的一些痛苦.为了改善日常性能,在发动机上下进行了一些改变.微软的CSS团队一直在他们的博客上写博客.您可以搜索“sql Server 2016它运行得更快”.本系列的博客文章示例是here.
我已经看到这种情况在已升级的客户中发挥作用,并期望越来越多地看到它.
一些缺点
任何升级都有明显的缺点.这可能是因为我以顾问的身份来做这件事,但我认为缺点是难以置信的可管理性,并且只是认为他们“先计算成本”项目需要注意和管理.
一般升级 – 一般升级意味着您正在引入新功能.你需要能够测试它们.在sql Server版本之间,不推荐使用各种功能.这并不意味着它们会立即消失,但这意味着它们可以在将来的版本中使用,通常会在以后发布三个版本.例如,如果您来自在sql Server 2000兼容模式下运行的数据库,则不支持TEXT数据类型或使用* =或= *语法在where子句中执行外连接.说到兼容性模式 – 它们也只返回三个版本.因此,如果您有一个运行在80(sql Server 2000)或90(sql Server 2005)兼容模式的数据库,它们就不能像这样进入sql Server 2016.因此,如果您一直在避免进行该测试并潜行兼容性级别,则需要进行清算.
再次.这很容易.有一些工具可以帮助捕获和测试数据,看看有什么破坏.有一些perfmon计数器可以帮助查找已弃用的功能.
许可 – 这里有两件事:
>基于核心 – 如果您习惯于预先获得sql Server 2012许可条款,那么cpu许可就是 – 许可证.自sql Server 2012以来,基于cpu的许可证一直基于核心.那里有一个调整期.此外,企业新许可证(在2012年首次推出时有一些例外)必须在核心级别获得许可 – 企业没有服务器CAL.这个云上闪亮的银色衬里就是我所说的SP1,它允许企业功能在非企业SKU中使用.如果你需要超过128GB的RAM.如果您需要高级扫描性能改进.如果您需要超过32GB的RAM用于列存储或内存,那么您正在查看Enterprise.如果你不这样做?而且您不需要在线索引重建?标准可能只适合您,现在可能更适合您使用新增的功能.
>软件保障(SA) – 如果您没有购买SA,您必须购买新的.因此,如果您正在运行sql Server 2005并且您担心自己不在主流支持之下,并且远离扩展支持的结束并且希望您现在可以使用这些功能,那么您不能像Service Pack一样进行升级.如果您从未购买过SA,那么您的升级是新购买.没关系,这真的是值得的.但它必须达到预算.
还有更多的原因,比如JSON支持,R的引入等等.但这些只是我考虑升级的一些原因.同样,最重要的项目是能够在Standard,甚至Express中使用许多以前仅Enterprise Edition的功能.我在客户中看到了很多成功案例,我期待看到更多.
如果您使用的是sql Server 2005或2008,则列表会更大. AlwaysOn可用性组在2012年推出,sql Server 2012中的列存储索引,sql Server 2014中的内存中OLTP等.