首页 > Linux操作系统 > Linux操作系统 > 1.oracle体系结构(笔记)
1.oracle体系结构
Oracle server由例程(instance)和数据库(database)两部分组成。
例程(instance)是一组内存结构和后台进程的集会,其内存结构主要包括数据高速缓存,重做日志缓冲区和共享池3部分,这些内存结构总称为SGA(System Global Area);
后台进程主要包括SMON,PMON,DBWR,CKPT,LGWR,ARCH等。
数据库是一组OS文件的集会,它由数据文件,控制文件和重做日志组成,
SGA(System Global Area)是一组内存结构组成,它是由所有用户进程共享的一块内存区域。启动例程时,Oracle自动分配SGA;关闭例程时,Oracle自动释放SGA所占用的内存空间。
SGA主要包括共享池(Shared Pool),数据高速缓存(database buffer chche)和重做日志缓冲区(redo log buffer)3个部分。
共享池(shared pool)用于存放最近执行的SQL语句和数据字典信息,其尺寸由初始化参数SHARED_POOL_SIZE定义。共享池由库高速缓冲(Library Cache)和数据字典高速缓存(Dictionary Cache)两部分组成。
库高速缓存(Library Cache)库高速缓存由用于存放最近执行的SQL语句信息,包括SQL语句文本,解析代码值及其执行计划。库高速缓冲包含许多上下文区(Contest Area),每个上下文区都包含相应的SQL语句的执行计划,这些上下文区又被称为共享游标。当客户端运行SQL语句时,服务器进程首先检查共享游标是否存在,若存在则按照其执行计划直接执行语句,若不存在则生成SQL语句执行计划,并将计划存放到相应的上下文区中,然后执行改SQL语句。通过共享游标,可以最小化SQL语句解析次数,从而提高SQL语句的执行性能。
数据字典高速缓存(Dictionary Cache)用于存放数据字典的信息,包括表,列的定义以及权限信息。库高速缓存和数据字典高速缓存的尺寸是动态变化的,不是固定的!
数据高速缓存(Database buffer cache)用于存放最近访问的数据块信息,它由许多小缓冲区(缓存区尺寸=数据块尺寸)组成。在 Oracle Database 10g中,使用初始化参数DB_CACHE_SIZE和DB_Nk_CACHE_SIZE(n:2,4,8,16或32)来定义数据高速缓存的尺寸。按照缓冲区使用的情况,可以将其划分为脏缓冲区(Dirty Buffer),空闲缓冲区(free buffer),忙缓冲区(pinned buffer)三种。脏缓冲区是指内容和相应的数据块不一致的缓冲区,当执行DML操作是,服务器进程会修改缓冲区数据,此时缓冲区和数据块内容不一致。空闲缓冲区是指内容与数据块一致或不包含数据的缓冲区,当执行SELECT操作是,缓冲区与数据块内容一致。忙缓冲区是指服务器进程正在存取缓存区。
重做日志缓冲区(redo log buffer)用于记载例程变化,其尺寸由初始化参数LOG_BUFFER定义。当执行DDL或DML语句时,服务器进程首先将事务变化记载到重做日志缓冲区,然后才会修改数据高速缓存。重做日志缓冲区由许多重做记录(redo record)组成,并且每条重做记录记载了被修改数据块的位置以及变化后的数据。
大缓存池和java池
SGA除了包含共享池,数据高速缓存和重做日志缓冲区之外,还提供了两个可选的内存结构:大缓冲池(large pool)和java池(java pool)。
大缓冲池用于为大内存操作提供相对独立的内存空间。通过分配大缓冲池,可以提高这些大内存操作的性能。一下情况应分配大缓冲池:
使用共享服务器
使用RMAN在磁带设备商执行备份,转储和恢复操作。
执行并行查询
使用I/O Slaves提高I/O性能(如配置初始化参数dbwr_io_slaves)
Java池用于存放java代码,其尺寸由初始化参数JAVA_POOL_SIZE定义。如果要在oracle数据库中安装java VM,必须配置java池,并且其尺寸应该大于20M。
PGA(Program Global Area)用于存放服务器进程的数据和控制信息,它时独立于SGA的一块内存区域。当用户进程连接到Oracel Server
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/312079/viewspace-245212/ ,如需转载,请注明出处,否则将追究法律责任。