前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >案例:DRIVING_SITE 提示(HINT)设定无效的调查

案例:DRIVING_SITE 提示(HINT)设定无效的调查

作者头像
SQLplusDB
发布2020-03-26 10:26:55
9310
发布2020-03-26 10:26:55
举报

Keyword:

FGA DRIVING_SITE HINT NOT WORK DBLINK 10053 SYS_AUDIT

客户的问题

用户发现对某使用的DB Link的视图(View)设定细粒度审计(Fine Grained Auditing 简称FGA)后, 该视图中包含的DRIVING_SITE提示(HINT)变的无效了。

用户的数据库环境信息如下:

澄清和核实问题

根据用户描述,可以判定问题的焦点是SQL提示(HINT)DRIVING_SITE的无效和FGA设定的关系。

以下是用户提供的执行计划状况:

通过上面的输出,我们看到设定FGA后执行计划确实发生了变化,和没有追加DRIVING_SITE 提示的执行计划输出相同,即该提示没有起到期待的作用。

从何着手?

即使是再优秀的工程师,也不是所有的问题和所有的知识都了解的。 所以针对用户的问题,现在我们需要一步一步地明确和解决以下的一些问题:

理清问题后的调查(Research )

关于DRIVING_SITE提示

我们首先了解一下DRIVING_SITE提示:

官方在线文档【Database Reference】手册会提供关于一般SQL语法、表达式 、 使用规则等相关的知识内容,所以我们先从这个文档开始入手查看DRIVING_SITE提示的含义:

根据上面的描述,我们知道DRIVING_SITE 提示的主要作用是在分布式处理(即使用DB Link)时, 指示优化器在哪个数据库上执行。

根据用户提供的SQL文:

即,如果没有指定DRIVING_SITE的情况下,dept_view(DEPT@TEST)的数据应该通过DB Link发送到本地(即EMP所在的数据库)后,在本地进行表的连接。

如果指定DRIVING_SITE的情况下,emp的数据会被送到远程(即dept_view所在的数据库), 然后在远程数据库上进行表的连接后生成结果,再返回结果给本地。 (※这样在本地的表很小,远程表很大的情况下,可能会减少数据的传输,得到更好的效率)

DRIVING_SITE的使用限制

了解了DRIVING_SITE的含义,我们再看看是不是DRIVING_SITE的使用限制导致该问题发生? 通过对MOS和相关资源如在线文档,白皮书,网上资源等的检索, 我们知道对于DRIVING_SITE提示的使用,有如下的限制:

虽然对于driving_site提示有上面的限制,但是我们并没有发现任何和FGA有关的内容。

所以我们还要进一步地调查driving_site提示无效的原因。

一般都有哪些情况会导致提示无效?

既然我们现在没有找到最终合理的解释,下面尝试从一般经验和方法入手调查。 根据经验,一般都有哪些情况会导致提示无效?

好吧,越扯越远了~~,但确实没有本次问题(DRIVING_SITE)的经验。。。

提示无效时,应该如何入手调查?

下面我们通过一般的诊断方法进行入手。 其实目前为止,并没有包治百病的提示无效的解决方法,但是通过10053 Trace(Optimizer Trace),通常可以排除一些提示无效的原因和SQL解析执行情况, 并且在 10gR2以后的版本,10053中增加了Dumping Hints的功能,会表示出Hint相关的错误(err)和是否使用等信息。

(当然有时候Dumping Hints并不能输出很有用的信息,甚至输出的是无法理解的内容,所以仅能做参考)

不管怎样,我们需要先取得10053 trace看一看是有查询变换或者其他有用的信息输出。

现象能否能够重现?取得10053 Trace信息

根据用户的描述,在用户环境中通过TEST CASE可以重现问题, 所以我们也尝试在测试环境中重新问题,看看是不是跟环境有关,是不是在所有的数据库上都能够重现?

重现测试

测试1. 没有设定FGA,追加了DRIVING_SITE 提示时的情况

我们根据执行计划可以看到,DRIVING_SITE提示起到了作用:

ID 3中emp的数据被送到远程(即dept_view所在的数据库),然后在远程数据库上进行表的连接后生成结果,再返回结果给本地; Note信息中包括了“fully remote statement”信息。

测试2. 设定FGA,追加了DRIVING_SITE 提示时的情况

我们根据执行计划可以看到,DRIVING_SITE提示并没有起到作用:

ID=4 dept_view(DEPT@TEST)的数据通过DB Link发送到本地(即EMP所在的数据库)后,在本地进行表的连接; 并且Note信息中没有远程执行的信息。

我们还在11.2.0.4 、12.1.0.2和12.2.0.1版本上做了测试,如用户所说会有同样的问题。

取得10053 Trace

虽然在我们的测试环境中也重现了现象,但是我们还是无法确定是期待动作还是bug导致的问题,于是尝试取得10053 Trace来看看是否有有效的输出。

在【没有设定FGA追加了DRIVING_SITE 提示时】和【设定FGA追加了DRIVING_SITE 提示时】的情况,分别通过下面的方法,取得10053 trace。

10053 Trace结果

然后我们查看输出内容,看看有什么有用的信息。

在没有设定FGA追加了DRIVING_SITE 提示时本地的10053中并没有完整的输出, 猜测是在远程数据库中执行的,所以应该在远程数据库中设定10053,查看才有效。 (本次暂时忽略)

查看设定FGA追加了DRIVING_SITE 提示时时本地的10053的信息

根据Dumping Hints的信息err=0,used=1,应该是使用了提示, 但事实上提示(HINT)确实无效的,所以通过这个信息无法继续调查。

我们通过【Final query after transformations】,即查询转换后的信息, 可以看到在对于DEPT_VIEW视图,系统自动追加了SYS_AUDIT函数。

这个问题到底是期待动作还是bug导致的?

至此,我们可以猜测问题很有可能和追加了SYS_AUDIT函数有关。

SYS_AUDIT函数有什么特点? 关于这个函数的信息很少,但是我们知道在实现FGA时,内部会使用这个函数。 而且它和SYS_CONTEXT等函数一样都是只能在本地数据库执行的函数。 通过检索相关的信息时,我们发现类似于Bug 12810600(Not a Bug)的报告, (关于只能在本地数据库执行的函数SYS_CONTEXT导致DRIVING_SITE无效的报告) 即为了避免由于本地数据库执行的函数在远程数据库执行发生结果不正确, 这些函数只能够在本地执行,不能够在远程执行。

参考: Bug 12810600 - DRIVING_SITE HINT DOES NOT WORK

Product Version 10.2.0.4 Status 92 - Closed, Not a Bug

原因和解决方案

根据上面的调查结果,我们可以判断本次现象的原因是由于Oracle产品规格的限制, 当设定FGA审计时,DRIVING_SITE 提示无效属于期待动作, 对于这一点没有更好的解决办法,需要客户在应用程序和应用方法上做调整。

如果为了更好的分布式查询性能可考虑其他的查询优化方法。

代码语言:javascript
复制
参考:
Database Administrator's Guide
http://docs.oracle.com/cd/E11882_01/server.112
/e25494/ds_appdev.htm#ADMIN12196
>Tuning Distributed Queries

知识点总结(KM)

通过本次案例, 我们详细描述了解决DRIVING_SITE 提示设定无效问题的思路和过程, 并涵盖了以下的知识点。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Oracle数据库技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 客户的问题
  • 澄清和核实问题
  • 从何着手?
  • 理清问题后的调查(Research )
    • 关于DRIVING_SITE提示
      • DRIVING_SITE的使用限制
        • 一般都有哪些情况会导致提示无效?
          • 提示无效时,应该如何入手调查?
            • 现象能否能够重现?取得10053 Trace信息
              • 重现测试
              • 取得10053 Trace
              • 10053 Trace结果
            • 这个问题到底是期待动作还是bug导致的?
            • 原因和解决方案
            • 知识点总结(KM)
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档