oracle数据库:Oracle进程_笔记1
Oracle进程
Oracle中的各个进程要完成某个特定的任务或一组任务,每个进程都会分配内部内存(PGA内存)来完成它的任务。Oracle实例主要有3类进程。
.服务器进程(server process):这些进程根据客户的请求来完成工作。
.后台进程(background process):这些进程随数据库而启动,用于完成各种维护任务,如将块写至磁盘、维护在线重做日志、清理异常中止的进程、维护自动工作负载存储库(AWR)等。
.从属进程(slave process):这些进程类似于后台进程,不过它们要代表后台进程或服务器进程完成一些额外的工作。
5.1服务器进程
服务器进程就是代表客户会话完成工作的进程。应用向数据库发送的SQL语句最后就要由这些进程接收并执行。
.专用服务器(dedicated server)连接,采用专用服务器连接时,会在服务器上得到针对这个连接的一个专用进程。数据库连接与服务器上的一个进程或线程之间存在一对一的映射
.共享服务器(shared server)连接,采用共享服务器连接时,多个会话可以共享一个服务器进程池,其中的进程由Oracle实例生成和管理,你所连接的是一个数据库调度程序(dispatcher),而不是特意为连接创建的一个专用服务器进程。
专用服务器进程和共享服务器进程的任务是一样的:要处理你提交的所有SQL。当你向数据库提交一个SELECT * FROM EMP查询时,会有一个Oracle专用/共享服务器进程解析这个查询,并把它放在共享池中(或者最好能发现这个查询已经在共享池中)。这个进程要提出查询计划,如果必要,还要执行这个查询计划,可能在缓冲区缓冲中找到必要的数据,或者将数据从磁盘读入缓冲区缓存中。
这些服务器进程是干重活的进程。在很多情况下,你都会发现这些进程占用的系统CPU时间最多,因为正是这些进程来执行排序、汇总、联结等工作,几乎所有工作都是这些进程做的。
5.1.1专用服务器连接
在专用服务器模式下,客户连接和服务器进程(或者有可能是线程)之间会有一个一对一的映射。
客户应用中链接着Oracle库,这些库提供了与数据库通信所需的API。这些API知道如何向数据库提交查询,并处理返回的游标。它们知道如何把你的请求打包为网络调用,专用服务器则知道如何将这些网络调用解开。这部分软件称为Oracle Net,不过在以前的版本中可能称之为SQL*Net或Net8。这是一个网络软件/协议,Oracle利用这个软件来支持客户/服务器处理。不过,即使从技术上讲没有涉及Oracle Net,Oracle也采用了同样的体系结构。也就是说,即客户和服务器在同一台机器上,也会采用这种两进程(也称为两任务)体系结构。这个体系结构有两个好处。
.远程执行(remote execution):客户应用可能在另一台机器上执行(而不是数据库所在的机器)
.地址空间隔离(address space isolation):服务器进程可以读写SGA。如果客户进程和服务器进程物理地链接在一起,客户进程中一个错误的指针就能轻松地破坏SGA中的数据结构。
如何由Oracle监听器进程创建它们,详见第2章。简要地说明如果不涉及监听器会是什么情况。这种机制与使用监听器的机制基本上是一样的,但不是由监听器通过fork()/exec()调用(Unix)或进程间通信IPC调用(Windows)来创建专用服务器,而是由客户进程自己来创建。
使用一个查询来发现与专用服务器相关联的进程ID(PID),从V$PROCESS得到的SPID是执行该查询时所用进程的操作系统PID。/bin/ps -fp的输出包括父进程id(PPID), 展示了专门的服务器进程是SQL*Plus进程的子进程。
sys@ORCL>select a.spid dedicated_server,b.process clientpid 2 from v$process a,v$session b 3 where a.addr=b.paddr 4 and b.sid=(select sid from v$mystat where rownum=1) 5 / DEDICATED_SERVER ------------------------------------------------------------------------ CLIENTPID ------------------------------------------------------------------------ 6806 6803 sys@ORCL>!/bin/ps -fp 6806 6803 UID PID PPID C STIME TTY STAT TIME CMD oracle 6803 17804 0 07:17 pts/1 S+ 0:00 sqlplus as sysdba oracle 6806 6803 0 07:17 ? Ss 0:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5173.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
