Oracle进程

本文详细介绍了Oracle数据库的服务器进程,包括专用服务器和共享服务器的特性与应用场景。专用服务器提供一对一的连接映射,适合高并发场景;共享服务器则通过减少进程数和内存需求来优化资源。后台进程方面,重点讨论了SMON、PMON、LGWR等关键进程的角色和功能,以及在RAC环境中的特定进程。此外,还提到了数据库连接池(DRCP)的概念及其优势。

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

Oracle中的各个进程要完成某个特定的任务或一组任务,每个进程都会分配内部内存(PGA内存)来完成它的任务。

Oracle实例主要有3类进程:

  • 服务器进程(server process):这些进程根据客户的请求来完成工作。(专用服务器和共享服务器都是服务器进程)

  • 后台进程(background process):这些进程随数据库而启动,用于完成各种维护任务,如将块写至磁盘、维护在线重做日志、清理异常中止的进程、维护自动工作负载存储库(AWR)
  • 从属进程(slave process):这些进程类似于后台进程,不过它们要代表后台进程或服务器进程完成一些额外的工作。

服务器进程

服务器进程就是代表客户会话完成工作的进程。应用向数据库发送的SQL语句最后就要由这些进程接收并执行。

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

连接(connection)就是客户进程与Oracle实例之间的一条物理路径。

会话(session)是数据库中的一个逻辑实体,客户进程可以在会话上执行SQL等。

1.专用服务器连接

在专用服务器模式下,客户连接和服务器进程(线程)之间会有一个一对一的映射。

  • 远程执行(remote execution):客户应用可能在另一台机器上执行(而不是数据库所在的机器)
  • 地址空间隔离(address space isolation):服务器进程可以读写SGA。如果客户进程和服务器进程物理地链接在一起,客户进程中一个错误的指针就能轻松地破坏SGA中的数据结构。 

sys@cdb$root:orclcdb> ALTER SESSION SET CONTAINER=ORCLPDB1;

Session altered.

sys@cdb$root:orclcdb> 
sys@cdb$root:orclcdb> 
sys@cdb$root:orclcdb> 
sys@cdb$root:orclcdb> grant select on v_$process to SCOTT;

Grant succeeded.

sys@cdb$root:orclcdb> grant select on v_$session to SCOTT;

Grant succeeded.

sys@cdb$root:orclcdb> 


select a.pid dedicated_server, b.process clientpid
  2    from v$process a, v$session b
 where a.addr = b.paddr
  4     and b.sid = (select sid from v$mystat where rownum = 1);

DEDICATED_SERVER CLIENTPID
---------------- ------------------------
              53 123960

1 row selected.

scott@orclpdb1:orclcdb> 
scott@orclpdb1:orclcdb> 
scott@orclpdb1:orclcdb> 
scott@orclpdb1:orclcdb> !/bin/ps -fp 53 123960
UID          PID    PPID  C STIME TTY      STAT   TIME CMD
oracle    123960  123959  0 15:28 pts/5    Ssl+   0:00 sqlplus         as sysdba

scott@orclpdb1:orclcdb> 

2.共享服务器连接

 

数据库常驻连接池

数据库常驻连接池(DRCP)是连接数据库并建立会话的一种新方法。

连接与会话

连接只是客户进程和数据库实例之间的一条特殊线路,最常见的就是网络连接。

这条连接可能连接到一个专用服务器进程,也可能连接到调度程序。

连接(connection):连接是从客户到Oracle实例的一条物理路径。连接可以在网络上建立,或者通过IPC机制建立。通常会在客户进程与一个专用服务器或一个调度程序之间建立连接。

会话(session):会话是实例中存在的一个逻辑实体。(会话状态session state),也就是表示特定会话的一组内存中的数据结构。提到“数据库连接”时,大多数人首先想到的就是“会话”,你要在服务器中的会话上执行SQL、提交事务和运行存储过程。

[root@MaxwellDBA ~]# su - oracle
Last login: Fri Sep 30 15:33:22 CST 2022 on pts/6
[oracle@MaxwellDBA ~]$ sqlplus sys/sys as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Sep 30 16:07:46 2022
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

