http://space.itpub.net/12985663/viewspace-672440
Oracle中的SQL在执行之前进行解析,一个硬解析包括下面的步骤:
1. 加载到共享池中 - SQL源代码被加载到内存中。
2. 语法解析 - Oracle检查语法拼写错误。
3. 语义解析 - Oracle验证来自数据字典的所有表名和列名并且验证你是否有权访问这些数据。
4. 查询转换 - 如果允许(query_rewrite=true),oracle将把复杂的SQL转换为等价的简单形式。
5. 优化 - 根据模式的统计信息创建执行计划(在10g中或许会使用动态的样本统计信息)。
6. 创建可执行文件 - Oracle创建一个服务于SQL查询的、调用本地文件的可执行文件。
Oracle提供了 shared_pool_size参数来缓存SQL从而使我们不需要重复解析SQL。但是,如果shared_pool_size设置太小或者在代码中使用了非重用的SQL(例如包含直接量where name="fred"),SQL语句可能会过期。
在Oracle中软解析和硬解析的区别是什么?仅仅是上面用红色标明的第一步。也就是说,软解析不需要重新装载到共享池(以及相关的内存分配)。
通常很高的解析调用次数(>10/秒)表明你的系统有大量不同的SQL语句,或者你的SQL语句没有被重用(例如,没有使用绑定变量)。
硬解析需要把 SQL语句加载到共享池中。硬解析比软解析差很多,因为它牵涉到共享池中内存的分配和管理。一旦被加载,SQL必须完全重新检查语法和语义以及生成可执行目标。
如果shared_pool_size设置的太小或者SQL语句没有重用,则会发生大量的硬解析。
所以要适当的设置共享池大小并且通过主机变量重用SQL。
分享到:
相关推荐
Oracle 硬解析与软解析
在数据库中硬解析是万恶之源,为大家提供一个查找并且定位oracle硬解析问题SQL语句脚本
oracle性能优化
ORACLE有些sql语句,不确定它是否会增加硬解析次数,对其它进行测试,是否会增加硬解析。
当发布一条SQL或PL/SQL命令时,Oracle会自动寻找该命令是否存在于共享池中来决定对当前的语句使用硬解析或软解析。 通常情况下,SQL语句的执行过程如下: Step1. SQL代码的语法(语法的正确性)及语义检查(对象的存在...
oracle SQL疑难解析 书中SQL 付书SQL oracle-sql-recipes-master
052 题库解析 ORACLE OCP 经过整理后的版本,有目录
oracle数据块解析
在oracle中利用函数实现计算公式解析|在oracle中利用函数实现计算公式解析
2015 10月 最新oracle ocp 053题库解析
2015年9月 最新oracle ocp 051解析
《深入解析Oracle:DBA入门、进阶与诊断案例》PDF版本下载
不管是想学习还是应付考试都适用 oracleOCP52 考题中文解析
深度解析Oracle 实战与提高
Oracle详细解析。Oracle详细解析。Oracle详细解析。Oracle详细解析。
想了解oracle数据字典的,就赶紧下载吧
Oracle数据库精讲与疑难解析(第2版),高清扫描。
想要学习Oracle 开发方向的童鞋 还是可以关注下这本书的。