Oracle中的解析
每当一个语句被执行的时候,Oracle要遵循一套方法来检查语句的语法、其中引用对象的有效性以及用户的权限。除此之外,Oracle还会检查是否已经执行了相同的语句,目的是减少处理负担。所有这些都在几分之一秒甚至更短的时间内完成,发出语句的用户毫不知晓。这个过程被称为解析。
解析的类型
所有的语句,DDL或者DML在执行的时候都要被解析。关键是这个解析是软解析(语句已经被解析并且在内存中可用)还是硬解析(所有的解析步骤都要被执行)。软解析将会显著的提升系统性能,而硬解析则会严重影响系统性能。减少硬解析会提升资源的利用和优化SQL代码。
解析过程
Oracle在内部会遵循下面的步骤从而产生SQL语句的输出。
语法检查:检查语句的语法。
语义检查:检查语句中引用的对象的有效性以及发出语句的用户的权限。这是一个数据字典检查。
为语句在内存中分配私有的SQL区域。
产生语句的已解析形式并且分配共享SQL区域,这涉及到为语句找到最优的执行路径。
在第四点中,Oracle会首先检查内存中是否存在已解析的相同的语句,一旦发现,已解析形式将会被选择并立即执行(软解析)。如果没有发现,产生语句的解析形式并且存放到共享SQL区域(SGA中共享池的一部分),然后执行该语句(硬解析)。这一步设计到语句的优化,它将决定性能。
相同的语句
Oracle会执行下面的步骤来发现相同的语句,从而决定是执行软解析还是硬解析。
1.当一个新语句发出时,会为它的文本字符串产生一个hash值,Oracle检查这个新的hash值是否和共享池中已有的hash值匹配。
2.然后,新语句的文本会和hash值匹配的语句做比较,这包括大小写,空格和注释的比较。
3.如果发现了匹配的语句,新语句中的引用对象会和匹配语句中的对象做比较。属于不同模式的相同表将被认为是不匹配的。
4.新语句中的绑定变量和被比较的语句中的绑定变量应该具有相同的类型。
5.如果满足上面的所有条件,Oracle会重用已存在的解析。如果没有发现匹配的语句,Oracle将完成解析过程并把它放到共享池中。
减少硬解析
当发生争用的时候,共享池内存会增加,我们应该在代码级别解决这个问题。下面是减少硬解析的一些建议。
1.
在语句中使用绑定变量而不是硬编码值。
2.
编写可以在不同地方使用的通用程序,这同样会减少代码重复。
3.
尽管你进行了严格的检查,也会偶然出现相同的语句以不同的格式书写的情况。定期的查询SQL区域来检查相似但独立解析的查询。把这些语句
相关文档:
oracle表空间操作详解
1
2
3作者: 来源: 更新日期:2006-01-04
5
6
7建立表空间
8
9CREATE TABLESPACE data01
10DATAFILE '/ora ......
在Oracle中建库,通常有两种方法。一是使用Oracle的建库工
且DBCA,这是一个图形界面工且,使用起来方便且很容易理解,因为它的界面友好、美观,而且提示也比较齐全。在Windows系统中,这个工具可以在Oracle程序组中打开(”开始”—“程序”—“ Oracle OraDb10g_home1”&mdash ......
Oracle系列:记录(Record)
一,什么是记录(Record)?
由单行多列的标量构成的复合结构。可以看做是一种用户自定义数据类型。组成类似于多维数组。
将一个或多个标量封装成一个对象进行操作。是一种临时复合对象类型。
记录可以直接赋值。RECORD1 :=RECORD2;
记录不可以整体比较. ......
1. 查询数据库现在的表空间
select tablespace_name, file_name, sum(bytes)/1024/1024 table_size from dba_data_files group by tablespace_name,file_name;
2. 建立表空间
CREATE TABLESPACE data01 DATAFILE '/oracle/ ......
Oracle Database 10g 提供了一个显著改进的工具:自动工作负载信息库 (AWR:Automatic Workload Repository)。Oracle 建议用户用这个取代 Statspack。AWR 实质上是一个 Oracle 的内置工具,它采集与性能相关的统计数据,并从那些统计数据中导出性能量度,以跟踪潜在的问题。与 Statspack 不同,快照由一个称为 MMON 的新的后 ......