Oracle中的各个进程要完成某个特定的任务或一组任务,每个进程都会分配内部内存(PGA内存)来完成它的任务。
Oracle实例主要有3类进程:
A 服务器进程 server process
根据客户的请求来完成工作。专用/共享服务器,就是服务器进程B 后台进程 background process
随数据库而启动,完成各种维护任务,如将块写至磁盘、维护在线重做日志、清理异常中止的进程等。C 从属进程 slave process
类似于后台进程,不过它们要代表后台进程或服务器进程完成一些额外的工作。
A服务器进程
代表客户会话完成工作的进程。应用向数据库发送的SQL语句最后就要由这些进程接收并执行。
dedicated server连接
会在服务器上得到针对这个连接的一个专用进程。数据库连接与服务器上的一个进程之间存在一对一的映射。
shared server
多个会话可以共享一个服务器进程池,其中的进程由Oracle实例生成和管理。
你所连接的是一个数据库调度器(dispatcher),而不是特意为连接创建的一个专用服务器进程。
专用or共享 服务器进程的任务是一样的:要处理你提交的所有SQL。当你向数据库提交一个SELECT * FROM EMP查询时,会有一个Oracle专用/共享服务器进程解析这个查询,并把它放在共享池中(或者最好能发现这个查询已经在共享池中)。这个进程要提出查询计划,如果必要,还要执行这个查询计划,可能在缓冲区缓存中找到必要的数据,或者将数据从磁盘读入缓冲区缓存中。这些服务器进程是干重活的进程。在很多情况下,你都会发现这些进程占用的系统CPU时间最多,因为正是这些进程来执行排序、汇总、联结等等工作,几乎所有工作都是这些进程做的。
------------------------------------------------------------------------专用服务器
1.远程执行(remote execution):客户应用可能在另一台机器上执行(而不是数据库所在的机器)
2.地址空间隔离(address space isolation):服务器进程可以读写SGA。如果客户进程和服务器进程物理地链接在一起,客户进程中一个错误的指针就能轻松地破坏SGA中的数据结构。
可以在同一台机器上运行客户和服务器,就能很清楚地看出这种父/子进程的创建
scott@ORCL>select a.spid dedicated_server,
2 b.process clientpid
3 from v$process a, v$session b
4 where a.addr = b.paddr
5 and b.sid = (select sid from v$mystat where rownum=1)
6 /
DEDICATED_SERVER CLIENTPID
------------------------ ------------------------
5748 1408:3388
查询与专用服务器相关联的进程ID(PID),从V$PROCESS得到的SPID是执行该