Hard Parse&Soft Parse

DDL每次运行将必须是难以解决。

SQL 解析过程

Oracle对此SQL将进行几个步骤的处理过程:

1、语法检查(syntax check): 检查此sql的拼写是否语法。

2、语义检查(semantic check): 诸如检查sql语句中的訪问对象是否存在及该用户是否具备对应的权限。

3、对sql语句进行解析(prase): 利用内部算法对sql进行解析,生成解析树(parse tree)及运行计划(execution plan)。

4、运行sql,返回结果(execute and return)


5个运行步骤:

1:语法分析

2:权限与对象检查

3: 在共享池中检查是否有全然同样的之前全然解析好的. 假设存在,直接跳过4和5,执行Sql, 此时算soft parse.

4:选择运行计划

5:产生运行计划


3的解释:

Oracle将会对传递进来的SQL语句使用HASH函数运算得出HASH值,再与共享池中现有语句的HASH值进行比較看是否一一相应。现有数据库中SQL语句的HASH值我们能够通过訪问v$sql、v$sqlarea、v$sqltext等数据字典中的HASH_VALUE列查询得出。

假设SQL语句的HASH值一致,那么ORACLE其实还须要对SQL语句的语义进行再次检測。以决定是否一致。那么为什么Oracle须要再次对语句文本进行检測呢?不是SQL语句的HASH值已经相应上了?其实就算是SQL语句的HASH值已经相应上了,并不能说明这两条SQL语句就已经能够共享了。


Dictionary Cache

The data dictionary is a collection of database tables and views containing reference information about the database, its structures, and its users. Oracle accesses the data dictionary frequently during SQL statement parsing. This access is essential to the continuing operation of Oracle.

The data dictionary is accessed so often by Oracle that two special locations in memory are designated to hold dictionary data. One area is called the data dictionary cache, also known as the row cache because it holds data as rows instead of buffers (which hold entire blocks of data). The other area in memory to hold dictionary data is the library cache. All Oracle user processes share these two caches for access to data dictionary information.


Parsing

Parsing is one stage in the processing of a SQL statement. When an application issues a SQL statement, the application makes a parse call to Oracle. During the parse call, Oracle:

  • Checks the statement for syntactic and semantic validity

  • Determines whether the process issuing the statement has privileges to run it

  • Allocates a private SQL area for the statement

Oracle also determines whether there is an existing shared SQL area containing the parsed representation of the statement in the library cache. If so, the user process uses this parsed representation and runs the statement immediately. If not, Oracle generates the parsed representation of the statement, and the user process allocates a shared SQL area for the statement in the library cache and stores its parsed representation there.

Note the difference between an application making a parse call for a SQL statement and Oracle actually parsing the statement. A parse call by theapplication associates a SQL statement with a private SQL area. After a statement has been associated with a private SQL area, it can be run repeatedly without your application making a parse call. A parse operation by Oracle allocates a shared SQL area for a SQL statement. Once a shared SQL area has been allocated for a statement, it can be run repeatedly without being reparsed.

Both parse calls and parsing can be expensive relative to execution, so perform them as seldom as possible.




版权声明:本文博客原创文章。博客,未经同意,不得转载。

posted @ 2015-07-09 18:12  zfyouxi  阅读(176)  评论(0编辑  收藏  举报