oracle内存管理2011-07-14 22:36:29| 分类: oracle管理 备份 |字号 订阅 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使用手工内存管理 |
|