oracle CACHE如何查询(SQL),查询执行包含以下步骤。 1. PARSE 2.执行 3.获取
在第一步中oracle检查CACHE(共享池)中是否存在查询(如果查询相同且基于LRU将存在),如果存在,则将跳过PARSING并开始执行。 因此,为了提高查询性能,我们必须使用绑定变量并使用相同的sql查询。
但是在Parsing oracle中验证身份验证(User Access),如果多个用户使用相同的查询,oracle如何跳过/使用解析?
答案 0 :(得分:2)
查询的解析与用户无关,它取决于查询。请注意,需要用于字符匹配的确切字符。查询中的空白和注释将导致它错过共享池匹配。
然后,解析树用于生成执行计划。如果在新查询中使用相同的模式作为匹配的查询,则使用现有的执行计划。
您可以通过创建多个架构进行测试,一个架构包含少量数据,另一个架构包含大型架构 量。然后分析所有表格。查看具有大量不同数据的同一查询的执行计划。这将显示同一查询的不同执行计划。
现在大量运行查询并检查第一次查询所需的时间 然后是后续的执行。使用Oracle Trace并查看左手痛苦的“Re-Parse” 频率。这也可以从一些字典表中收集。
答案 1 :(得分:1)
第一步oracle检查CACHE(共享池)中是否存在查询(如果查询相同且基于LRU将存在),如果存在,则将跳过PARSING并开始执行。因此,为了提高查询性能,我们必须使用绑定变量并使用相同的sql查询。
这是在Oracle上执行查询时的实际过程:
如果对#1.3的回答是肯定的 - Oracle会跳过硬解析部分,并使用现有的查询计划。
了解更多信息:
* AskTom: Difference between soft parse and hard parse
* Bind variables - The key to application performance
答案 2 :(得分:0)
Oracle中的常规做法是使用 definer权限创建存储过程,这意味着查询是以其定义者的权限执行的,尽管谁调用它们。这就是缓存运行良好的原因。
如果使用调用者权限(authid current_user
)创建过程或包,则将分别为每个调用者解析查询。
有关详细信息,请参阅Invoker Rights Versus Definer Rights。