【转】Oracle中的硬解析与软解析
Oracle中的SQL在执行之前进行解析,一个硬解析包括下面的步骤:
加载到共享池中 - SQL源代码被加载到内存中。
语法解析 - Oracle检查语法拼写错误。
语义解析 - Oracle验证来自数据字典的所有表名和列名并且验证你是否有权访问这些数据。
查询转换 - 如果允许(query_rewrite=true),oracle将把复杂的SQL转换为等价的简单形式。
优化 - 根据模式的统计信息创建执行计划(在10g中或许会使用动态的样本统计信息)。
创建可执行文件 - 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。
本文转自:http://blog.csdn.net/zjliu1984/archive/2009/07/01/4312333.aspx
相关文档:
oracle表空间操作详解
1
2
3作者: 来源: 更新日期:2006-01-04
5
6
7建立表空间
8
9CREATE TABLESPACE data01
10DATAFILE '/ora ......
SELECT
T.ELES_FLG,
T.SENDUNIT_NAME,
T.ROM_SEQNO,
LTRIM(MAX(SYS_CONNECT_BY_PATH(T.MODEL, ',')), ',') MODEL
from (SELECT
......
这段时间,接的多是RAC的维护和恢复问题。所以每天都是在和RAC打交道。
RAC真的很好玩。
大家有对RAC感兴趣的有问题的,或者是遇到RAC维护上面的出现问题的,可以发邮件至inthirties@gmail.com一起交流研究。
真的很希望玩Oracle ......
很多时候,对数据库进行性能诊断可以使用SQL跟踪的方法,把一些信息记录在trace文件里以后分析。一般情况下我们可以通过初始化参数SQL_TRACE=TRUE来设置SQL跟踪。
我们也可以通过设置10046事件来进行SQL跟踪,并且可以设置不同的跟踪级别,比使用SQL_TRACE获得更多的信息。
Level 0 停用SQL跟踪,相当于SQL_T ......
C.1 动态性能视图
Oracle 服务器包括一组基础视图,这些视图由服务器维护,系统管理员用户 SYS 可以
访问它们。这些视图被称为动态性能视图,因为它们在数据库打开和使用时不断进行更新,
而且它们的内容主要与性能有关。
虽然这些视图很像普通的数据库表,但它们不允许用户直接进行修改。这些视图提供
内部磁盘结构和 ......