1 概述 oracle sga区的监控和管理,是数据库日常维护的重要内容。本文详细介绍sga的基本概念,sga运行情况检查,以及sga的参
1 概述
oracle sga区的监控和管理,是数据库日常维护的重要内容。本文详细介绍sga的基本概念,sga运行情况检查,以及sga的参数设置原则,希望对大家的有所帮助。
2 sga的基本概念
当启动oracle数据库时,系统会先在内存内规划一个固定区域,用来储存用户需要的数据,以及oracle运行时必备的系统信息。我们称此区域为系统全局区(system global area),简称sga。
sga 包含数个重要区域,分别是:
■ database buffer cache (数据库缓冲区)
■ redo log buffer (重做日志缓冲区)
■ shared pool (共享区)
■ 其它,如java pool, large pool
2.1 database buffer cache (数据库缓冲区)
数据库缓冲区的作用主要是在内存中缓存从数据库中读取的数据块。数据库缓冲区越大,为用户已经在内存里的共享数据提供的内存就越大,这样可以减少所需要的磁盘物理读。
在9i以前数据库缓冲区的大小是由db_block_buffers*db_block_size 来决定大小的。db_block_size参数是在创建数据库时设置的,oltp系统的db_block_size一般设置为8k。
在9i中,数据库缓冲区的大小由db_cache_size决定,8i中的db_block_buffers被取消。db_cache_size的单位是字节,它直接决定了数据库缓冲区的大小,而不再是块的数量。
2.2 shared pool (共享区)
共享区由三部分组成,分别是dictionary cache(包括数据字典的定义,如表结构、权限等),library cache(包括共享的sql游标,sql原代码以及执行计划、存储过程和会话信息)和control structure。它的大小由初始化参数shared_pool_size控制,它的作用是缓存已经被解析过的sql,使其能被重用,不用再解析。sql的解析非常消耗cpu的资源,如果一条sql在shared pool中已经存在,则进行的仅是软解析(在shared pool中寻找相同sql),这将大大提高数据库的运行效率。当然,这部分内存也并非越大越好,太大的shared pool,oracle为了维护共享结构,将付出更大的管理开销。建议在150m-500m之间。如果系统内存为1g,该值可设为150m-200m;如果为2g,该值设为250m-300m;每增加1g内存,该值增加100m;但该值最大不应超过500m。
2.3 redo log buffer (重做日志缓冲区)
log_buffer是重做日志缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由lgwr 进程将它写入磁盘。lgwr的写入条件是:用户提交、有1/3 重做日志缓冲区未被写入磁盘、有大于1m 重做日志缓冲区未被写入磁盘、超时、dbwr需要写入的数据的scn 号大于lgwr 记录的scn 号,dbwr 触发lgwr写入。
从中可以看出,,大于1m的log buffer值意义并不大。重做日志缓冲区的大小由初始化参数log_buffer设定。