甲骨文之内存结构(SGA, PGA)

  


一、内存结构
Oracle之内存结构(SGA、PGA)
SGA(System Global Area):由所有服务进程和后台进程共享;
PGA(Program Global Area):由每个服务进程、后台进程专有;每个进程都有一个PGA。


二、SGA
包含实例的数据和控制信息,包含如下内存结构:
1)Database buffer cache:缓存了从磁盘上检索的数据块。
2)Redo log buffer:缓存了写到磁盘之前的重做信息。
3)Shared pool:缓存了各用户间可共享的各种结构。
4)Large pool:一个可选的区域,用来缓存大的I/O请求,以支持并行查询、共享服务器模式以及某些备份操作。
5)Java pool:保存java虚拟机中特定会话的数据与java代码。
6)Streams pool:由Oracle streams使用。
7)Keep buffer cache:保存buffer cache中存储的数据,使其尽时间可能长。
8)Recycle buffer cache:保存buffer cache中即将过期的数据。
9)nK block size buffer:为与数据库默认数据块大小不同的数据块提供缓存。用来支持表空间传输。

database buffer cache, shared pool, large pool, streams pool与Java pool根据当前数据库状态,自动调整;
keep buffer cache,recycle buffer cache,nK block size buffer可以在不关闭实例情况下,动态修改。


三、PGA
每个服务进程私有的内存区域,包含如下结构:
1)Private SQL area:包含绑定信息、运行时的内存结构。每个发出sql语句的会话,都有一个private SQL area(私有SQL区)
2)Session memory:为保存会话中的变量以及其他与会话相关的信息,而分配的内存区。


四、SGA COMPONENT
(一)、Buffer Cache
1、DB_CACHE_SIZE
    通过参数DB_CACHE_SIZE可指定DB buffer cache的大小
    ALTER SYSTEM SET DB_CACHE_SIZE=20M scope=both;
    服务进程从数据文件读数据到buffer cache;DBWn从buffer cache写数据到数据文件。
    buffer cache的四种状态:
        1)pinned:当前块正在读到cache或正写到磁盘,其他会话等待访问该块。
        2)clean:
        3)free/unused:buffer内为空,为实例刚启动时的状态。
        4)dirty:脏数据,数据块被修改,需要被DBWn刷新到磁盘,才能执行过期处理。

同一个数据库中,支持多种大小的数据块缓存。通过DB_nK_CACHE_SIZE参数指定,如
    • DB_2K_CACHE_SIZE
& # 8226;DB_4K_CACHE_SIZE
& # 8226;DB_8K_CACHE_SIZE
& # 8226;DB_16K_CACHE_SIZE
& # 8226;DB_32K_CACHE_SIZE
标准块缓存区大小由DB_CACHE_SIZE指定。如标准块为nK,则不能通过DB_nK_CACHE_SIZE来指定标准块缓存区的大小,应由DB_CACHE_SIZE指定。
例,标准块为8 k,则数据库可以设置的块缓存大小的参数如下:
& # 8226;DB_CACHE_SIZE(指定标准块(这里为8 k)的缓存区)
& # 8226;DB_2K_CACHE_SIZE(指定块大小为2 k的缓存区)
& # 8226;DB_4K_CACHE_SIZE(指定块大小为4 k的缓存区)
& # 8226;DB_16K_CACHE_SIZE(指定块大小为16 k的缓存区)
& # 8226;DB_32K_CACHE_SIZE(指定块大小为32 k的缓存区)

2,多种缓冲池(缓冲池)
1)保持:通过db_keep_cache_size参数指定。
该缓冲区内的数据可能被重用,以降低I/O操作。该池的大小要大于指定到该池的段的总和。
读入到保持缓冲的块不需要过期操作。
2)回收:通过db_recycle_cache_size参数指定。
该池中的数据被重用机会较小,该池大小要小于分配到该池的段的总和。读入该池的块需要经常执行过期处理。
3)默认值:相当于一个没有保持与回收池的实例的缓冲区缓存,通过db_cache_size参数指定。

3,为对象明确指定缓冲池
buffer_pool子句,用来为对象指定默认的缓冲池,是存储子句的一部分。
对创造与alter table,集群,指数语句有效。
如果现有对象没有明确指定缓冲池,则默认都指定为默认的缓冲池,大小为db_cache_size参数设置的值。
语法:
。创建索引cust_idx alt="甲骨文之内存结构(SGA、PGA) ">
1)大量大小通过LARGE_POOL_SIZE参数指定:
完成改变系统设置large_pool_size=20米范围=,
2)作用:
。为I/O服务进程分配内存
b。为备份与恢复操作分配内存
c。为Oracle共享服务器模式与多个数据库间的联机事务分配内存。
通过从大池中为共享服务器模式分配会话内存,可以减少共享池因频繁为大对象分配和回收内存而产生的碎片。将大的对象从共享池中分离出来,可以提高共享池的使用效率,使其可以为新的请求提供服务或者根据需要保留现有的数据。

甲骨文之内存结构(SGA, PGA)