sys@cdb$root:orclcdb> ALTER SESSION SET CONTAINER=ORCLPDB1;

Session altered.

sys@cdb$root:orclcdb> 
sys@cdb$root:orclcdb> 
sys@cdb$root:orclcdb> select username,sid,serial#,server,paddr,status
  2  from v$session
  3  where username= USER
  4  /

USERNAME
----------------------------------------------------------------------------------------------------
       SID    SERIAL# SERVER    PADDR            STATUS
---------- ---------- --------- ---------------- --------
SYS
         4      51998 DEDICATED 000000007E531340 ACTIVE

SYS
        48       3106 DEDICATED 000000007E551440 ACTIVE

SYS
       267       2932 DEDICATED 000000007E575560 INACTIVE

SYS
       271      53486 DEDICATED 000000007E56AA60 INACTIVE


4 rows selected.

sys@cdb$root:orclcdb> 
sys@cdb$root:orclcdb> 
sys@cdb$root:orclcdb> set autotrace on statistics
sys@cdb$root:orclcdb> 
sys@cdb$root:orclcdb> select username,sid,serial#,server,paddr,status
  2  from v$session
  3  where username= USER
  4  /

USERNAME
----------------------------------------------------------------------------------------------------
       SID    SERIAL# SERVER    PADDR            STATUS
---------- ---------- --------- ---------------- --------
SYS
         4      51998 DEDICATED 000000007E531340 ACTIVE

SYS
        48       3106 DEDICATED 000000007E551440 ACTIVE

SYS
       267       2932 DEDICATED 000000007E575560 INACTIVE

SYS
       271      53486 DEDICATED 000000007E56AA60 INACTIVE


4 rows selected.


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          0  consistent gets
          0  physical reads
          0  redo size
       1104  bytes sent via SQL*Net to client
        445  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          4  rows processed

sys@cdb$root:orclcdb> 

专用服务器与共享服务器

1、什么时候使用专用服务器

在专用服务器模式中,客户连接与服务器进程之间存在一种一对一的映射。

专用服务器是Oracle的推荐配置,它能很好地扩展。只要服务器有足够的硬件(CPU和RAM)来应对系统所需的专用服务器进程个数,专用服务器甚至可以用于数千条并发连接。

2、什么时候使用共享服务器

共享服务器的设置和配置尽管并不困难,但是比设置专用服务器要多一些。

3、共享服务器的潜在好处

共享服务器主要为我们做3件事:

  • 减少操作系统进程/线程数。
  • 刻意地限制并发度。

 

  • 以及减少系统所需的内存。

这是使用共享服务器最主要的原因之一:它能减少所需的内存量。共享服务器确实能减少内存需求。共享服务器配置中对SGA的需求通常很大。这个内存一般要预分配,从而只能由数据库实例使用。

4、DRCP

 DRCP非常适用于API本身没有足够连接池的客户进程。

后台进程

Oracle实例包括两部分: SGA和一组后台进程。

后台进程执行保证数据库运行所需的实际维护任务。

可以使用一个V$视图查看所有可能的Oracle后台进程。确定你的系统中正在使用哪些后台进程。

scott@orclpdb1:orclcdb> 
scott@orclpdb1:orclcdb> 
scott@orclpdb1:orclcdb> select paddr,name,description
  2  from v$bgprocess
  3  order by paddr desc
  4  /

