您还可以使用以下动

Dive into business data optimization and best practices.
Post Reply
Bappy11
Posts: 471
Joined: Sun Dec 22, 2024 9:30 am

您还可以使用以下动

Post by Bappy11 »

SQL Server 2016 发布了多项新功能,增强了功能性和灵活性,从而提高了数据库性能。

我担任生产 SQL Server DBA 已有 12 年以上,对无数 SQL 服务器进行过健康检查分析;我注意到,有几次我的分析报告将 MAXDOP 建议作为关键建议之一。然而,几乎有一半的时间我们不得不将其从我们的列表中排除,因为连接到该数据库的应用程序只允许 MAXDOP=1 设置。这些应用程序中的大多数都是遗留应用程序——它们没有给我们利用并行性或并行查询执行的空间。

我还发现,为了降低资源成本,许多组织选择在一台机器上托管/整合多个数据库。而且,如果您有任何应用程序连接到这些数据库中的任何一个,并且有 SQL Server MAXDOP=1 限制,它会阻止同一 SQL 实例上的其他数据库利用并行性;并且整体服务器性能会受到影响,因为 MAXDOP 设置会影响整个实例。

微软最终解决了这个问题,并在 SQL Server 2016 中引入了数据库级配置选项。借助数据库属性上的这些新配置选项,您现在可以在数据库级别而不是整个实例级别配置 MAXDOP 值。现在,您可以在单个实例上拥有多个数据库,但每个数据库上的 MAXDOP 值都不同,并且可以高效地利用并行性。

您可以在数据库属性下的选项选项卡上看到这些数据库范围的配置值:




您可以使用 GUI 或使用以下 T-sql 命令进行配置:

Use <DatabaseName>
GO
GO


SELECT * FROM sys.database_scoped_configurations;

如上图所示,数据库级别有四种配置设置可用:

最大 DOP。使用此选项,您可以在数据库级别启用并行性。根据逻辑处理器的数量,您可以 科特迪瓦电报数据 在此选项上指定数值,这允许 SQL Server 使用那么多处理器来并行处理针对该特定数据库的查询。
旧版基数估计。SQL Server 使用此选项通过估计特定查询将返回的行数来生成最佳执行计划。现在您可以在数据库级别打开或关闭此选项。
参数嗅探。SQL Server 通过评估传递给存储过程的参数来准备执行计划,并对该存储过程的连续运行或性质或形式相同的其他过程使用相同的计划。这样,它试图通过使用相同的计划并避免编译时间来提高性能。
但是,这确实会给一些复杂的过程或查询带来问题,因为这些过程或查询需要比基于一个参数值创建的计划更优化的计划。在 SQL 2016 中,您可以在数据库级别禁用此选项,并让 SQL 使用查询优化器作为使用更多当前 SQL 统计信息的计划。

查询优化器修复。如果您在数据库中启用此选项,SQL 将允许查询优化器针对该数据库上的所有查询使用该 SQL 实例上应用的最新 SQL 修补程序或补丁附带的所有功能。
在早期的 SQL 版本中并非如此。在早期版本的 SQL 2016 中,查询优化器无法立即使用 SQL 修补程序附带的所有最新修复,以避免某些查询在新更改后可能表现不佳的情况。
Post Reply