WEB开发网
开发学院数据库Oracle 通过分析SQL语句的执行计划优化SQL(二) 阅读

通过分析SQL语句的执行计划优化SQL(二)

 2007-07-31 12:37:34 来源:WEB开发网   
核心提示: 第2步:分析语句(Parse the Statement)在语法分析期间,SQL语句从用户进程传送到Oracle,通过分析SQL语句的执行计划优化SQL(二)(3),SQL语句经语法分析后,SQL语句本身与分析的信息都被装入到共享SQL区,有些错误通过语法分析是抓不到的,例如,在该阶段中,

第2步:分析语句(Parse the Statement)

在语法分析期间,SQL语句从用户进程传送到Oracle,SQL语句经语法分析后,SQL语句本身与分析的信息都被装入到共享SQL区。在该阶段中,可以解决许多类型的错误。

语法分析分别执行下列操作:

翻译SQL语句,验证它是合法的语句,即书写正确

实现数据字典的查找,以验证是否符合表和列的定义

在所要求的对象上获取语法分析锁,使得在语句的语法分析过程中不改变这些对象的定义

验证为存取所涉及的模式对象所需的权限是否满足

决定此语句最佳的执行计划

将它装入共享SQL区

对分布的语句来说,把语句的全部或部分路由到包含所涉及数据的远程节点

以上任何一步出现错误,都将导致语句报错,中止执行。

只有在共享池中不存在等价SQL语句的情况下,才对SQL语句作语法分析。在这种情况下,数据库内核重新为该语句分配新的共享SQL区,并对语句进行语法分析。进行语法分析需要耗费较多的资源,所以要尽量避免进行语法分析,这是优化的技巧之一。

语法分析阶段包含了不管此语句将执行多少次,而只需分析一次的处理要求。Oracle只对每个SQL语句翻译一次,在以后再次执行该语句时,只要该语句还在共享SQL区中,就可以避免对该语句重新进行语法分析,也就是此时可以直接使用其对应的执行计划对数据进行存取。这主要是通过绑定变量(bind variable)实现的,也就是我们常说的共享SQL,后面会给出共享SQL的概念。

虽然语法分析验证了SQL语句的正确性,但语法分析只能识别在SQL语句执行之前所能发现的错误(如书写错误、权限不足等)。因此,有些错误通过语法分析是抓不到的。例如,在数据转换中的错误或在数据中的错(如企图在主键中插入重复的值)以及死锁等均是只有在语句执行阶段期间才能遇到和报告的错误或情况。

上一页  1 2 3 4 5 6  下一页

Tags:通过 分析 SQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接