图文教程:如何使用SQL Server新功能做数据库级别配置

日期: 2016-07-28 作者:Ashish Kumar Mehta翻译:冯昀晖 来源:TechTarget中国 英文

SQL Server 2016引入了非常棒的新特性叫“数据库级别配置”,该功能可以改善和简化配置SQL Server的工作。数据库管理员现在可以使用T-SQL语句在单个数据库级别控制各种数据库配置设置。目前,该功能在SQL Server 2016和Azure SQL 数据库 V12中已支持。微软公司的一篇博文提到该功能时表示,该功能尤其适合在Azure SQL数据库中使用,因为以前在云平台环境中有一些设置选项根本不能在数据库级别配置。

早期的SQL Server版本中,数据库管理员只能在SQL Server实例级别使用相关跟踪标记启用配置设置,包括MAXDOP, CLEAR PROCEDURE……

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

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

SQL Server 2016引入了非常棒的新特性叫“数据库级别配置”,该功能可以改善和简化配置SQL Server的工作。数据库管理员现在可以使用T-SQL语句在单个数据库级别控制各种数据库配置设置。目前,该功能在SQL Server 2016和Azure SQL 数据库 V12中已支持。微软公司的一篇博文提到该功能时表示,该功能尤其适合在Azure SQL数据库中使用,因为以前在云平台环境中有一些设置选项根本不能在数据库级别配置。

早期的SQL Server版本中,数据库管理员只能在SQL Server实例级别使用相关跟踪标记启用配置设置,包括MAXDOP, CLEAR PROCEDURE CACHE, PARAMETER SNIFFING 和 LEGACY CARDINALITY ESTIMATION。而现在,从SQL Server 2016开始,你可以直接使用T-SQL脚本做这些配置了。

ALTER DATABASE SCOPED CONFIGURATION语句支持用户在同一个SQL Server实例下基于应用需求为每个数据库分别设置配置。它还支持对SQL Server AlwaysOn可用组灾备软件中的主数据库和从数据库副本做设置,根据它们的预期负载进行配置。此外,你可以控制哪个数据库用户或用户组可以设置这些配置项,使用“ALTER ANY DATABASE SCOPE CONFIGURATION”控制权限功能。

SQL Server 2016支持的数据库域级配置选项

下面我们详细看看在SQL Server 2016和Azure SQL数据库 V12中,有哪些数据库级别的配置选项可用。我们先从MAXDOP开始了解。你可以使用数据库域级配置设置MAXDOP参数为指定数值,控制针对某个数据库可运行的并行数据库查询最大数量。微软公司官方博客表示,该选项可以使你避免在服务器级别使用“SP_CONFIGURE”选项,它可以在整个SQL Server层面设置,但是在Azure SQL 数据库中不支持。

如果你使用AlwaysOn可用组,你可以为联机事务处理主数据库和从数据库设置不同的MAXDOP值,可以用来运行报表系统。下面是配置脚本样例:

使用SQL Server新功能做数据库级别配置

图1:为主数据库和从数据库设置MAXDOP值的样例T-SQL脚本

“CLEAR PROCEDURE CACHE”语句可以清理指定用户数据库存储过程缓存,而不影响相同SQL Server实例下的其它数据库。下面是使用脚本清除主数据库存储过程缓存的样例:

使用SQL Server新功能做数据库级别配置

图2:清理主数据库存储过程缓存的样例T-SQL脚本

基数估计预测数据库查询可能返回的行数,可以用于优化查询。SQL Server 2016的“LEGACY_CARDINALITY_ESTIMATION”关键字用来配置使用技术估计,该功能是从SQL Server 2012以及更早的数据库版本引入的,而不是从2014以后的版本引入的。传统的估计方案在某些情况下可以帮助避免查询性能下降,可以通过使用跟踪标记来完成。不过,下面我们将展示通过T-SQL代码直接实现的方式:

使用SQL Server新功能做数据库级别配置

图3:对主数据库和辅助数据库启用“LEGACY_CARDINALITY_ESTIMATION”的T-SQL脚本样例

“PARAMETER_SNIFFING”可以启用或禁用数据库引擎编译和优化查询时的输入参数和变量值。如果你决定完全禁用这个选项,SQL Server查询优化器将用统计数据代替来做优化。你以前可能使用“跟踪标记4136”或者“OPTIMIZE FOR UNKNOWN”查询提示实现过类似结果。

使用SQL Server新功能做数据库级别配置

图4:在数据库级别禁用参数探测

“QUERY_OPTIMIZER_HOTFIXES”参数支持在数据库级别启用或禁用查询优化器补丁。查询优化器补丁是bug修复包,微软公司发布这些包是为了处理一些与查询优化器有关的问题。因为微软公司在SQL Server 2012和2014之间对查询优化器做了修改,那么不让过期补丁干扰当前查询优化器就是很重要的事。“QUERY_OPTIMIZER_HOTFIXES”支持按数据库选择是否使用最新优化器补丁,不用考虑数据库的兼容性级别。补丁默认通常是关闭状态,以前你必须使用“跟踪标记4199”来启用或关闭。现在你可以使用下面的方式来做了:

使用SQL Server新功能做数据库级别配置

图5:在数据库级别使用T-SQL脚本启用“QUERY_OPTIMIZER_HOTFIXES”样例

SQL Server 2016还引入了新的动态管理视图(DMV)sys.database_scoped_configurations,它支持查看当前数据库域配置信息,帮助监控和管理数据库性能。使用DMV,你还可以获取AlwaysOn可用组的主数据库和辅助数据库配置信息。要访问该视图,我们可以使用以下命令:

使用SQL Server新功能做数据库级别配置

图6:使用sys.database_scoped_configurations视图的T-SQL脚本样例

作者

Ashish Kumar Mehta
Ashish Kumar Mehta

数据库管理器等相关领域资深作者。在数据库管理、性能调优、数据库开发和Microsoft SQL Server等技术培训方面有超过十年的丰富经验。

相关推荐