行级别安全性打开时 Azure SQL 查询性能下降

标签 azure optimization azure-sql-database query-optimization row-level-security

在 Azure SQL 数据库中,当行级安全性处于事件状态时,相同的查询可在 4 秒内完成;而当行级安全性被禁用时,同一查询可在 1 秒内完成。

当我比较查询的执行计划时,我发现当行级别安全性处于事件状态时,优化器无法使用并行性。您可以看到下面的屏幕截图。

Same Query Actual Plan Comparisons when Row Level Security On and Off

我的问题是;

1- 当行级安全性处于事件状态时,优化器在技术上是否可以使用并行性?

2- 如果可能,即使行级安全性处于事件状态,我应该怎样做才能使优化器使用并行性?

最佳答案

这是一个已记录的已知问题 here 。罪魁祸首可能是安全策略所使用的函数的构建方式。为了避免这种情况,请尝试使用简单且确定性的过滤谓词,这些过滤谓词不涉及复杂的计算或与其他表的联接。

解决方法可能是尝试使用 MAXDOP 查询提示 (OPTION(MAXDOP 2)),但文章建议该方法和其他方法不起作用。希望此方法适用于您的情况或 Microsoft 支持尝试过的解决方法之一。

  • 更新统计信息并重建索引。
  • 使用重新编译或授予内存提示
  • 使用最新的兼容性模型
  • 清除缓冲池。
  • 清除过程缓存。

关于行级别安全性打开时 Azure SQL 查询性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77441197/

相关文章:

azure - 如何在powershell中循环遍历2个数组?

sql-server - 将生产 Azure SQL 数据库中的数据与临时数据库同步,允许在第二秒内进行更改

azure - Azure Function App 中的文件写入权限

sql - 哪个是避免 n+1 问题的最快执行方法,为什么?

c - 有多少个 GCC 优化级别?

javascript - 100 个或更多内部 javascript 文件优化?

sql-server - 如何将 IDENTITY 属性添加到现有的 SQL Azure 表中?

node.js - 如何从 Node.js 将项目发布到 Azure SQL Easy Table

.net - Azure 应用服务容器不断重新启动 - "Container failed availability check."

azure - 应用服务计划不允许 VNET 集成