DBMS的进程结构和多线索机制

本文介绍了数据库管理系统(DBMS)的四种进程组织方案:N方案、2N方案、N+1方案和N+M方案,以及多线索DBMS的概念。详细探讨了每种方案的特点、优缺点及其适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实际应用中,DBMS以及应用程序都必须进入某个具体的操作系统环境。应用程序通过DBMSDBMS通过OS,与数据库中的数据打交道。根据三者的关系,一般有下述四种进程组织方案。

 

 DBMS的进程结构

一、N方案:DBMS与应用程序相融合的方案

在这种方案中,NDB用户仅需N个进程,DBMS作为应用程序的子程序被连入应用程序中,成为应用程序的一部分,因此这种方案也被称为连入式方案。

112342_L1pX_129126.png

作为一种子程序技术,N方案对内存的需求量比较大。因为用户与DBMS功能的融合使得DBMS的代码段无法共享,导致内存中保留了DBMS代码的许多副本。随着DBMS功能的日兴增强,DBMS代码会不断扩大,N方案造成的代码冗余会使系统性能下降,甚至达到令人无法忍受的程度。

N方案DBMS实现起来比较简单,不用考虑用户进程与DBMS进程间的通信,因此在用户数少的小型DBMS中可以采用此方法。

解决N方案DBMS代码冗余的办法是将图1中的APi与其DBMS副本分开,让DBMS的代码段在内存中被共享,这就引出下面的方案。

二、2N方案:一个DBMS进程对应一个用户进程

每个用户进程均有一个DBMS进程为之服务,称这种DBMS进程为影子进程。在这种方案中,有N个用户进程就要启动NDBMS进程(共2N个进程),因此这种进程结构方案称为2N方案。

在这种情况下,数据库系统的各个活跃进程都是独立运行的,因此用户进程与Shadow进程之间以及各Shadow进程之间都要通信。

系统的全局管理数据驻留在SGA中,各DBMS进程靠操作系统提供的封锁原语(信号量)实现同步或实现对SGA的互斥访问。因此DBMS的这种进程组织方式使进程间总的通信开销上升很多。

2N结构的方案中,操作系统的负担增大了,主要表现在空间和时间两个方面。在空间上,虽然各个DBMS进程的代码段(如UNIX中的正文段)可以共享,但数据段和栈段的空间还是各自的,再加上OS要为多出的NShadow进程分配进程控制块(PCB)等诸多内部空间,因此2N结构对内存的需要量亦是很多。这极易使内存页面状况变坏,并可能因物理内存远远小于各进程虚空间之和而导致进程被操作系统频繁换入换出,使系统出现颠簸。在时间方面,由于2N方案进程数目过多,许多CPU时间会白白浪费在进程切换这种昂贵的工作上。颠簸及进程切换的高额开销使系统性能严重下降。

2N方案中增加一个用户所需要的资源很大,通常增加现三个用户就需要1MB内存量,再加上操作系统所支持的进程总数有限,导致2N方案不可能支持很多的DBMS用户,因此它不大适合大量用户的OLTP应用。

除了每个用户进程需要一个DBMS服务进程外,DBMS全局上还要维护若干个后台服务进程。由这些后台进程通过SGA完成诸如监控、写数据库、预读、写日志、淘汰页面、死锁检测和解除等全局工作。使用后台进程大大增加了进程间通信的开销,而频繁的进程通信意味着频繁的进程切换。少数几个后台进程还可能成为整个系统的瓶颈。

此外,2N方案至少还会碰到数据不在内存时所造成的性能问题和临界区问题,这里就不再详细讨论了。

把多个DBMS进程合为一个DBMS进程可以有效解决上述问题,这就是N+1方案。与N+1方案相比 ,2N方案的最大优势是它省掉了DBMS对各数据用户的多任务调度,而把这个任务交给了操作系统,从而简化了用户进程与DBMS的接口。

Oracle 7之前的版本、IngresInformix的早期版本使用2N方案(最早的INGRES采用4N方案:每个用户进程有3个分别完成不同任务的DBMS进程为之服务)。

112438_ZGBr_129126.png

三、N+1方案:一个DBMS进程对应所有用户进程

进程结构的另一种组织方式是整个DBMS仅使用一个进程,该进程的行为类似于一个服务器。多个数据库用户向Server发消息,以申请数据库服务。Server要用自己的机制来调度这些申请,以支持一个多任务的数据库系统。由于N个用户仅需要一个DBMS进程,因此称这种进程结构方案为N+1方案,这时SGA已不需要了。

112516_hNBF_129126.png

由于要设计自己的多任务处理机制和调度算法,使得N+1方案的DBMS设计在整体上比2N方案要复杂。Server要处理所有用户的申请,如果调度策略不当或不能使数据库进程获得较高的优先权,这种方案将导致瓶颈。

另外,N+1方案中要用操作系统级的消息机制以实现多进程向单进程以及单进程向多进程的数据传送。许多文献指出消息系统是一种昂贵的设施,大多数操作系统中消息往返一次的开销是几千条指令。

这种方案的另一个优点是可以采用多线索技术来实现N+1方案,从而可以大大提高系统性能,降低系统资源的开销,简化DBMS许多部分的设计。线索机制可以使得N+1方案能用统一的“线索”思想处理所有的执行流,其中包括DBMS核心的执行流,这将省去所有的后台进程并能适应系统软件设计与开发的微内核要求,使DBMS的核心代码简明精巧,易于移植。

四、N+M方案:MDBMS进程对应N个用户进程

