如何解决行级安全性能影响
How to resolve row level security performance impact
我有一个包含事实 table 和相关维度 table 的星型模式。
我有行级安全性,它适用于事实 table 和维度 table。重要的是最终用户不能看到他们不允许的维度 table 中的值,并且许多度量基于事实 table 中的外键计算,因此这里需要安全性来确保一致的结果。
这对性能的影响是巨大的,因为任何查询任何单个 table 的查询都需要根据 RLS 谓词过滤模型中的每个 table 并在返回结果之前加入,即使对于table 个未包含在查询中。
是否有任何已知的方法来提高性能或允许过滤仅应用于查询中包含的 table,而不是处理每个 table/join?
虽然我也从未尝试将 RLS 应用于事实 table。
,但我没有遇到过你面临的 RLS 问题
理想情况下,您只会通过在维度中所做的选择来访问事实 table 中的数据。当您的用户访问报告时,他们将只能看到满足 RLS 条件的维度记录,然后这些维度记录将过滤模型中具体化关系的事实 table。由于 RLS 在更小的维度 table 上工作,RLS 筛选器不会花费很长时间,并且对事实 table 生成的 DAX 查询也将执行良好。
通过将过滤器直接应用于您的事实 table,您需要在每个查询中处理事实 table,而不是利用预处理和优化的关系。
我认为解决您的问题的唯一方法是重新考虑您的设计,这样您就不需要将 RLS 应用于您的事实 table,因为这绝对是个坏主意。
我有一个包含事实 table 和相关维度 table 的星型模式。
我有行级安全性,它适用于事实 table 和维度 table。重要的是最终用户不能看到他们不允许的维度 table 中的值,并且许多度量基于事实 table 中的外键计算,因此这里需要安全性来确保一致的结果。
这对性能的影响是巨大的,因为任何查询任何单个 table 的查询都需要根据 RLS 谓词过滤模型中的每个 table 并在返回结果之前加入,即使对于table 个未包含在查询中。
是否有任何已知的方法来提高性能或允许过滤仅应用于查询中包含的 table,而不是处理每个 table/join?
虽然我也从未尝试将 RLS 应用于事实 table。
,但我没有遇到过你面临的 RLS 问题理想情况下,您只会通过在维度中所做的选择来访问事实 table 中的数据。当您的用户访问报告时,他们将只能看到满足 RLS 条件的维度记录,然后这些维度记录将过滤模型中具体化关系的事实 table。由于 RLS 在更小的维度 table 上工作,RLS 筛选器不会花费很长时间,并且对事实 table 生成的 DAX 查询也将执行良好。
通过将过滤器直接应用于您的事实 table,您需要在每个查询中处理事实 table,而不是利用预处理和优化的关系。
我认为解决您的问题的唯一方法是重新考虑您的设计,这样您就不需要将 RLS 应用于您的事实 table,因为这绝对是个坏主意。