PADDR            NAME  DESCRIPTION
---------------- ----- ----------------------------------------------------------------
000000007E578020 M002  MMON slave class 1
000000007E574000 M005  MMON slave class 1
000000007E571540 W007  space management slave pool
000000007E56FFE0 W006  space management slave pool
000000007E56EA80 W005  space management slave pool
000000007E569500 W004  space management slave pool
000000007E566A40 W003  space management slave pool
000000007E5654E0 Q003  QMON MS
000000007E563F80 P003  Parallel query slave
000000007E562A20 P002  Parallel query slave
000000007E5614C0 CJQ0  Job Queue Coordinator
000000007E55EA00 Q001  QMON MS
000000007E55D4A0 QM02  QMON MS
000000007E55BF40 AQPC  AQ Process Coord
000000007E55A9E0 W002  space management slave pool
000000007E559480 TT02  Redo Transport
000000007E557F20 TT01  Redo Transport
000000007E5569C0 TT00  Redo Transport
000000007E555460 P001  Parallel query slave
000000007E553F00 P000  Parallel query slave
000000007E5529A0 M003  MMON slave class 1
000000007E54FEE0 M004  MMON slave class 1
000000007E54E980 TMON  Transport Monitor
000000007E54D420 S000  Shared servers
000000007E54BEC0 D000  Dispatchers
000000007E54A960 MMON  Manageability Monitor Process
000000007E549400 MMNL  Manageability Monitor Process 2
000000007E549400 FENC  IOServer fence monitor
000000007E547EA0 PXMN  PX Monitor
000000007E546940 W001  space management slave pool
000000007E5453E0 LREG  Listener Registration
000000007E543E80 W000  space management slave pool
000000007E542920 RECO  distributed recovery
000000007E5413C0 SMCO  Space Manager Process
000000007E53FE60 LG01  Log Writer Slave
000000007E53E900 SMON  System Monitor Process
000000007E53D3A0 LG00  Log Writer Slave
000000007E53BE40 CKPT  checkpoint
000000007E53A8E0 LGWR  Redo etc.
000000007E539380 DBW0  db writer process 0
000000007E537E20 DIA0  diagnosibility process 0
000000007E5368C0 PMAN  process manager
000000007E535360 SVCB  services background monitor
000000007E533E00 VKRM  Virtual sKeduler for Resource Manager
000000007E5328A0 SCMN
000000007E531340 OFSD  Oracle File Server BG
000000007E52FDE0 DIAG  diagnosibility process
000000007E52E880 SCMN
000000007E52D320 GEN1  generic1
000000007E52BDC0 DBRM  DataBase Resource Manager
000000007E52A860 MMAN  Memory Manager
000000007E529300 GEN0  generic0
000000007E527DA0 VKTM  Virtual Keeper of TiMe process
000000007E526840 PSP0  process spawner 0
000000007E5252E0 CLMN  process cleanup
000000007E523D80 PMON  process cleanup
00               ABMR  Auto BMR Background Process
00               ACFS  ACFS CSS
00               ACMS  Atomic Controlfile to Memory Server
00               AMB1  ASM Background 1
00               AMB2  ASM Background 2
00               AMB3  ASM Background 3
00               ARB0  ASM Rebalance 0
00               ARB1  ASM Rebalance 1
00               ARB2  ASM Rebalance 2
00               ARB3  ASM Rebalance 3
00               ARB4  ASM Rebalance 4
00               ARB5  ASM Rebalance 5
00               ARB6  ASM Rebalance 6
00               ARB7  ASM Rebalance 7
00               ARB8  ASM Rebalance 8
00               ARB9  ASM Rebalance 9
00               ARBA  ASM Rebalance 10
00               ARC0  Archival Process 0
00               ARC1  Archival Process 1
00               ARC2  Archival Process 2
00               ARC3  Archival Process 3
00               ARC4  Archival Process 4
00               ARC5  Archival Process 5
00               ARC6  Archival Process 6
00               ARC7  Archival Process 7
00               ARC8  Archival Process 8
00               ARC9  Archival Process 9
00               ARCa  Archival Process 10
00               ARCb  Archival Process 11
00               ARCc  Archival Process 12
00               ARCd  Archival Process 13
00               ARCe  Archival Process 14
00               ARCf  Archival Process 15
00               ARCg  Archival Process 16
00               ARCh  Archival Process 17
00               ARCi  Archival Process 18
00               ARCj  Archival Process 19
00               ARCk  Archival Process 20
00               ARCl  Archival Process 21
00               ARCm  Archival Process 22
00               ARCn  Archival Process 23
00               ARCo  Archival Process 24
00               ARCp  Archival Process 25
00               ARCq  Archival Process 26
00               ARCr  Archival Process 27
00               ARCs  Archival Process 28
00               ARCt  Archival Process 29
00               ASMB  ASM Background
00               BW36  db writer process 36
00               BW37  db writer process 37
00               BW38  db writer process 38
00               BW39  db writer process 39
00               BW40  db writer process 40
00               BW41  db writer process 41
00               BW42  db writer process 42
00               BW43  db writer process 43
00               BW44  db writer process 44
00               BW45  db writer process 45
00               BW46  db writer process 46
00               BW47  db writer process 47
00               BW48  db writer process 48
00               BW49  db writer process 49
00               BW50  db writer process 50
00               BW51  db writer process 51
00               BW52  db writer process 52
00               BW53  db writer process 53
00               BW54  db writer process 54
00               BW55  db writer process 55
00               BW56  db writer process 56
00               BW57  db writer process 57
00               BW58  db writer process 58
00               BW59  db writer process 59
00               BW60  db writer process 60
00               BW61  db writer process 61
00               BW62  db writer process 62
00               BW63  db writer process 63
00               BW64  db writer process 64
00               BW65  db writer process 65
00               BW66  db writer process 66
00               BW67  db writer process 67
00               BW68  db writer process 68
00               BW69  db writer process 69
00               BW70  db writer process 70
00               BW71  db writer process 71
00               BW72  db writer process 72
00               BW73  db writer process 73
00               BW74  db writer process 74
00               BW75  db writer process 75
00               BW76  db writer process 76
00               BW77  db writer process 77
00               BW78  db writer process 78
00               BW79  db writer process 79
00               BW80  db writer process 80
00               BW81  db writer process 81
00               BW82  db writer process 82
00               BW83  db writer process 83
00               BW84  db writer process 84
00               BW85  db writer process 85
00               BW86  db writer process 86
00               BW87  db writer process 87
00               BW88  db writer process 88
00               BW89  db writer process 89
00               BW90  db writer process 90
00               BW91  db writer process 91
00               BW92  db writer process 92
00               BW93  db writer process 93
00               BW94  db writer process 94

