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)进程