N+M方案采用MDBMS进程为N个用户进程提供服务(一般M<N.

在该方案中,DBMS进程不负责多任务调度,同时每个用户进程也不固定对应某个DBMS进程。用户的数据库请求将会被动态的分配给某个DBMS来处理。

DBMS进程的分派由分派程序完成。分派程序可以是一个单独的后台进程,也可以将其代码连入用户进程(APi)中。分派程序通过SGA管理用户的数据库请求队列,并分配某个DBMS进程服务于某个用户进程。分派程序还应监测整个DBMS的运行状况并根据用户请求队列的情况动态增减DBMS进程的个数。如果用户增加,则DBMS进程的个数也动太增加,但后者一般总小于前者(即M<N)。

N+M方案基于的指导思想是:用户进程可能并不总是同时提出数据库请求以,一个用户一个DBMS进程方案太浪费,几个用户轮流使用一个DBMS服务进程也许会节约一些。

N+M方案是2N方案的一种改进,提高了内存资源的利用率,但它没有克服2N方案的本质弱点。此外,分派程序给系统增加了开销并有可能成为系统的瓶颈,而且DBMS动态增减的开销亦很大。

112548_EKPz_129126.png

多线索DBMS的概念

一、线程的概念

数据库中的线程的概念源于操作系统中线程的概念。

随着多处理器系统以及并行计算技术的发展,进程概念进一步划分为任务与线程的概念。

UNIX核心中的最关键的概念就是进程。进程既是资源分配的最小单位也是运行的最小单位。与一个进程相联系的资源有:进程虚拟空间、进程控制块、数据段、正文段、堆栈段、共享内存、程序计数器、状态寄存器以及通用寄存器等。进程建立及切换的开销很大,核心维护每一个进程的虚拟空间开销很大。进程概念在处理微粒度问题时显得很吃力。出于以上考虑,1988年卡内基-梅隆大学在其研制的多机操作系统MACH中实现了TaskThread

他们将进程的概念一分二:Task是申请资源的最小单位,而Thread是调度和运行的最小单位。一个Task中可有多个Thread,这些Thread共享Task所有资源,共同完成一个任务。一个Thread只能存在于某个Task中。在多处理机上,这些Thread可真正的并行执行。UNIX中进程的概念相当于MACH中的只包含一个ThreadTask

由于多个线程运行于同一实体中并且共享该实体的所有资源,使得传统UNIX中属于某一任务的多个进程以线程的方式并行执行时效率大大提高。

可见,线程的基本概念就是将进程中的程序代码与进程所占资源相分离,从而可以在一个地址空间运行多个指令流。

二、多线索DBMS

数据库系统中的线索概念借鉴了操作系统中线程的含义:整个DBMS可以看作是一个Task,当有一个用户申请数据库服务时,Task分配至少一个Thread为之服务,多个Thread并行工作,共享资源。

一般地讲,DBMS中线索是DBMS的一个执行流,它服务于整个DBMS系统中的某个用户;DBMS服务器响应客户请求是通过为每个用户创建线索来完成的。DBMS的各个线索能在逻辑上并行执行;它们共存在一个进程中,共享DBMS的资源,如数据库缓冲区和CPU时间;线索是DBMS的调度单位,服务器进程能按一定的调度算法调度用户请求,由于调度优化策略是数据库服务器执行,因此会比操作系统直接对这些请求高度高效得多。

多线索机制可以减少每个用户需要的系统资源,如内存要求,从而可以增加并发用户数,提高服务器的运行效率,更好的支持OLTP应用。

三、线索与进程的比较

1.线索比进程占用较少的资源

进程是程序的动态概念,指正在执行的程序。进程有其自身的程序地址空间,除正文段以外,进程间一般共享彼此资源。线索则是程序中的一串指令流,同一进程内的多个线索共享该进程内的一切资源。因此,线索比进程占用更少的系统资源,是更小的调度单位,可支持细粒度的并行。

2.线索的调度比较灵活,可控制性强

线索的调度方式比较灵活,可以实现智能化的高度,提高并行效率。

进程调度由操作系统控制,DBMS无权干涉,而且进程的调度是非智能的,特定的进程会被频繁挂起。例如,假定一个进程要反复读取数据、处理数据并回写数据,该进程会因等待I/O而被频繁挂起,效率很低。如果将该进程划分为读、处理、写3个线索,当其中某个线索被阻塞,其它线索可以调度运行,效率就会提高。而且,通过合理高度一个进程内的金条并发线索,而使该进程长久的占用CPU。无论是单处理机还是多处理机,多线索结构均能提高执行效率。

3.线索切换开销较小

就进程切换而言,由于进程的地址空间是私有的,因此进程切换必须保持进程的正文、数据、栈段及地址映射、进程状态、寄存器值等系统信息,一般需要花费数千条机器指令;而线索由于共享同一地址空间,因此当切换同一进程内的不同线索时,只需保持线索状态、寄存器值等,由于切换较少的信息,线索切换的代码量明显减少,一般需要数十条指令。

4.线索间通信方便

UNIX操作系统将进程的地址空间相隔离是为了避免并发进程间的相互干扰,以后为了支持进程间通信又先后引入管道、通道、新IPC机制等通信手段,这些通信机制或者编程麻烦、不易使用,或者有一定的局限性、效率不高。同一进程内线索由于共享地址空间,因而可以借助全局变量名的指针来进行通信,这种通信简单直接。不过,由于线索间可以互访数据,因此在利用线索编程就注意保持数据的一致性和完整性。

转载于:https://my.oschina.net/u/129126/blog/232889

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值