这个视图中PADDR不是00的行都是系统配置和运行的进程(线程)

中心后台进程

有一个中心(focused)用途的Oracle后台进程。

后台启动的后台进程:

scott@orclpdb1:orclcdb> select paddr,name,description
  2  from v$bgprocess
  3  where paddr <> '00'
  4  order by paddr desc
  5  /

PADDR            NAME  DESCRIPTION
---------------- ----- ----------------------------------------------------------------
000000007E578020 M002  MMON slave class 1
000000007E574000 M005  MMON slave class 1
000000007E571540 W007  space management slave pool
000000007E56FFE0 W006  space management slave pool
000000007E56EA80 W005  space management slave pool
000000007E569500 W004  space management slave pool
000000007E566A40 W003  space management slave pool
000000007E5654E0 Q003  QMON MS
000000007E563F80 P003  Parallel query slave
000000007E562A20 P002  Parallel query slave
000000007E5614C0 CJQ0  Job Queue Coordinator
000000007E55EA00 Q001  QMON MS
000000007E55D4A0 QM02  QMON MS
000000007E55BF40 AQPC  AQ Process Coord
000000007E55A9E0 W002  space management slave pool
000000007E559480 TT02  Redo Transport
000000007E557F20 TT01  Redo Transport
000000007E5569C0 TT00  Redo Transport
000000007E555460 P001  Parallel query slave
000000007E553F00 P000  Parallel query slave
000000007E5529A0 M003  MMON slave class 1
000000007E54FEE0 M004  MMON slave class 1
000000007E54E980 TMON  Transport Monitor
000000007E54D420 S000  Shared servers
000000007E54BEC0 D000  Dispatchers
000000007E54A960 MMON  Manageability Monitor Process
000000007E549400 MMNL  Manageability Monitor Process 2
000000007E549400 FENC  IOServer fence monitor
000000007E547EA0 PXMN  PX Monitor
000000007E546940 W001  space management slave pool
000000007E5453E0 LREG  Listener Registration
000000007E543E80 W000  space management slave pool
000000007E542920 RECO  distributed recovery
000000007E5413C0 SMCO  Space Manager Process
000000007E53FE60 LG01  Log Writer Slave
000000007E53E900 SMON  System Monitor Process
000000007E53D3A0 LG00  Log Writer Slave
000000007E53BE40 CKPT  checkpoint
000000007E53A8E0 LGWR  Redo etc.
000000007E539380 DBW0  db writer process 0
000000007E537E20 DIA0  diagnosibility process 0
000000007E5368C0 PMAN  process manager
000000007E535360 SVCB  services background monitor
000000007E533E00 VKRM  Virtual sKeduler for Resource Manager
000000007E5328A0 SCMN
000000007E531340 OFSD  Oracle File Server BG
000000007E52FDE0 DIAG  diagnosibility process
000000007E52E880 SCMN
000000007E52D320 GEN1  generic1
000000007E52BDC0 DBRM  DataBase Resource Manager
000000007E52A860 MMAN  Memory Manager
000000007E529300 GEN0  generic0
000000007E527DA0 VKTM  Virtual Keeper of TiMe process
000000007E526840 PSP0  process spawner 0
000000007E5252E0 CLMN  process cleanup
000000007E523D80 PMON  process cleanup

