【体系结构】07.大池(Large Pool)

大池是数据库管理员可以配置的可选内存区域,可以为以下各项提供大内存分配:
-
- 用户全局区域 (UGA):共享服务器和Oracle XA接口的会话内存(用于事务与多个数据库交互)
- I/O 缓冲区 (I/O Buffer Area):I/O服务器进程,并行查询操作中使⽤的消息缓冲区,Recovery Manager (RMAN) I/O从属进程的缓冲区,以及存储高级排队内存表。
- 延迟插入池 (Deferred Inserts Pool):
快速提取功能可将数据库中定义为MEMOPTIMIZE FOR WRITE的表进行高频单行数据插⼊。快速摄取的插⼊物也称 为延迟插⼊物。它们初在大缓冲池中缓冲,然后在每个对象每个会话每次写入1MB或60秒后由空间管理协调器 (SMCO) 和Wxxx从属后台进程异步写入磁盘。在SMCO后台进程进行扫描之前,任何会话(包括写入的会话)都⽆法读取该缓冲池中缓冲的任⼀数据,即使已提交的会话。该池在大型池中被初始化是在第⼀行数据 插⼊memoptimized 表时进行。当有足够的空间时,将从大型池中分配2G。如果⼤型池中没有足够的空间,则会在内部发现并⾃动清除ORA-4031,然后使用一半的 请求内存大小重试分配。如果⼤型池中仍然没有⾜够的空间,则使⽤512M和256M 重试分配,然后禁⽤该功能,直到重新启动实例。初始化池后,大小将保持不变。它不能增长或收缩。
- 可用内存
⼤型池与共享池中的保留空间不同,共享池中的保留空间与从共享池分配的其他 内存使⽤相同的近少使用(LRU) 列表。⼤池没有LRU列表。内存已分配,在使⽤完之前⽆法释放。
来⾃⽤户的请求是单个API调⽤,属于⽤户的SQL语句。在专用服务器环境中,⼀个服务器进程处理单个客户端进程的请求。每个服务器进程都使⽤系统资源,包括CPU周期和内存。在共享服务器环境中,将发生以下操作:
- 客户端应用程序向数据库实例发送请求,并且分派进程接收该请求。
- 分派进程将请求放在大池中的请求队列上。
- 下⼀个可⽤的共享服务器进程将处理该请求。共享服务器进程检查公共请求 队列中是否有新请求,并以先进先出的方式接收新请求。⼀个共享服务器进 程在队列中接收⼀个请求。
- 共享服务器进程对数据库进行所有必要的调⽤以完成请求。⾸先,共享服务器进程访问共享池中的库缓存以验证请求的项目;例如,它检查表是否存在,用户是否具有正确的特权等等。接下来,共享服务器进程访问缓冲区⾼速缓存以检索数据。如果数据不存在,则共享服务器进程将访问磁盘。不同的共享服务器进程可以处理每个数据库调⽤。因此,解析查询,获取第⼀行,获取下一行以及关闭结果集的请求可能分别由不同的共享服务器进程处理。由于不同的共享服务器进程可能会处理每个数据库调⽤,因此⽤户全局区域 (UGA) 必须是共享内存区域,因为UGA包含有关每个客户端会话的信 息。反过来说,UGA包含有关每个客户端会话的信息,并且必须对所有共享服务器进程可⽤,因为任何共享服务器进程都可以处理任何会话的数据库调用。
- 请求完成后,共享服务器进程将响应放置在⼤型池中的呼叫分派进程的响应队列上。每个分派进程都有⾃⼰的响应队列。
- 响应队列将响应发送到分派进程。
- 分派进程将完成的请求返回到适当的客户端应用程序。

浙公网安备 33010602011771号