您的位置:首页 > 编程语言 > Java开发

数据库体系结构-共享池(shared pool),largepool,Java池,流池

2016-02-21 22:09 363 查看
一。共享池(shared pool)

sga的shared pool=库缓存(library cache)+数据字典缓存(dictionary cache)+其他(并行执行消息缓冲区以及其他内存结构)

大小由参数shared_pool_size初始化参数决定,可以被动态的修改。

1.数据字典缓冲区

dictionary cache是一系列保存了数据库参考信息(例如数据库用户,数据库结构等)的表和视图,oracle需要频繁的使用经过解析的sql语句访问数据字典。

数据字典是用来描述数据库结构的组织方式的,由表和视图组成。

由脚本 $ORACLE_HOME/rdbms/admin/catalog.sql

视图的三种示例:user_(当前用户所拥有对象的相关信息),all_(当前用户可访问的对象的相关信息),dba_(数据库中所有用户对象的相关信息)

oracle数据库的一些信息,包括账户,数据文件,表的描述,用户权限等信息,存储在数据字典中,数据字典表被存放在system表空间的数据文件中。

而dictionary cache就是Oracle为了提高访问数据字典的性能而在shared pool中专门为存放数据字典信息分配的内存空间。

例如执行一个查询,select * from emp where empno=778,oracle需要从dba_tables确定表emp是否存在,如果该表存在,还要去顶empno列是否存在,

然后才能生成语句的执行计划,这些定义在首次查询时存如数据字典缓冲区中,后续再次用到既可以直接使用。

2.库高速缓存

library cache=共享sql区+共享pl/sql区

共享sql区用来存放最近执行的sql语句信息,包括语句文本,解析数和执行计划

libarary cache存在一个上下文的概念,即sql语句分别存放在相应的上下文区中,并且不同sql语句分别对应于不同的上下文区,

当客户端执行sql时,服务器进程会检查是否存在该sql语句的上下文区,如果存在则按照该执行及计划直接执行sql语句,否则生成sql

语句的执行计划,并将sql语句和执行计划存放到相应的上下文区

通常说将的使用绑定变量等,也就是为了共享sql语句的上下文区,以降低sql解析次数。

完全相同的sql应有一下特点

a.语句文本相同

b.大小写相同

c.赋值变量相同

共享plsql区是为了存放罪行执行的plsql语句,解析和编译过的程序单元和过程(函数,包和触发器)

类似于数据告诉缓冲区,oracle也是使用lru算法来管理libarary cache的

3.large pool

大池为可选的内存区域,供一次性大量的内存分配使用,例如

a.共享服务器(shared server)及oracle XA接口(当一个事物与多个数据库交互时使用的接口)

b.I/0服务进程

c.备份与恢复操作

原理,如果large pool能为共享服务器,oracle XA,或并行查询缓冲区(parallel query buffer)分配绘画内存,shared pool

就能专注于为共享sql区提供内存,从而避免shared pool可用共享变小而性能降低,

而至于备份,恢复通常需要数百kb的内存,此时large pool更能满足此类大内存需求。

大池 不采用LRU算法管理内存。

4.java池和流池

SGA
内的 Java
池(Java Pool)是供各会话内运行的Java
代码及
JVM 内的数据使用的。
Java 池是
SGA 的可选区域, 用来为
Java 命令解析提供内存。 只有在安装和使用
JAVA
时才需要
JAVA 池。
Java
池的大小由 JAVA_POOL_SIZE
初始化参数来决定。
在数据库中,管理员可以在
SGA 内配置一个被称为数据流池(Streams Pool)的内
存池供
Oracle 数据流(Stream)分配内存。管理员需要使用STREAMS_POOL_SIZE

始化参数设定数据流池的容量(单位为字节) 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: