在 Azure SQL 数据库中,当行级安全性处于事件状态时,相同的查询可在 4 秒内完成;而当行级安全性被禁用时,同一查询可在 1 秒内完成。
当我比较查询的执行计划时,我发现当行级别安全性处于事件状态时,优化器无法使用并行性。您可以看到下面的屏幕截图。
我的问题是;
1- 当行级安全性处于事件状态时,优化器在技术上是否可以使用并行性?
2- 如果可能,即使行级安全性处于事件状态,我应该怎样做才能使优化器使用并行性?
最佳答案
这是一个已记录的已知问题 here 。罪魁祸首可能是安全策略所使用的函数的构建方式。为了避免这种情况,请尝试使用简单且确定性的过滤谓词,这些过滤谓词不涉及复杂的计算或与其他表的联接。
解决方法可能是尝试使用 MAXDOP 查询提示 (OPTION(MAXDOP 2)),但文章建议该方法和其他方法不起作用。希望此方法适用于您的情况或 Microsoft 支持尝试过的解决方法之一。
- 更新统计信息并重建索引。
- 使用重新编译或授予内存提示
- 使用最新的兼容性模型
- 清除缓冲池。
- 清除过程缓存。
关于行级别安全性打开时 Azure SQL 查询性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77441197/