数据库服务器使用内存池跟踪类型和大小类似的内存分配。在池中保留相关的内存分配将减少内存分段存储。它还使数据库服务器能够一次释放大块的内存,与释放组成池的每个块相对。
所有的会话都有一个或多个内存池。当数据库服务器需要内存时,它会先查看指定的池。如果池中可用的内存不足以满足请求,那么数据库服务器将从系统池添加内存。如果数据库服务器不能在系统池中找到足够的内存,那么它会动态地给虚拟部分分配更多的段。
数据库服务器通过已链接的列表跟踪可用空间的池,为自己的每个子系统(会话池、堆栈、堆、控制块、系统目录、SPL 例程高速缓存、SQL 语句高速缓存、排序池和消息缓冲区)分配虚拟共享内存。当数据库服务器分配内存的部分时,它将首先在池的可用列表中搜索大小足够的段。如果服务器未找到段,那么会将新的块从虚拟部分带入池中。如果释放了内存,那么被释放内存将作为可用段返回到池中并留在其中,直到池被删除。 例如,当数据库服务器启动了客户机应用程序会话时,它将为会话池分配内存。当会话终止时,数据库服务器会将已分配的内存作为可用段返回。