1.大池
大池的一个主要用途是供共享的服务器使用。在缺少大池的情况下,这些进程将使用共享池中的内存,这会导致对共享池的恶性争用。如果使用的是共享服务器或并行服务器,那么始终应该创建大池,有些I/O进程也使用大池,如Recovery Manager在备份到磁带设备时使用的进程就是如此。
设置大池的大小与性能无关。如果某个进程需要大内存池,而内存不够用,则此进程将失败,并发生错误。如果分配的内存量超过需要,语句的运行速度并不会因此加快。另外,如果存在大池,将使用大池,则不可能出现这样的情况:某条语句开始时使用大池,后来又因为大池过小而恢复使用共享池。
2.JAVA池
只有当应用程序需要在数据库中运行Java存储过程时,才需要Java池:此池用作实例化Java对象所需的堆空间。但是,有很多Oracle选项是用Java编写的,因此,现在将Java池视为标准。注意,Java代码不在java池中缓存:Java代码在共享池中缓存,与PL/SQL代码的缓存方式相同。
Java池的最佳大小与Java应用程序相关,也与运行其的会话数量有关。每个会话都需要用于其对象的堆空间。如果Java池不够大,那么,由于需要不断的回收空间,性能会因此降低。在EJB(Enterprise JavaBean,企业JavaBean)应用程序中,诸如无状态会话Bean的对象可能被初始化和使用,如果还需要它,就会将其保留在内存中:这样的对象可以立即重用。但是,如果Oracle服务器已经销毁此Bean,以便为其他Bean腾出空间,那么,下次需要时,将不得不进行重新实例化。如果Java池非常小,则应用程序将失败。
3.流池
流池供oracle流使用。流使用的机制是:从重做日志提取变更向量,并使用这些重新构造执行的语句,或具有相同效果的语句。这些语句在远程数据库执行。从重做日志提取更改的进程以及应用更改的进程将用到内存:此内存就是流池