56 rows selected.

scott@orclpdb1:orclcdb> 

1.PMON:进程监视器

Process Monitor 负责在出现异常中止 的连接之后完成清理。

2.SMON:系统监视器

SMON进程,系统监视器(System Monitor)

SMON所做的工作包括:

  • 清理临时空间
  • 合并空闲空间
  • 针对原来不可用的文件恢复活动的事务
  • 执行RAC中失败节点的实例恢复。
  • 收缩回滚段
  • ”离线“回滚段

3.RECO:分布式数据库恢复

4.CKPT:检查点进程

建立检查点主要是DBWin的任务。

CKPT只是更新数据文件的文件首部,以辅助真正建立检查点的进程(DBWn)

5.DBWn:数据库块写入器

6.LGWR日志写入器

LGWR进程负责将SGA中重做日志缓冲区的内容刷新输出到磁盘。如果满足以下某个条件,就会做这个工作:

  • 每3秒会刷新输出一次。
  • 任何事务发出一个提交时。
  • 重做日志缓冲区1/3满,或者已经包含1MB的缓冲数据。

7.ARCn:归档进程

当LGWR将在线重做日志文件填满时,就将其复制到另一个位置。

8.DIAG:诊断性进程

专用于RAC环境

利用新增的ADR(高级诊断库,Advanced Diagnostic Reoisitory),它会负责监视实例的整体状况,而且会捕获处理实例失败时所需要的信息。

9.FBDA:闪回数据归档进程。

10.DBRM:数据库资源管理器进程。

11.GENO:通用任务执行进程。

下面的进程是使用ASM的数据库实例所特有的:

  • 自动存储管理后台(Automatic Storage Management Background ,ASMB)进程

ASMB进程在使用了ASM的数据库实例中运行。它负责与管理存储的ASM实例通信、向ASM实例提供更新的统计信息。

  • 重新平衡(ReBALance RBAL)进程

负责处理重新平衡需求即重新分布负载的请求

  • 高度可用性
  • 可扩展性

以下进程是RAC环境所特有的,如果不是RAC环境,则看不到这些进程。

  • 锁监视器(Lock monitor ,LMON)进程
  • 锁管理器守护(Lock manager daemon LMD)进程
  • 锁管理器服务器(Lock manager server LMSn)进程
  • 锁(Lock,LCKO)进程

以下是大多数单实例或RAC实例常见的后台进程

  • 进程生成器(PSPO)进程
  • 虚拟时间管理器(VKTM)进程
  • 空间管理协调器(SMCO)进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值