内存管理
数据库实例启动时,就需要分配共享内存,启动后台进程,如何分配和设置共享
内
存参数,对于
来说是非常重要的。不当的内存分配轻则影响性能,重则导致数据
库故
障,在生产实际中不容忽视。
数据库所使用的内存主要涉及两个方面:
和
。本章就
的内存
管理
问题进行探讨。
管理
指 的 是 程 序 全 局 区 (
) , 是 服 务 器 进程 (
)使用的
一块包含数据和控制信息的内存区域,
是非共享的内存,在服务器进程启动或创建
时分
配(在系统运行时,排序、连接等操作也可能需要进一步的
分配),并为
排他访问,所以
中的数据结构并不需要通过
来保护。
什么是
进程的创建通常有两种模式:专用服务器模式(
)及共享服务器模
式
(
)。在专用服务器模式下,
会为每个会话启动一个
进程;而在共享
服务器模式下,通常在服务器端启动一定数量的服务器进程,然后由多个客户端请求共享
同一
个
服务进程。通常数据库都应当运行在专用服务器模式下。
的内容依专用
模式和
共享服务器模式而有所不同,但是通常来说,
中包含私有
区
存放绑定信息、
运行时
内存结构等
、
信息等内容。
从内存分配与使用上
可以被区分为两个区域:
!
固定
(
"#
)
$
固定
和固定
类似,包含了大量原子变量、
小的
数据结构和指向可变
的指针,这些变量在源码中定义,在编译时分配,可以被
认为是
的保留内存。
!
可变
(
%
)
$
可变
通过具体的内存
&'
分配来实现,其
空间分
配与使用时可以变化的,通过内部视图
()*+
(
,*-,-,+-.
,-
,-
)可以查询可变
内存的分配和使用情况。
的可变区中主要包含会话
内存及私有
区等。
下图简要说明了
的创建过程,当客户端向服务器发送连接请求,服务器监听到客户
端请求,在专用服务器模式下,会在服务器端衍生一个
来代理用户的
请求,服
务器进程进而向 实例发起连接 ,创建会话(
/0121134
),而
就为
评论