Oracle内存结构,oracle结构
Oracle的内存结构分为SGA和PGA,对于SGA是动态分配的,通过参数sga_max_size进行配置,在oracle数据库实例启动的时候就已经分配好,对于所有的会话连接共享一个SGA;对于PGA则是每个用户的会话连接创建一个自己的PAG的内存区域。
Shared Pool:存放最近执行过的sql语句的执行结构(执行计划)已经数据定义(数据字典).主要组成分为library cache,data dictionary cache。其中大小的决定参数是shared_pool_size。
对于library cache主要是存放shared sql area 和 shared pl/sql area 这两个区域块
对于 data dictionary cache 主要是用于存放数据系统,系统的动态性能视图和系统表
对于SGA的重头戏 database buffer cache 主要是用来存放data数据文件的数据块,把硬盘中的数据读取直接存放到内存中,提高数据的操作速度。对于用户对数据的操作,首先是找database buffer cache中的数据,如果可以找到就直接返回数据,不再从硬盘中找,提高数据响应速度。反应数据库性能的一个重要指标就是database buffer cache的命中率.其中主要的参数有:db_keep_cache_size,db_cache_size,db_recycle_cache_size
Redo log buffer:是数据文件redo log的缓存,如果需要恢复数据,读取redo log 文件的话,会先从 redo log buffer 里面读取数据库的操作记录。对于数据库的操作记录也是先写入到redo log buffer,然后在存储到 数据文件 redo log files 中
Larger pool: Rman备份的时候会使用larger pool 进行数据的缓存,某些server procees 的I/O操作也是需要使用larger pool 进行数据的缓存。
Java pool: 大小决定于参数java_pool_size,对于oracle中使用java语言写的方法在执行的时候就是使用java pool这个存储区域。该缓存区域主要是用于java的相关操作。
内存是影响数据库性能的重要因素,Oracle8i使用静态内存管理,Oracle 10g使用动态
内存管理。所谓静态内存管理,就是在数据库系统中,无论是否有用户连接,也无论并发用
量大小,只要数据库服务在运行,就会分配固定大小的内存;动态内存管理允许在数据库服
务运行时对内存的大小进行修改,读取大数据块时使用大内存,小数据块时使用小内存,读
取标准内存块时使用标准内存设置。
按照系统对内存使用方法的不同,Oracle数据库的内存可以分为以下几个部分:
??系统全局区:SGA(System Global Area)
??程序全局区:PGA(Programe Global Area)
??排序池:(Sort Area)
??大池:(Large Pool)
??Java池:(Java Pool)
1:Oracle实例(Instance)
在一个服务器中,每一个运行的Oracle数据库都与一个数据库实例相联系,实例是我们
访问数据库的手段。
实例在操作系统中用ORACLE_SID来标识,在Oracle中用参数INSTANCE_NAME来标识,
它们两个的值是相同的。数据库启动时,系统首先在服务器内存中分配系统全局区(SGA),
构成了Oracle的内存结构,然后启动若干个常驻内存的操作系统进程,即组成了Oracle的
进程结构,内存区域和后台进程合称为一个Oracle实例。
数据库与实例之间是1对1/n的关系,在非并行的数据库系统中每个Oracle数据库与一个
实例相对应;在并行的数据库系统中,一个数据库会对应多个实例,同一时间用户只与一个
实例相联系,当某一个实例出现故障时,其他实例自动服务,保证数据库正常运行。在任何
情况下,每个实例都只可以对应一个数据库。
2:Oracle 10g动态内存管理
内存是影响数据库性能的重要因素,Oracle8i使用静态内存管理,Oracle 10g使用动态
内存管理。所谓静态内存管理,就是在数据库系统中,无论是否有用户连接,也无论并发用
量大小,只要数据库服务在运行,就会分配固定大小的内存;动态内存管理允许在数据库服
务运行时对内存的大小进行修改,读取大数据块时使用大内存,小数据块时使用小内存,读
取标准内存块时使用标准内存设置。
按照系统对内存使用方法的不同,Oracle数据库的内存可以分为以下几个部分:
•系统全局区:SGA(System Global Area)
•程序全局区:PGA(Programe Global Area)
•排序池:(Sort Area)
•大池:(Large Pool)
•Java池:(Java Pool)
2-1:系统全局区SGA(System Global Area)
SGA是一组为系统分配的共享的内存结构,可以包含一个数据库实例的数据或控制信
息。如果多个用户连接到同一个数据库实例,在实例的SGA中,数据可以被多个用户共享。
当数据库实例启动时,SGA的内存被自动分配;当数据库实例关闭时,SGA内存被回收。
SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。
SGA的有关信息可以通过下面的语句查询,sga_max_size的大小是不可以动态调整的。
=====================================
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- --------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 164M
sga_target big integer 0
......余下全文>>