首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我很担心Oracle数据库什么时候不做解析

我很担心Oracle数据库什么时候不做解析
EN

Database Administration用户
提问于 2021-04-03 12:55:01
回答 1查看 195关注 0票数 1

我对Oracle数据库什么时候不进行解析感到困惑?在AWR报告中,有一个名为“执行到解析”的度量标准,这意味着更多的SQL只是在增加时不进行解析而执行。但正如Oracle文档所描述的:“当应用程序发出SQL语句时,应用程序将对数据库进行解析调用,以准备执行语句。”似乎每次发出SQL语句时,都会调用解析。所以,当Oracle不进行解析并使“执行到解析”成为一个更大的数字时,我会徘徊吗?还是我误会了?

Oracle文档是这样说的:

SQL解析SQL处理的第一阶段是解析。解析阶段涉及将SQL语句的各个部分分离为其他例程可以处理的数据结构。当应用程序指示时,数据库解析一条语句,这意味着只有应用程序,而不是数据库本身,才能减少解析的数量。当应用程序发出SQL语句时,应用程序将对数据库进行解析调用,以准备语句执行。

https://docs.oracle.com/database/121/TGSQL/tgsql_sqlproc.htm#TGSQL178

因此,如果“应用程序发出SQL语句,应用程序进行解析调用”,那么应用程序“如何减少解析的数量”呢?

EN

回答 1

Database Administration用户

发布于 2021-04-03 13:48:44

执行到解析是“执行sql 语句的次数与被解析的次数之间的比率”,如本参考中所指出的。在这种情况下,解析意味着硬解析(这是包含生成执行计划的完整解析过程)。

该度量存在的理由是,每当在Oracle中运行新查询时,都需要对其进行解析,以便Oracle SQL引擎能够确定最佳的执行计划,以便为查询提供数据服务。在解析并生成执行计划之后,该执行计划通常被缓存,因此下次执行相同的准确查询时,不需要再次解析它,而是使用现有的缓存执行计划。

您可以在甲骨文文档中阅读有关执行计划和Oracle缓存的更多信息。您还可以找到关于执行到分析公制的更多信息。

要回答您的问题“应用程序”如何减少解析的数量“?”:应用程序可以以两种比较明显的方式(这就是为什么Oracle文档中的语句可能令人困惑)。第一种方法是,应用程序可以通过减少它在数据库中执行的查询数量来减少解析的数量(例如,如果将查询转换为应用程序代码)。很明显,这是个愚蠢的回答,但这是真的。第二个更相关的方法是,它可以减少它在数据库中执行的唯一查询的数量。

由于缓存的执行计划基于发送到数据库服务器的准确查询文本,即使是WHERE子句谓词中的注释或不同值等最微小的更改也可能导致oracle解析和重新生成一个与以前运行的查询非常相似的新执行计划。如果应用程序正在为WHERE子句谓词构建唯一的查询字符串,而不是将它们作为实际参数传递给数据库服务器,那么每次都会解析该查询。如果使用参数,则该查询的每次后续执行都将导致使用缓存的执行计划,并且该查询不会被重新解析,从而导致度量执行与分析比率的正数。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/289209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档