我知道 SGA(包含一个 Oracle 数据库实例的数据和控制信息)代表系统全局区域,PGA(包含专门供 Oracle 进程使用的数据和控制信息)代表程序全局区域,但是,我不知道真正理解变量对数据库的作用。如果 SGA 配置为比 PGA 大 10 倍,那么在检索数据时会有什么帮助?
SGA 是服务器上的一个内存结构,包含用于保存代码、SQL、类、游标等的池以及用于保存数据的缓存。因此,当客户端向服务器发送查询时,代码和数据位于 SGA 中,由服务器上的 RDBMS 进行处理。
PGA是用户服务器进程的共享内存区域,用于临时存储和工作区域。Oracle 使用 PGA 和临时表空间来获取传递回客户端的结果集,然后释放会话的 PGA。
两者之间没有任何比例。SGA 的大小根据发送到服务器的代码和数据量而定,PGA 的大小根据活动进程的数量而动态变化。如果有数千个进程,PGA 很容易就会是 SGA 的两倍。不过,SGA 的大小是非常仔细的;出于性能原因,使其更大并不一定会变得更好。
还有一个UGA(用户全局区域),它是每个客户端(非服务器)进程的内存区域。