首页 > 解决方案 > oracle执行中过滤谓词中的SYS_AUDIT是什么

问题描述

我在 2 个不同的环境(较低的 env 和 prod)中运行 1 个查询,但发现了计划差异。音量看起来几乎相同。在我进一步分析之前只是想了解谓词中的 SYS_AUDIT 是什么。

环境 1:查询大约需要 50 分钟。

谓词如下所示。我尝试搜索 SYS_AUDIT 并没有在谷歌中找到太多帮助。想了解什么是 SYS_AUDIT。

3 - filter(SYS_AUDIT(1,'schema','SUPPLY_table','SUPPLY_ATTR',3) IS NULL)

5 - access("SUPPLY_DIM"."SUPPLY_SET_ID"="SUPPLY_SET_ID")
    filter((GREATEST("EFF_ASOF_DT","SUPPLY_DIM"."EFF_ASOF_DT")<=TO_DATE(' 2019-08-19 13:29:29', 
             'syyyy-mm-dd hh24:mi:ss') AND LEAST("EFF_UNTIL_DT","SUPPLY_DIM"."EFF_UNTIL_DT")>=TO_DATE(' 2019-08-19 
              13:29:29', 'syyyy-mm-dd hh24:mi:ss')))

Env 2:查询需要 15 分钟,谓词如下所示

3 - access("SUPPLY_DIM"."SUPPLY_SET_ID"="SUPPLY_table"."SUPPLY_SET_ID")
       filter((GREATEST("SUPPLY_table"."EFF_ASOF_DT","SUPPLY_DIM"."EFF_ASOF_DT")<=TO_DATE(' 2019-08-19 13:29:29', 'syyyy-mm-dd hh24:mi:ss') AND 
              LEAST("SUPPLY_table"."EFF_UNTIL_DT","SUPPLY_DIM"."EFF_UNTIL_DT")>=TO_DATE(' 2019-08-19 13:29:29', 'syyyy-mm-dd hh24:mi:ss')))

标签: sqloracleoracle12c

解决方案


根据 My Oracle Support 文档“FGA Policies Disable Plan Stability Baselines (Doc ID 2272107.1)”:

FGA 是使用透明生成的 SYS_AUDIT 过滤谓词强制执行的,过滤谓词会改变查询计划的结构。由于 FGA 激活,构成查询执行计划的某些查询块会发生变化

与虚拟专用数据库类似,看起来细粒度的审计会默默地向查询添加谓词,以强制执行自定义安全规则。

不幸的是,对于如何进一步调查或如何调整您的查询,我无法提供太多建议。您可能需要在 FGA 特定论坛上发帖,或为 My Oracle Support 创建票证。


推荐阅读