用Oracle进行过实际开发的应该对硬解析与软解析并不陌生,Oracle中对这两种不一样解析的使用,将直接影响到整个系统的性能。那在项目中尽可能使用软解析的缘由又是什么呢?首先来一块儿看一下这两种解析的工做过程:数据结构
一个硬解析包括下面的步骤:oracle
在Oracle中软解析和硬解析的区别是什么?仅仅是上面用红色标明的第一步。也就是说,软解析不须要从新装载到共享池(以及相关的内存分配)。 性能
硬解析比软解析差不少,由于它牵涉到共享池中内存的分配和管理。硬解析须要把SQL语句加载到共享池中。一旦被加载,SQL必须彻底从新检查语法和语义以及生成可执行目标。优化
Oracle中有一种叫作闩的锁,用来实现对Oracle所用共享数据结构的串行化访问,此处提到的共享池就是这样一个例子。共享池是系统全局区的(System Global Area, SGA)中一个庞大的共享数据结构,Oracle正是在这里存储已解析、已编译的SQL。修改这个共享结构的时候,因为闩的存在,一次只容许一个进程访问。因此,当系统中存在大量的硬解析时,每生成的一个新的SQL语句都须要加载到共享池里面,也就是对这个共享结构进行了修改,此时每次只能有一个线程来对共享池进行访问,这就致使等待时间变长,效率下降。若使用软解析,只须要加载与解析一次,不会重复的进行大量SQl的编译与解析,因此效率会大大增长。spa