oracle SGA内存结构简述
oracle SGA内存结构简述
1、SGA 共享池共享池是oracle存储程序数据的地方,执行后的每个SQL语句在共享池中都存有解析后的内容。同时也存储oracle使用的系统参数。共享池顾名思义,所有用户可以共享其内容,因此如果不同用户执行相同SQL,则只需编译一次。因此我们写的SQL尽可能的保持一致,避免每个SQL语句都是唯一的,影响性能。 2、库高速缓存oracle执行的每个SQL语句,其必须被解析并载入库高速缓存中,库高速缓存是SGA中专门用来缓存之前已经解析过的SQL区域。如果从来没有解析过,则需要解析,内容包括验证语法、提及的对象,以及确认该对象的用户权限,这个过程称为硬解析;如果已经执行过,则直接取之前已经解析后的信息重用,称之为软解析。 3、避免硬解析sql语句对应字符串生成唯一散列值,因此相同SQL语句,因为大小写、或没有使用绑定变量,虽然返回结果相同,但实际每次执行前都需要硬解析。绑定变量语法如下: 这里并没有直接给一个固定的emp_id,而是使用变量代替。
执行SQL:
执行SQL:
4、SGA缓冲区缓冲缓冲区缓存是SGA内存区域中最大的部分之一。数据库块从硬盘中读取出来后或写入硬盘之前,用它来存储数据库块。块是oracle进行操作的最小单位,块中含有表数据行或索引条目,一些还包含用来排序的临时数据。执行数据块不在缓冲去缓存,则需要访问操作系统获取这些块,然后在将结果集返回之前放入缓冲区缓存。直接从缓冲区缓存中读取,称为逻辑读取,从操作系统读取称为物理读取。逻辑读取显然优于物理读取,我们的目标就是尽量开发出能够重用共享池和缓冲区缓存中信息的代码。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |