`
足至迹留
  • 浏览: 497119 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论
阅读更多
Oracle中的各个进程要完成某个特定的任务或一组任务,每个进程都会分配内部内存(PGA内存,前一篇讲过oracle内存结构,主要有SGA,PGA和UGA)来完成它的任务。Oracle实例主要有3类进程。
1.服务器进程(server process):这些进程根据客户的请求来完成工作。比如专用服务器进程和共享服务器进程都是服务器进程。
2.后台进程(background process):这些进程随数据库而启动,用于完成各种维护任务,如将块写至磁盘,维护在线重做日志,清理异常终止的今晨个,维护自动工作负载存储库(AWR)等。
3.从属进程(slave process):这些进程类似于后台进程,不过他们要代表后台进程或服务器进程完成一些额外的工作。

4.1 服务器进程
服务器进程就是代表客户会话完成工作的进程。应用向数据库发送的sql语句最后就要由这些进程接收并执行。
这里重点介绍下专用服务器连接和共享服务器连接。

专用服务器连接(dedicated server):采用专用服务器连接时,会在服务器上得到针对这个连接的一个专用进程。数据库连接与服务器上的一个进程或线程之间存在一对一的映射。
共享服务器连接(shared server):采用共享服务器连接时,多个会话可以共享一个服务器进程池,其中的进程由oracle实例生成和管理。你所连接的是一个数据库调度程序(dispatcher),而不是特意为连接创建的一个专用服务器进程。

注意:有一点很重要,要知道oracle术语中的连接和会话之间的区别。连接(connection)就是客户进程与oracle实例之间的一条物理路径(例如,客户与实例之间的一个网络连接)。会话(session)则不同,这时数据库中的一个逻辑实体,客户进程可以在会话上执行sql等。多个独立的会话可以与一个连接相关联,这些会话甚至可以独立于连接存在。

专用服务器进程和共享服务器进程的任务是一样的:要处理你所提交的所有sql。当你向数据库提交一个select * from emp查询时,(1)会有一个oracle专用/共享服务器进程解析这个查询,(2)并把它放在共享池中(或者最好能发现这个查询已经在共享池中)。这个进程要提出查询计划,如果必要,还要执行这个查询计划,可能在缓冲区中找到必要的数据,或者将数据从磁盘读入缓冲区缓存中。

这些服务器进程是干重活的进程。在很多情况下,你都会发现这些进程占用的系统cpu时间最多,因为正是这些进程来执行排序、汇总、连接等工作,几乎所有工作都是这些进程做的。

4.1.1 专用服务器连接
在专用服务器模式下,客户连接和服务器进程(或者有可能是线程,看是linux还是windows)之间会有一个一对一的映射。如果一台unix主机上有100条专用服务器连接,就会有相应的100个进程在执行。


客户应用中链接着oracle库,这些库提供了与数据库通信所需的API。这些API知道如何向数据库提交查询,并处理返回的游标。他们知道如何把请求打包为网络调用,专用服务器则知道如何将这些网络调用解开。这部分软件称为Oracle Net,不过在以前的版本中可能称为SQL*Net或Net8.这时一个网络软件/协议,Oracle利用这个软件来支持客户/服务器处理。即使客户和服务器在同一台机器上,也会采用这种两进程体系结构。这个体系结构有两个好处:
1.远程执行(remote execution):客户应用可能在另一台机器上执行(而不是数据库所在的机器)。
2.地址空间隔离(address space isolation):服务器进程可以读写SGA。如果客户进程和服务器进程物理地链接在一起,客户进程中一个错误的指针就能轻松地破坏SGA中的数据结构。

4.1.2 共享服务器连接
共享服务器连接强制要求必须使用Oracle Net,即使客户和服务器都在同一台机器上也不例外。如果不适用Oracle TNS监听器,就无法使用共享服务器。如前所述,客户应用会连接到Oracle TNS监听器,并重定向或转交给一个调度程序。调度程序充当客户应用和共享服务器进程之间的导管。


在此可以看到,客户应用(其中链接了Oracle库)会与一个调度程序进程物理连接。对于给定的实例,可以配置多个调度程序,但是对应数百个用户只有一个调度程序的情况并不鲜见。

4.1.3 数据库常驻连接池
数据库常驻连接池(DRCP)是连接数据库并建立会话的一种新方法。有些应用接口自身不支持高效连接池(如PHP),DRCP就是为这种应用接口设计的一种更为高效的连接池方法。

在共享服务器连接中,共享服务器进程由多个会话共享,一个会话可能会使用多个共享服务器。采用DRCP时不再是这样,从池中选出的专用服务器进程会在会话的整个生命期中为客户进程所专用。在共享服务器中,如果在会话中要对数据库执行3个语句,这3个语句很有可能会由3个不同的共享服务器进程来执行。但通过使用DRCP,这三个语句都将由从池中为会话分配的专用服务器来执行。所以,DRCP不仅具备共享服务器的进程池功能,同时还具有专用服务器性能特征。

4.1.4 连接与会话
连接并不是会话的同义词,这一点让很多人都很诧异。在一条连接上可以建立0个,1个或多个会话。各个会话是单独而且独立的。即使他们共享同一个数据库物理连接也是如此。一个会话中的提交不会影响该连接上的任何其他会话。实际上,一条连接上的各个会话可以使用不同的用户身份。
在oracle中,连接只是客户进程和数据库实例之间的一条特殊线路,最常见的就是网络连接。这条连接可能连接到一个专用服务器也可能连接到调度程序。
1.连接(connection):连接时从客户到oracle实例的一条物理路径。连接可以再网络上建立,或者通过IPC机制建立。通常会在客户进程与一个专用服务器或一个调度程序之间建立连接。
2.会话(session):会话在实例中存在的一个逻辑实体。这就是你的会话状态(session state),也就是表示特定会话的一组内存中的数据结构。提到“数据库连接”时,大多数人首先想到的就是“会话”。你需要服务器中的会话上执行sql,提交事务和运行存储过程。会话和连接之间是多对多关系。我们通常在程序中说的“连接数”其实是“会话数”。

4.1.5 专用服务器与共享服务器
1. 什么时候使用专用服务器
因为存在一对一的映射,所以不必担心长时间运行的事务会阻塞其他事务。其他事务只通过其自己的专用进程来处理。因此,在非OLTP环境中,也就是可能有长时间运行事务的情况下,应该只考虑使用这种模式。专用服务器是oracle的推荐配置,他能很好地扩展。只要服务器有足够的硬件(CPU和RAM)来应对系统所需的专用服务器进程个数,专用服务器甚至可以用于 数千条并发连接。
某些操作必须在专用服务器模式下执行,如数据库启动和关闭,所以每个数据库中可能同时又专用服务器和共享服务器,也可能只设置一个专用服务器。

2.什么时候使用共享服务器
共享服务器的设置和配置尽管并不难,但是比设置专用服务器要多一步。不过,二者之间的主要区别不在于其设置,而是操作的模式。

顾名思义,共享服务器是一种共享资源,而专用服务器不是。使用共享资源时,必须当心,不要太长时间独占这个资源。如果独占了共享服务器资源,会导致系统看上去好像挂起了一样。
这就是共享服务器的首要原则:要确保事务的持续时间尽量短。事务可以频繁执行,但必须在短时间内执行完,这正是OLTP系统的特点。而且,共享服务器只适用于OLTP系统,这种系统的特点就是事务短而且频繁,事务以毫秒为单位。共享服务器对数据仓库很不适用,因为在数据仓库中,可能会执行耗时1分钟,2分钟甚至更长时间的查询。如果你的系统90%都是OLTP,只有10%不那么OLTP,那么可以再同一个实例上适当地混合使用专用服务器和共享服务器。
当然,使用共享服务器还有一个很重要的原因,这就是有时你别无选择。许多高级连接特性都需要使用共享服务器,如果你想使用Oracle net连接池,就必须使用共享服务器。如果想在数据库之间使用数据库链接集合,也必须对这些链接使用共享服务器。
共享服务器主要为我们做了3件好事:减少操作系统进程/线程数;刻意地限制并发度;减少系统所需内存。

注意:如果你的应用中已经使用了一个连接池特性(例如你在使用J2EE连接池),而且适当地确定了连接池的大小,再使用共享服务器只会成为性能杀手,导致性能下降。

4.1.6 专用/共享服务器小结
除非你的系统负载过重,或者需要为一个特定的特性使用共享服务器,否则专用服务器可能最合适。专用服务器设置起来很简单(实际上,根本没有设置),而且调优也更容易。

4.2 后台进程
Oracle实例包括两部分,SGA和一组后台进程。后台进程执行保证数据库运行所需的实际维护任务。例如,有一个进程为我们维护块缓冲区缓存,根据需要将块写出到数据文件。另一个进程负责当在线重做日志文件写满时将它复制到一个归档目标。可以使用V$bgprocess视图查看所有可能的oracle后台进程。
有两类后台进程:有一个中心(focused)任务的进程以及完成各种其他任务的进程(即工具进程)。作为开发人员,这部分可以不做深入了解。

4.3 从属进程
下面来看最后一类oracle进程:从属进程(slave process)。Oracle中有两类从属进程:IO从属进程和并行查询从属进程。
IO从属进程用于为不支持异步IO的系统或设备模拟异步IO。
Oracle 7.1.6引入了并行查询功能。这个功能是指:对于select、create table、create index、update等sql语句,创建一个执行计划,其中包含可以同时完成的多个(子)执行计划。将每个执行计划的输出合并在一起构成一个更大的结果。其目标是仅用少量的时间来完成操作。
  • 大小: 136.7 KB
  • 大小: 178.9 KB
0
4
分享到:
评论

相关推荐

    获取top前10个Oracle的进程(支持多实例)

    X、通过top找出占用资源的Oracle进程 Y、通过ps确定这个Oracle进程所说实例 Z、连接对应的Oracle实例找出执行SQL B、进行了占用内存大小自动转换,快速查看占有大小是G、M、K 3、将来版本 A、提供Socket侦听,...

    Developer2k及其應用part_2

    01-介绍Developer.pdf<br>02-Oracle Developer对象综述.pdf<br>03-数据库、表单和报表共同工作.pdf<br>04-表单、报表和图形的基础知识.pdf<br>05-高级进程、触发器和跨平台设计.pdf<br>06-先进的窗口和菜单.pdf<br>...

    Developer2k及其應用part_1

    01-介绍Developer.pdf<br>02-Oracle Developer对象综述.pdf<br>03-数据库、表单和报表共同工作.pdf<br>04-表单、报表和图形的基础知识.pdf<br>05-高级进程、触发器和跨平台设计.pdf<br>06-先进的窗口和菜单.pdf<br>...

    Developer2k及其應用part_3

    01-介绍Developer.pdf<br>02-Oracle Developer对象综述.pdf<br>03-数据库、表单和报表共同工作.pdf<br>04-表单、报表和图形的基础知识.pdf<br>05-高级进程、触发器和跨平台设计.pdf<br>06-先进的窗口和菜单.pdf<br>...

    Oracle基本语法.docx

    在Windows系统中,Oracle的服务可以通过"我的电脑" -> "管理" -> "服务和应用程序" -> "服务"来查看和管理,如OracleServer<ORACLE_SID>、Oracle<HOME_NAME>TNSListener、OracleDBConsole<ORACLE_SID>和Oracle<HOME_...

    ORACLE --RAC 集群的启动和关闭【20180625】

    [oracle@rac2 ~]$ srvctl start asm -n <node_name> [-i <asm_inst_name>] [-o <start_options>] [-c <connect_str>|-q] ``` 其中`-n`指定节点名称,`-i`指定ASM实例名,`-o`指定启动选项(如`open`, `mount`或`...

    Oracle Concepts 中文英文对照版 (10g R2)

    <br>Chapter 9, Process Architecture 第 9 章,进程体系结构 <br>Chapter 10, Application Architecture 第 10 章,应用体系结构 <br>Chapter 11, Oracle Utilities 第 11 章,Oracle 工具 <br>Chapter 12, ...

    Oracle数据库的日常使用命令

    - **创建用户**: 通过`create user <username> identified by <password> default tablespace <tablespace_name> temporary tablespace <temp_tablespace_name>`命令创建用户,并指定默认表空间和临时表空间。...

    oracle_初级教程

    CREATE TABLESPACE <tablespace_name> DATAFILE '<filename>' SIZE <size> AUTOEXTEND ON NEXT <size> MAXSIZE <maxsize>; ``` #### 八、管理还原段 - 还原段用于临时存储数据,例如事务处理过程中产生的数据。 -...

    Oracle_10G_RAC_日常管理

    - `srvctl start|stop asm -n <nodename> [-i <inst_name>] [-o <oracle_home>]`:用于启动、停止 ASM 实例。 - **管理环境变量** - `srvctl getenv database -d <dbname> [-i <inst_name>]`:获取当前数据库...

    Oracle数据库学习资料课件.docx

    在Windows操作系统中,Oracle数据库的服务包括OracleServer<ORACLE_SID>数据库服务,进程为ORACLE.exe,Oracle<HOME_NAME>TNSListener监听器服务,进程为TNSLSNR.exe,以及OracleDBConsole<ORACLE_SID>用于企业管理...

    Oracle数据库学习资料课件.doc

    4. **Oracle<HOME_NAME>iSQL*Plus**:提供了一个命令行接口,允许用户执行SQL语句和PL/SQL脚本。 #### 服务启动顺序 - **Oracle<HOME_NAME>TNSListener** 必须首先启动。 - **OracleServer<ORACLE_SID>** 随后启动...

    oracle系统状态trace文件分析器

    oracle系统状态trace文件分析器<br>当系统hang住时,或者进程间有阻塞时,你可以产生下面两种跟踪文件,一种是进程状态跟踪文件,一种是系统状态跟踪文件: <br>process state dumps ==> 一个进程的所有对象状态,...

    在Tomcat服务器下使用连接池连接Oracle数据库

    在`<web-app>`标签内添加`<resource-ref>`标签,定义了一个名为`siniteksirm`的数据源引用。`res-ref-name`是数据源的名称,`res-type`指定了数据源的类型(这里是`javax.sql.DataSource`),`res-auth`表明由容器...

    kmod-oracleasm-2.0.8-4.el6_6.x86_64

    2. **安装依赖**:使用`yum install -y kmod-oracleasm-2.0.8-4.el6_6.x86_64.rpm`或`rpm -ivh kmod-oracleasm-2.0.8-4.el6_6.x86_64.rpm`来安装这个包。如果还有其他依赖,可能需要通过`yum`或`apt-get`命令来解决...

    Oracle Concepts中英文对照版(10g R2).chm

    <br>Chapter 9, Process Architecture 第 9 章,进程体系结构 <br>Chapter 10, Application Architecture 第 10 章,应用体系结构 <br>Chapter 11, Oracle Utilities 第 11 章,Oracle 工具 <br>Chapter 12, ...

    Oracle第三方工具pl\sql developer绿色中文版

    自己一直以来用PLSQL Developer,但有时候用起来还不是很方便,决定给自己量身订做一个,不仅可以管理数据库,<br/><br/>而且还是一个学习oracle的好工具主要特点有:<br/><br/> 1.本软件的框架风格布局美观大方,对象...

    Oracle-dba.zip_Oracle-dba_dba_oracle_oracle dba_oracle 管理

    Oracle数据库管理员(DBA)是IT领域中的关键角色,负责维护和优化Oracle数据库系统,确保数据的安全性、可用性和性能。本压缩包“Oracle-dba.zip”提供了丰富的Oracle DBA相关资源,尤其对DBA新手而言,是一份极具...

    Oracle 11g完全卸载

    鼠标右键右单击“我的电脑-->属性-->高级-->环境变量-->PATH 变量。删除 Oracle 在该值中的内容。注意:PATH 中记录着一堆操作系统的目录,在 Windows 中各个目录之间使用分号(;)隔开的,删除时注意。 6. 重新...

Global site tag (gtag.js) - Google Analytics