分享

oracle内存管理

 qrzhcd 2013-06-13

oracle内存管理  

2011-07-14 22:36:29|  分类: oracle管理 备份 |字号 订阅

ORACLE包括SGA和PGA两种内存结构,其中SGA是一组共享内存结构的集合,PGA包含服务器进程和后台进程的数据和控制信息,每个服务器进程和后台进程都有独立的PGA。

1.1内存结构

SGA是有所有服务器进程和后台进程共享的内存区域,它有数据高速缓存(database buffer cache)、重做日志缓冲区(redo log buffer)、共享池(shared pool)、大缓冲池(large pool)、java池(java pool)和stream pool等部分组成。当启动例程时,ORACLE会自动分配SGA;当关闭例程时,ORACLE会自动释放SGA所占用的空间。PGA是每个服务器进程或后台进程独有的内存区域,当启动服务器进程或后台进程时,ORACLE会自动为其分配相应的PGA空间。

1.1.1数据高速缓存

数据高速缓存用于存放从数据文件读取的数据块内容,并且数据块内容会被存放到相应的缓冲区中。标准数据高速缓存尺寸由参赛DB_CACHE_SIZE定义,标准数据块尺寸由参数DB_BLOCK_SIZE定义,非标准数据高速缓存尺寸由参数DB_nK_CACHE_SIZE定义

1.缓存区

缓冲区用于存放数据文件的数据块内容,其尺寸与数据块尺寸完全相同。按缓冲区使用情况,可以将其划分为脏缓冲区(dirty buffer)、空闲缓冲区(free buffer)、忙缓冲区(pinned buffer)三种。脏缓冲区是指内容已被修改但尚未写入磁盘的缓冲区:空闲缓冲区是指不包含任何数据的缓冲区;忙缓冲区是指服务器进程正在访问的缓冲区。

2.数据高速缓存工作原理

oracle采用LRU(least recently used)算法管理数据高速缓存。类似于排队机制,最先入队的最先出队,最后入队的最后出队。

3.写列表和LRU列表

写列表用于存放脏缓冲区的列表信息,LRU列表用于记载缓冲区访问的先后次序。

1.1.2重做日志缓冲区

重做日志缓冲区用于记载例程变化,其尺寸有初始化参数LOG_BUFFER定义。当执行DML、DDL、DCL操作时,服务器进程会生成包含变化信息的重做入口(Redo Entries),并将重做入口信息写入重做日志缓冲区,然后才会修改数据高速缓存。

1.1.3共享池

共享池包括库高速缓存(Library cache)、数据字典高速缓存(Dictionary cache)、结果缓存(Result cache)、并行执行消息缓冲区和控制结构。尺寸由shared_pool_size定义

1.library cache

library cache包括共享SQL区、共享PL/SQL区和控制结构。它主要用于存放最近执行的SQL语句和PL/SQL程序单元信息,包括SQL语句文本、解析树及其执行计划。

library cache包含很多context area,每个context area都包含相应的SQL语句的执行计划,这些context area被称作共享游标。当客户端运行SQL语句时,服务器进程首先检查共享游标是否存在,若存在则按其执行计划直接执行语句;若不存在则生成SQL语句执行计划,并将执行计划存放到相应的context area,然后执行该SQL语句。通过共享游标,可以最小化SQL语句解析次数,从而提高SQL语句的执行性能。

2.dictionary cache

dictionary cache用于存放数据字典的信息,包括表定义、列定义、权限等信息。当解析SQL语句时,服务器进程会频繁地从dictionary cache中访问数据字典

3.result cache

result cache是oracle 11g的新特征,它由SQL查询结果缓存和PL/SQL函数结果缓存组成。

1.1.4其他SGA组件

1.large pool

large pool 是SGA可选的内存结构,其尺寸有LARGE_POOL_SIZE确定。LARGE POOL用于为大内存操作提供相对独立的内存空间,从而提高这些大内存操作的性能。

大内存操作包括:

1)共享服务器

2)并行查询

3)I/O服务器进程

4)备份和转储操作

通过为共享服务器分配会话内存,已及为并行查询分配缓冲区,可以使得共享池主要用于共享SQL,从而避免缩减共享池所导致的性能开销。通过为备份转储操作以及I/O服务器进程分配内存,LARGE POOL可以比shared pool更好的满足大内存请求。

2.java pool

java pool主要用于存放java代码和数据,其尺寸由java_pool_size定义。如果要在oracle数据库中安装java VM,必须配置java pool,其尺寸应该大于20M。

3.streams pool

streams池用于存储缓冲区队列消息,并且专门为ORACLE streams的捕获进程和应用进程提供内存,尺寸由streams_pool_size定义。

1.1.5 PGA

PGA用于存放服务器进程和后台进程的数据和控制信息。

所有独立PGA的集合称为例程PGA,通过配置pga_aggregate_target,可以控制PGA的尺寸。

PGA由SESSION MEMORY 和 PRIVATE SQL AREA两部分组成。

1)session memory 用于存放会话变量、登录信息以及其他与会话相关的信息

2)private SQL area 包含绑定变量值、sql执行状态、sql工作区等信息,并且sql工作区存放着排序操作所产生的临时数据。

1.2 使用内存自动管理

自动内存管理师oracle 11g的新特征,它使得oracle可以根据性能学期自动调整SGA和PGA尺寸。为了使用自动内存管理,不仅需要配置memory_target而且应该将SGA_TARGET和PGA_AGGREGATE_TARGET设置为0.另外memory_max_target可以用于设置目标内存的最大尺寸。

当使用自动内存管理时,通过查询动态性能视图v$memory_target_advice,可以显示目标内存尺寸的建议信息。

select * from v$memory_target_advice;

4.3使用手工内存管理

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多