Oracle 19c 后台进程

0    300    1

Tags:

👉 本文共约40555个字,系统预计阅读时间或需153分钟。

01

数据库服务器(Database Server)

Oracle 19c 后台进程

一个Oracle数据库至少由一个数据库实例和一个数据库组成。数据库实例部分处理内存和进程,数据库部分则由称为数据文件的物理文件组成,并且可以是非容器数据库或多租户容器数据库。Oracle数据库在其运行期间还会使用多个数据库系统文件。

单实例数据库体系结构由一个数据库实例和一个数据库组成。数据库和数据库实例之间存在一对一的关系。可以在同一台服务器上安装多个单实例数据库。每个数据库都有单独的数据库实例。此配置对于在同一台计算机上运行不同版本的Oracle数据库很有用。

Oracle Real Application Clusters (Oracle RAC) 数据库的体系结构是由在分开的多台服务器计算机上运行的多个实例组成。它们都共享同一个数据库。服务器群集在一端表现为单个服务器,而在另一端则为最终用户和应用程序。此配置旨在实现高可用性,可伸缩性和高端的性能。

监听器是一个数据库服务器进程。它接收客户端请求,建立与数据库实例的连接,然后将客户端连接移交给服务器进程。监听器可以在数据库服务器上本地运行,也可以远程运行。典型的Oracle RAC环境是远程运行的。

02

数据库实例(Database Instance)

Oracle 19c 后台进程

数据库实例包含一组Oracle数据库后台进程和内存结构。主要的内存结构是系统全局区 (SGA) 和程序全局区 (PGA)。后台进程对数据库中存储的数据(数据文件)进行操作,并使用内存结构完成其工作。数据库实例仅存在于内存中。

Oracle数据库还创建服务器进程,以代表客户端程序处理与数据库的连接,并执行客户端程序的工作。例如,解析和运行SQL语句,以及检索结果并将结果返回给客户端程序。这些类型的服务器进程也称为前台进程。

注意:更多详细信息,请看如下内容:Oracle Database Instance.

03

系统全局区(System Global Area)

Oracle 19c 后台进程

系统全局区域 (SGA) 是包含一个Oracle数据库实例的数据和控制信息的存储区域。数据库所有的服务器进程和后台进程共享方式使用SGA。启动数据库实例时,将会显示SGA分配的内存量。SGA包含以下数据结构:

•共享池 (Shared pool):在多个用户之间共享各种的缓存结构;例如,共享池存储已解析的SQL,PL/SQL代码,系统参数和数据字典信息。共享池几乎涉及数据库中发生的每个操作。例如,如果用户执行SQL语句,则Oracle数据库将访问共享池。

•闪回缓冲区 (Flashback buffer):是SGA中的可选组件。启用闪回数据库后,将启动称为恢复写程序 (RVWR) 的后台进程。RVWR定期将修改后的块从缓冲区高速缓存复制到闪回缓冲区,然后将闪回数据库数据从闪回缓冲区写入闪回数据库日志,以循环方式重用。

•数据库高速缓冲区 (Database buffer cache):是存储从数据文件读取的数据块副本的内存区域。缓冲区是主内存地址,缓冲区管理器在其中临时缓存当前或最近使用的数据块。并发连接到数据库实例的所有用户共享对数据库高速缓冲区的访问。

•数据库智能闪存缓存 (Database Smart Flash):是Solaris或Oracle Linux上运行的数据库的数据库高速缓冲区的可选内存扩展。它为数据库中的数据块提供了2级缓存。针对读取密集型的在线事务处理 (OLTP) 工作负载,以及数据仓库 (DW) 中的即席查询 (Ad Hoc) 和批量数据修改工作,它可以提升这两种工作的响应时间和总体吞吐量。数据库智能闪存缓存驻留在一个或多个闪存设备上,这些设备是使用闪存的固态存储设备。数据库智能闪存缓存通常比其他主内存更经济,并且比磁盘驱动器快一个数量级。

•重做日志缓冲区 (Redo log buffer):是SGA中的循环缓冲区,用于保存有关对数据库所做的更改的信息。这些信息存储在重做条目中。重做条目包含重建(或重做)通过数据操作语言 (DML),数据定义语言 (DDL) 或内部操作对数据库所做的更改所必需的信息。如有必要,可将重做条目用于数据库恢复。

•大池 (Large pool):是一个可选的内存区域,用于大于共享池的内存分配。大池可以为如下内容提供更大的内存分配:共享服务器的用户全局区域 (UGA),Oracle XA接口(用于事务与多个数据库进行交互的地方),并行执行语句的消息缓冲区,用于Recovery Manager (RMAN) I/O 从属进程的缓冲区和延迟插入。

•内存中列式存储(In-Memory Area):是一个可选组件,使对象(表,分区和其他类型)可以以称为列格式的新格式存储在内存中。与传统的磁盘格式相比,此格式使扫描,联接和聚合的执行速度快得多,从而为OLTP和DW环境提供了快速的报告和DML性能。相对于在返回包含多列的少量行上运行的OLTP,此功能对在运行返回包含少量列的多行的分析应用程序特别有用。

•内存优化池(Memoptimize Pool):是一个可选组件,可为基于键的查询提供高性能和可伸缩性。Memoptimize池包含两部分,即memoptimize缓冲区和哈希索引。快速查询 (Fast Lookup) 使用memoptimize池中的哈希索引结构提供对给定表中块的快速访问 (启用MEMOPTIMIZE FOR READ选项) 以永久固定在缓冲区高速缓存中,以避免磁盘 I/O。Memoptimize池中的缓冲区与数据库缓冲区完全分开。哈希索引是在配置Memoptimized Rowstore 时创建的,并由Oracle数据库自动维护。

•共享I / O池(Shared I/O SecureFiles):用于SecureFile大对象 (LOB) 上的大型 I/O 操作。LOB是一组数据类型,旨在保存大量数据。SecureFile是一个LOB存储参数,允许重复数据删除,加密和压缩。

•流池(Streams pool):由Oracle Streams,Data Pump和GoldenGate集成的捕获和应用流程使用。Streams池存储缓冲的队列消息,并且为Oracle Streams捕获进程和应用进程提供内存。除非您进行特定配置,否则Streams池的大小从零开始。使用Oracle Streams时,池大小会根据需要动态增加。

•Java池(Java pool):用于Java虚拟机 (JVM) 中所有特定于会话的Java代码和数据。Java池内存的使用方式不同,具体取决于Oracle数据库的运行模式。

•固定的SGA(Fixed SGA):是SGA的一个组成部分,一个内部整理区域,其大小因平台而异,并随发行版本的不同而变化。其中包含有关数据库和数据库实例的状态的一般信息以及进程之间进行通信的信息(固定SGA包含一组指向SGA其他组件的变量以及包含各种参数值的变量)。固定SGA的大小是我们无法控制的,通常很小。可以将此区域视为SGA的引导区,Oracle在内部使用此东西来查找SGA的其他部分。SGA的固定区域包含数千个原子变量,小型数据结构(例如锁存器和指向SGA其他区域的指针)。这些变量以及它们的数据类型,大小和内存地址都列在固定表 X$KSMFSV 中。

注意:更多详细信息,请看如下内容:Overview of the System Global Area (SGA).

04

程序全局区(Program Global Area)

Oracle 19c 后台进程

程序全局区域(PGA)是一个非共享的内存区域,其中包含专门由服务器和后台进程使用的数据和控制信息。Oracle数据库创建服务器进程,以代表客户端程序处理与数据库的连接。在专用服务器环境中,为每个服务器和启动的后台进程创建一个PGA。每个PGA都由堆栈空间,哈希区域,位图合并区域和用户全局区域(UGA)组成。当终止与之关联的服务器或后台进程时,将释放PGA。

•在共享服务器环境中,多个客户端用户共享服务器进程。UGA被移入大型池,而PGA仅具有堆栈空间,哈希区域和位图合并区域。

•在专用服务器会话中,PGA由以下组件组成:

‣SQL工作区 (SQL work areas):排序区供排序数据的函数使用,例如ORDER BY和GROUP BY。

‣会话内存 (Session memory):此用户会话数据存储区分配给会话变量,例如登录信息和数据库会话所需的其他信息。OLAP池管理OLAP数据页,这些数据页等效于数据块。

‣私有SQL区域 (Private SQL area):此区域保存有关已解析的SQL语句的信息以及其他特定于会话的信息以供处理。当服务器进程执行SQL或PL / SQL代码时,该进程使用私有SQL区域存储绑定变量值,查询执行状态信息和查询执行工作区。相同或不同会话中的多个私有SQL区域可以指向SGA中的单个执行计划。持久区域 (persistent area) 包含绑定变量值。运行时区域 (runtime area) 包含查询执行状态信息。游标是专用SQL区域中特定区域的名称或句柄。您可以将游标视为客户端上的指针,以及服务器端上的状态。因为游标与私有SQL区域紧密相关,所以有时可以互换使用这些术语。

‣堆栈空间 (Stack space):堆栈空间是分配用于保存会话变量和数组的内存。

‣散列区域 (hash area):此区域用于执行表的散列连接。

‣位图合并区域 (bitmap merge area):此区域用于合并从多个位图索引的扫描中检索到的数据。

注意:更多详细信息,请看如下内容:Overview of the Program Global Area (PGA).

05

后台进程(Background processes)

Oracle 19c 后台进程

后台进程是数据库实例的⼀部分,它执⾏操作数据库和使多个⽤户的性能⼤化 所需的维护任务。每个后台进程执⾏⼀个独特的任务,但与其他进程⼀起⼯作。启动 数据库实例时,Oracle数据库会⾃动创建后台进程。存在的后台进程取决于数据库中 正在使⽤的功能。启动数据库实例时,必要的后台进程将⾃动启动。您可以根据需要 稍后启动可选的后台进程。

所有典型的数据库配置中都存在必要的的后台进程。默认情况下,这些进程使⽤ 初始化参数⽂件中的低配置,开始在读/写模式的数据库实例中运⾏。只读数据库实 例将禁⽤其中⼀些进程。必要的后台进程包括进程监控进程 (PMON),进程管理器进 程 (PMAN),监听器注册进程 (LREG),系统监控进程 (SMON),数据库写进程 (DBWn),检查点进程 (CKPT),可管理性监控进程 (MMON),可管理性监控器精简进 程 (MMNL),恢复程序进程 (RECO) 和⽇志写进程 (LGWR)。

⼤多数可选的后台进程特定于任务或功能。⼀些常⻅的可选过程包括归档进程 (ARCn),作业队列协调进程 (CJQ0),恢复写⼊进程 (RVWR),闪回数据存档进程 (FBDA) 和空间管理协调进程 (SMCO)。

从属进程是代表其他进程执⾏⼯作的后台进程。例如,分派进程 (Dnnn) 和共享 服务器进程 (Snnn)。

06

共享池(shared pool)

Oracle 19c 后台进程

共享池是系统全局区 (SGA) 的组成部分,负责缓存各种类型的程序数据。例如,共享池存储已解析的SQL,PL/SQL代码,系统参数和数据字典信息。共享池⼏乎涉及数据库中发⽣的每个操作。例如,如果⽤户执⾏SQL语句,则Oracle数据库将访问共享池。

共享池分为⼏个⼦组件:

•库⾼速缓存 (Library cache):是⼀种共享池内存结构,⽤于存储可执⾏的 SQL和PL/SQL代码。该缓存包含共享的SQL和PL/SQL区域以及控制结构,例如锁和库缓存句柄。当执⾏SQL语句时,数据库尝试重⽤以前执⾏的代码。如果库⾼速缓存中存在SQL语句的已解析表示形式并且可以共享,则数据库将重⽤代码。此操作称为软解析或库⾼速缓存命中。否则,数据库必须构建应⽤程序代码的新的可执⾏版本,这称为硬解析或库⾼速缓存未命中。

•保留池 (Reserved pool):是共享池中的⼀个内存区域,Oracle数据库可使⽤ 该内存区域来分配连续的⼤块内存。数据库从共享池中按照Chunk⽅式分配内存。Chunk允许将⼤型对象(超过5 KB)加载到缓存中,⽽⽆需单个连续区域。这样,数据库减少了由于碎⽚⽽耗尽连续内存的可能性。

•数据字典⾼速缓存 (Data dictionary cache):存储有关数据库对象的信息(即字典数据)。此缓存也称为⾏缓存,因为它将数据保存为⾏⽽不是缓冲区。

•服务器结果缓存 (Server result cache):是共享池中的⼀个内存池,并保存结果集。服务器结果缓存包含SQL查询结果缓存和PL/SQL函数结果缓存,它们共享相同的基础结构。SQL查询结果缓存存储查询和查询⽚段的结果。⼤多数应⽤程序都受益于这种性能改进。PL/SQL函数结果缓存存储函数结果集。结果缓存的良好候 选者是经常调⽤的函数,这些函数依赖于相对静态的数据。

•其他组件 (Other components):包括队列,锁存器,信息⽣命周期管理 (ILM) 位图表,活动会话历史记录 (ASH) 缓冲区和其他次要内存结构。排队是共享 的内存结构(锁),⽤于序列化对数据库资源的访问。它们可以与会话或事务相关 联。例如:控制⽂件事务,数据⽂件,实例恢复,介质恢复,事务恢复,作业队列等。锁存器⽤作低级序列化控制机制,⽤于保护SGA中的共享数据结构免于同时访问。例如:⾏⾼速缓存对象,库⾼速缓存pin和⽇志⽂件并⾏写⼊。

注意:更多详细信息,请看如下内容:Shared Pool.

07

⼤池(Large Pool)

Oracle 19c 后台进程

⼤池是数据库管理员可以配置的可选内存区域,可以为以下各项提供⼤内存分配:

•⽤户全局区域 (UGA):共享服务器和Oracle XA接⼝的会话内存(⽤于事务与多个数据库交互)

•I/O 缓冲区 (I/O Buffer Area):I/O服务器进程,并⾏查询操作中使⽤的消息缓冲区,Recovery Manager (RMAN) I/O从属进程的缓冲区,以及存储⾼级排队内存表。

•延迟插⼊池 (Deferred Inserts Pool):快速提取功能可将数据库中定义为MEMOPTIMIZE FOR WRITE的表进⾏⾼频单⾏数据插⼊。快速摄取的插⼊物也称 为延迟插⼊物。它们初在⼤缓冲池中缓冲,然后在每个对象每个会话每次写⼊1MB或60秒后由空间管理协调器 (SMCO) 和Wxxx从属后台进程异步写⼊磁盘。在SMCO后台进程进⾏扫描之前,任何会话(包括写⼊的会话)都⽆法读取该缓冲池中缓冲的任⼀数据,即使已提交的会话。该池在⼤型池中被初始化是在第⼀⾏数据 插⼊memoptimized 表时进⾏。当有⾜够的空间时,将从⼤型池中分配2G。如果⼤型池中没有⾜够的空间,则会在内部发现并⾃动清除ORA-4031,然后使⽤⼀半的 请求内存⼤⼩重试分配。如果⼤型池中仍然没有⾜够的空间,则使⽤512M和256M 重试分配,然后禁⽤该功能,直到重新启动实例。初始化池后,⼤⼩将保持不变。它不能增⻓或收缩。

•可⽤内存

⼤型池与共享池中的保留空间不同,共享池中的保留空间与从共享池分配的其他 内存使⽤相同的近少使⽤ (LRU) 列表。⼤池没有LRU列表。内存已分配,在使⽤完之前⽆法释放。

来⾃⽤户的请求是单个API调⽤,属于⽤户的SQL语句。在专⽤服务器环境中,⼀个服务器进程处理单个客户端进程的请求。每个服务器进程都使⽤系统资源,包括CPU周期和内存。在共享服务器环境中,将发⽣以下操作:

1.客户端应⽤程序向数据库实例发送请求,并且分派进程接收该请求。

\2. 分派进程将请求放在⼤池中的请求队列上。

\3. 下⼀个可⽤的共享服务器进程将处理该请求。共享服务器进程检查公共请求 队列中是否有新请求,并以先进先出的⽅式接收新请求。⼀个共享服务器进 程在队列中接收⼀个请求。

\4. 共享服务器进程对数据库进⾏所有必要的调⽤以完成请求。⾸先,共享服务器进程访问共享池中的库缓存以验证请求的项⽬;例如,它检查表是否存在,⽤户是否具有正确的特权等等。接下来,共享服务器进程访问缓冲区⾼速缓存以检索数据。如果数据不存在,则共享服务器进程将访问磁盘。不同的共享服务器进程可以处理每个数据库调⽤。因此,解析查询,获取第⼀⾏,获取下⼀⾏以及关闭结果集的请求可能分别由不同的共享服务器进程处理。由于不同的共享服务器进程可能会处理每个数据库调⽤,因此⽤户全局区域 (UGA) 必须是共享内存区域,因为UGA包含有关每个客户端会话的信 息。反过来说,UGA包含有关每个客户端会话的信息,并且必须对所有共享服务器进程可⽤,因为任何共享服务器进程都可以处理任何会话的数据库调⽤。

\5. 请求完成后,共享服务器进程将响应放置在⼤型池中的呼叫分派进程的响应队列上。每个分派进程都有⾃⼰的响应队列。

\6. 响应队列将响应发送到分派进程。

\7. 分派进程将完成的请求返回到适当的客户端应⽤程序。

注意:更多详细信息,请看如下内容:Large Pool.

08

数据库⾼速缓冲区(Database Buffer Cache)

Oracle 19c 后台进程

数据库缓冲区⾼速缓存,也称为缓冲区⾼速缓存,是系统全局区域 (SGA) 中的存储区域,⽤于存储从数据⽂件读取的数据块的副本。缓冲区是数据库块⼤⼩的内存 块。每个缓冲区都有⼀个称为数据库缓冲区地址 (DBA) 的地址。同时连接到数据库实例的所有⽤户共享对缓冲区⾼速缓存的访问。缓冲区⾼速缓存的⽬标是优化物理I/O, 并将经常访问的块保留在缓冲区⾼速缓存中,并将不经常访问的块写⼊磁盘。

Oracle数据库⽤户进程第⼀次需要特定数据时,它将在数据库缓冲区⾼速缓存中搜索数据。如果进程发现缓存中已存在的数据(缓存命中),则可以直接从内存中读取数据。如果该进程在缓存中找不到数据(缓存未命中),则它必须在访问数据之前 将数据块从磁盘上的数据⽂件复制到缓存中的缓冲区中。通过缓存命中访问数据⽐通 过缓存未命中访问数据更快。

⾼速缓存中的缓冲区由复杂算法管理,该算法使⽤近少使⽤ (LRU) 列表和 Touch Count算法的组合。LRU有助于确保近使⽤的块倾向于保留在内存中,以 ⼤程度地减少磁盘访问。

数据库⾼速缓冲区包括以下内容:

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
Oracle 19c 后台进程后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部