首页 > Linux操作系统 > Linux操作系统 > Oracle内存结构
PGA(process global area):可能包含UGA,其他去用于完成内存中的排序、位图合并以及散列。
UGA(user global area):共享服务器,在SGA中分配;专用服务器,在PGA中分配。
从9i起,有两种办法来管理PGA中的非UGA内存:
手动PGA内存管理:告诉oracle对一个特定进程,需要多少内存来完成排序或散列。手动设置参数SORT_AREA_SIZE, SORT_AREA_RETAINED_SIZE, HASH_AREA_SIZE。
自动PGA内存管理:告诉oracle在系统范围内可以使用多少内存。根据工作负载动态地调整实际使用的内存量。一方面尽可能充分地使用内存,另一方面不要超额使用物理上不存在的内存。
WORKAREA_SIZE_POLICY=AUTO, PGA_AGGREGATER_TARGET>0
SGA:可以用视图V$SGASTAT来查看各个pool分配的内存。SGA分为:
Java pool
Large pool: 共享服务器连接中的UGA在其中分配;rman backup
Shared pool: cursor, stored procedure, data dictionary, and etc
Stream pool
“Null” pool: data block buffer, redo log buffer, 固定SGA(SGA的“自启”区,oracle在内部要使用这个区来找到sga的其他区)
自动SGA内存管理:设置SGA_TARGET
Redo log buffer: show parameter log_buffer
LGWR在以下情况启动对这个区的刷新输出:
1. 每3秒
2. commit
3. 切换日志文件
4. 重做缓冲区1/3满,或者大于1MB
Block buffer cache:频繁使用的块会被缓存,不常使用的块不会缓存太久。
Shared pool: 缓存一些程序数据,比如运行的pl/sql代码,系统参数、数据字典缓存,解析后的sql语句。
设计共享池是为了反复使用查询计划。
Large pool:用于大块内存的分配。共享池根据LRU来管理内存,这对于缓存和重用数据很合适。不过,大块内存分配则是得到一块内存后加以使用,然后就到此为止,没有必要缓存这个内存。
主要用于:
1. 共享服务器连接,用于在SGA中分配UGA
2. 语句的并行执行
3. RMAN backup
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11903161/viewspace-684491/ ,如需转载,请注明出处,否则将追究法律责任。