【转】Oracle SQL的硬解析和软解析
说到软解析(soft prase
)和硬解析(
hard prase
),就不能不说一下
Oracle
对
sql
的处理过程。当你发出一条
sql
语句交付
Oracle
,在执行和获取结果前,
Oracle
对此
sql
将进行几个步骤的处理过程:
1、语法检查(
syntax check
)
检查此sql
的拼写是否语法。
2、语义检查(
semantic check
)
诸如检查sql
语句中的访问对象是否存在及该用户是否具备相应的权限。
3、对
sql
语句进行解析(
prase
)
利用内部算法对sql
进行解析,生成解析树(
parse tree
)及执行计划(
execution plan
)。
4、执行
sql
,返回结果(
execute and return
)
其中,软、硬解析就发生在第三个过程里。
Oracle利用内部的
hash
算法来取得该
sql
的
hash
值,然后在
library cache
里查找是否存在该
hash
值;
假设存在,则将此sql
与
cache
中的进行比较;
假设“
相同
”
,就将利用已有的解析树与执行计划,而省略了优化器的相关工作。这也就是软解析的过程。
诚然,如果上面的2
个假设中任有一个不成立,那么优化器都将进行创建解析树、生成执行计划的动作。这个过程就叫硬解析。
创建解析树、生成执行计划对于sql
的执行来说是开销昂贵的动作,所以,应当极力避免硬解析,尽量使用软解析。
这就是在很多项目中,倡导开发设计人员对功能相同的代码要努力保持代码的一致性,以及要在程序中多使用绑定变量的原因。
/****************************************************/
大家都在说在Sql
中使用了
Bind Var
(绑定变量)会提高不少性能,那他到底是如何提高性能的呢?
使用了Bind Var
能提高性能主要是因为这样做可以尽量避免不必要的硬分析(
Hard Parse
)而节约了时间,同时节约了大量的
CPU
资源。
当一个Client
提交一条
Sql
给
Or
相关文档:
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
原文地址:http://www.eygle.com/case/Use.sql_trace.to.Diagnose.database.htm
SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。
本文就SQL_TRACE的使用作简单探讨,并通过具体案例对sql_trace的使用进行说明.
一、 基础介绍
(a) ......
原文地址:http://www.blogjava.net/xingcyx/archive/2007/01/09/92638.html
使用oracle的10046事件跟踪SQL语句
我们在分析应用程序性能问题的时候,更多地需要关注其中SQL语句的执行情况,因为通常应用程序的性能瓶颈会在数据库这边,因此数据库的sql语句是我们优化的重点。利用Oracle的10046事件,可以跟踪应用程序所执 ......
ORACLE SQL优化
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):
ORACLE 的解析器按照从右到左的顺序处理from 子句中的表名,from 子句中写在最后的表
(基础表driving table)将被最先处理,在from 子句中包含多个表的情况下,你必须选择记
录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需 ......
在sql查询分析器里面是不能直接运行cmd命令的
但是SQL给出了一个接口
--打开高级设置
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
--打开xp_cmdshell扩展存储过程
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
首先 打开一些配置
然后执行你要运行cmd命令
exec master..xp_cmdshell 'net star ......