重做日志缓存区
用户每一次对数据的修改均会在重做日志缓存区生成一条相关记录。重做日志缓存区是一个循环缓存区,依次记录用户修改操作的重做条目。LGWR将redolog buffer缓存区中的重做条目缓存到数据库中的redolog file中。redolog文件对于维护数据库的数据的完整性十分重要,在数据库实例每次启动时都会去检查是否需要通过redolog文件中记录的数据,对数据文件进行恢复和回滚操作。由于redolog文件中数据的分布式顺序不想数据文件中的数据分布是离散的,所以LGWR数据的同步速度比DBWn要快得多。一旦数数据被同步到了redolog文件中则可以认为对数据的该操作已经永久保存。
触发同步条件如下:
1.每隔3秒一次
2.有提交请求
3.LGWR切换日志
4.重做去满了1/3或者缓存的数据超过了1M
Redo Log Buffer的大小由初始化参数LOG_BUFFER定义,该参数的缺省值为Max(512KB,128KB*CPU_COUNT)。通常这一缺省值是足够的。
共享池
共享池缓存各类型的程序数据,如执行计划,已解析的sql,系统参数和数据字典等信息。结构如下图所示:
Library cache:
用户在执行一条sql语句以后往往会在share sql area中会对这个条sql语句进行缓存。当用户再次执行sql语句是,oracle会去这个共享区域检索。如果存在已经解析的sql语句,将会利用已经解析的结果,避免硬解析来提升性能。通过v$sql可以查询缓存的sql,v$sql_plan缓存着对应的执行计划。
出现以下情况时会使library中缓存的sql信息无效:
1.为表,簇,索引等重新进行信息统计,这将会使sql区中的信息重新生成以反映相关的统计信息
2.使用DDL语句修改了表结构信息
3.更改了全局数据库名称。
4.使用alter system flush share_pool
Data dictitionary:
数据字典是表和视图元数据的集合,其中包含有关数据库结构以及其结构,用户等参考信息。oracle解析sql语句期间将会频繁访问该区域。
Result cache:
结果缓存区分为sql查询结果过缓存和pl/sql函数缓存。
sql查询结果过缓存缓存的sql执行的查询结果,当下次再次执行时该查询是将会直接从结果缓存区中将查询结果返回。当然如果缓存的数据和表中的数据不一致即表中的数据被修改时,将会自动是缓存的结果失效然后重新缓存结果数据。由RESULT_CACHE_MODE来控制是将所有的查询结果记性缓存还是只缓存添加了RESULT_CACHE注释的缓存。
pl/sql函数结果缓存缓存每一次函数执行的结果,避免对相同入参产生相同结果函数进行再次调用。
流池
存储缓冲的队列信息,并为oracle的流捕获进程和应用进程提供内存。
固定SGA
oracle用管理内部事务信息的内存区域。包括数据库以及实例的状态信息,进程间的通讯信息。如锁等。