sql-server-2012 - SQL Server 2012 - 为什么更改兼容模式会影响查询中的并行性?
问题描述
上周,我们在 2012 Enterprise SQL Server 上将兼容模式从 100 (2008) 更改为 110 (2012)。
从那时起,我们发现存储过程的性能从 18 分钟下降到 48 小时(在我们杀死它之前)。
我将兼容模式改回 100,sproc 再次在 18 分钟内运行。对比之前和之后的计划,110版本的每一步都有并行性,100版本什么都没有。其他存储过程(约 50 个)一直以正常速度运行。
这对我来说是一个全新的领域,为什么将兼容模式从 100 更改为 110 会导致仅一个存储过程的并行度大幅增加?
解决方案
更改为更高的兼容性级别有助于 sql 引擎根据最新改进选择计划。因此,更改兼容性级别并不是查询缓慢的主要原因。您应该使用查询提示OPTION(MAXDOP n)来查找 RCA。
在更改兼容级别之前和之后检查查询计划。更改兼容性级别后,使用查询提示检查它在 MAXDOP 1 上的计划,然后使用 MAXDOP n 检查计划,其中 n > 1(取决于服务器硬件)。
并且不要忘记分析具有更改的兼容性级别的查询计划。
推荐阅读
- quill - Quill 自定义属性重叠
- bash - 如何在不显示键值名称的情况下获取 JSON 的内容
- import - ModuleNotFoundError:没有名为“模型”的模块,例如 keras_ssd7
- mysql - 从表中获取不同的可用日期
- php - PHP Discord Webhooks 不在 Debian VPS 上发送,而是在 localhost 上工作?
- python - 我是 NLTK 的新手,需要将输出更改为预期输出,并希望以预期的输出格式获得(搭配词)输出。,
- java - 表达式语言 (EL) 在 JSP 中的 if 条件中显示错误
- angular - 被 CORS 阻止:对预检请求的响应未通过访问控制检查:资源上不存在“Access-Control-Allow-Origin”标头
- .net-core - 在 .NET Core 中配置 SqlClient 连接方法
- javascript - 无法从反应 JSX 中的选择标签中读取值