Oracle体系结构总结(oracle体系结构详解)
sinye56 2024-10-06 00:39 3 浏览 0 评论
一、ORACLE体系结构组成
ORACLE体系结构主要分为:内存结构、进程结构、存储结构。内存结构主要由SGA和PGA构成;进程结构主要由用户进程和ORACLE进程组成;存储结构主要由逻辑存储和物理存储构成。
二、ORACLE内存结构
1、SGA系统全局区是Oracle Instance的基本组成部分,在实例启动时分配。是一组包含一个Oracle实例的数据和控制信息的共享内存结构。主要是用于存储数据库信息的内存区,该信息为数据库进程所共享(PGA不能共享的)。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
2、PGA是一块包含一个服务进程的数据和控制信息的内存区域。你每启动一个数据库进程就会在内存中创建一个pga,它是独有的,非共享。
三、SGA概述
系统全局区是数据服务中实例的必要组成部分,由很多小内存区共同构成,各个小内存区存放不同的信息,系统全局区用于暂存可以被所有进程( 服务进程和后台进程 )共享的信息,对系统的运行性能有好处,SGA在实例启动的时候自动分配 ,实例关闭时自动释放。SGA暂存系统的大量共享数据,对系统性能影响很大,所以需要为SGA选择适当的管理方式。
1、共享池(Shared Pool)
(1)数据字典缓存区(Data Dictionary Cache)
用于存放SQL语句相关的数据文件、表、索引、列、用户、其他的数据对象的定义和权限信息等。
(2)库缓存区(Librabry Cache)
该区域存放共享SQL和PL/SQL代码。服务器进程在执行语句时,首先会匹配库缓存,如果存在相同语句则无需编译直接使用已编译的执行计划。绑定变量不是在编译阶段赋值的,而是在运行阶段赋值的,因此含有绑定变量的SQL语句可以不用重新编译。
(3)SQL和PL/SQL结果缓存
2、大池(Large Pool)
大池是个可选的内存区域,可提供一个大的缓冲区供数据库的备份与恢复操作过程使用。数据库的备份恢复、执行具有大量排序操作的SQL语句、并行化的数据库操作时可能需要用到大池。
3、Java池(Java Pool)
JAVA池在数据库中支持JAVA 的运行,存放JAVA代码和JAVA语句的语法分析表
4、流池(Stream Pool)
用于缓存流进程在数据库间移动/复制数据时使用的队列消息。一般从重做日志中提取变更记录的进程和应用变更记录的进程会用到流池。
5、数据库缓存区(Database Buffer Cache)
用于缓存当前或最近使用的从磁盘读取的数据块的拷贝,来优化数据库的I/O减少物理读/写。Oralce依据LRU算法对该内存区域进行block-level的更新.LRU算法(简单理解就是最近最小使用的数据调出内存)。
(1)脏缓存快(Dirty buffers)
数据被修改过并且已经commit但是还未写入磁盘的数据缓存块,脏缓存块最终被DBWn进程写入到磁盘的数据文件中永久保存。
(2)命中缓存块(Pinned buffers)
最近正在被访问的缓存块,始终被保留在数据高速缓存中,不会被写入数据文件。
(3)空闲缓存块(Free buffers)
该缓存块中没有数据,等待被写入数据。oracle从数据文件中读取数据后,寻找空闲缓存块,以便写入其中。
6、日志缓冲区(Redo Log Buffer)
日志缓冲区是一块比较小的内存区域,它是用来短期存储将写入到磁盘中的重做日志信息。日志缓冲区也是为了减少磁盘IO,减少用户的等待时间。
四、PGA
PGA是指单个服务器进程或者单个后台进程所需的数据和控制信息。PGA是在用户进程连接到数据库并创建一个会话时自动分配。该区域内保留每个与oracle数据库连接的用户进程所需的内存,当一个用户会话结束,PAG就会释放。 排序区
1、排序区
当用户需要对数据进行排序时,系统会将需要排序的数据保存到PGA中的排序区内,然后在这个排序区内对这些数据进行排序。如果发现用户的很多操作都需要用到排序,那么为用户设置比较大的排序区,可以提高用户访问数据的效率。
2、会话区
会话区保存了会话所具有的权限、角色、性能统计等信息,通常都是由数据库系统自我维护。
3、 堆栈区
保存着绑定变量、会话变量、SQL语句运行时的内存结构等重要的信息,通常都是由数据库系统自我维护
4、游标区
游标区是一个动态的区域,当用户执行游标语句打开游标时,系统会在PGA中创建游标区,当关闭游标时,这个区域就会被释放。创建与释放需要占用一定的系统资源,花费一定的时间,如果频繁的打开和关闭游标,就会降低语句的执行性能。
五、进程结构
1、SMON
系统监视器进程,负责打开数据库时候的恢复、整理数据库表(段)空间的碎片等。它通过验证所有数据文件和联机重做日志文件来打开数据库。数据库状态置为open之后,SMON的主要工作内容就放在各种内部任务上,如合并空闲空间,处理表(段)空间碎片。
2、PMON
进程监视器进程,负责监视所有服务器进程,并且检查连接会话中的问题。如果会话异常中止,PMON会及时销毁对应的服务器进程,将PGA内存返回给系统空闲内存池,并回滚所有未提交的事务。
3、DBWn
数据库写进程,它主要负责将Database Buffer Cache中的脏缓冲区写入数据文件,做持久化。这里需要再次声明,数据库写进程DBWn是不受我们commit影响的,我们commit影响的是日志写进程LGWR。DBWn选择要写入的脏缓冲区的原则是:最近最少使用。也就是说,DBWn将最近最少使用的脏缓冲区写入数据文件。
以下四种情况,DBWn将执行写操作:
(1)没有可用的缓冲区
当数据被读取到Database Buffer Cache时,需要先查找空闲的缓冲区,也就是说既不脏也没被占用的缓冲区。如果长时间找不到空闲缓冲区,那么DBWn就会将某些脏缓冲区写入磁盘。完成之后,就有可用的空闲缓冲区了。
(2)脏缓冲区过多
第二种情况是脏缓冲区过多,这个多是由Oracle一个内部值决定的。
(3)每三秒钟(三秒钟超时)
第三种情况,三秒钟超时。DBWn每三秒钟会对一些缓冲区进行写操作。前面两种情况是强制写,而三秒钟超时意味着即使没有脏缓冲区,也要DBWn也要执行一次清理。
(4)遇到检查点
前面三种情况是部分写入(称为增量检查点或提高增量检查点位置),最后这种情况是全部写入,把所有的脏缓冲区全部写入数据文件。 ?前三种情况是在Oracle运行过程中自动执行的,不会给系统的I/O造成比较大的压力。但是在执行检查点的情况下,可能同时有非常大量的脏缓冲区需要写入磁盘,所以当时的磁盘I/O会到达顶峰,CPU使用率很可能会爆高到100%。因此,一般在不得已的时候才使用检查点:
4、LGWR
日志写进程,负责将日志缓冲区Log Buffer中的内容写入到磁盘的联机(重做)日志文件中,这个写入的过程称为“日志缓冲区转储”。当我们对数据做任何更改时(包括增删改),这个更改会写入到两个缓冲区,一个是Database Buffer Cache ,用于写入到数据文件;另一个是Redo Log Buffer,用于写入联机重做日志文件。为了防止丢失更改,LGWR进程几乎实时地将Redo Log Buffer写入到联机重做日志文件中。当我们commit时,会话挂起,LGWR执行写入操作,写入完成,事务标记为不可callback的已提交返回给会话,会话重新可用。
(1)会话发出commit
保证了已提交commit的事务中的所有变更都可以在联机重做日志中记录,这是数据库数据不丢失的保证。如果数据库损坏,可以在还原上一次备份的基础上,利用自上次备份以来的(归档)联机重做日志进行事务重做。当然,commit的事务会重新写入数据文件,未提交的事务不会持久化存储。
(2)日志缓冲区1/3满
日志缓冲区三分之一满的时候,也会使LGWR执行写操作。一般来说日志缓冲区只有MB级大小,应用程序(比如JAVA程序)会在不到一秒的时间生成足以充满1/3的重做内容(更改),所以说,LGWR会几乎实时地执行写操作。此后,在会话发出commit命令的时候,由于没有太多要一次性写入到日志中的内容,所以commit也几乎是实时完成的。
(3)DBWn要写入数据文件
为了防止瞬间断电等突发情况的发生而导致数据的不一致,DBWn在写入数据文件之前要执行日志写操作,因为日志写操作能提供数据在没有写入数据文件情况下的数据可恢复性。另外由于DBWn的写操作是有三秒钟超时的,而日志写操作必须要在DBWn之前执行一次,所以LGWR也就有了三秒钟超时的触发条件。
5、CKPT
执行CKPT进程会使得DBWn进行写操作。CKPT不再必须执行完全检查点,但是它必须跟踪重做日志中的增量检查点位置。在必要的时候,CKPT会执行增量检查点,以使得增量检查点的位置前移。增量检查点位置是发生故障时,重做开始的位置。CKPT使用当前检查点位置去刷新控制文件。
6、MMON
可管理性监视器进程,以前也叫Memory Monitor,内存监视器进程用于支持Oracle数据库的自我管理和自我调整的进程,简单地理解为“监视器的监视器”。
7、MMAN
MMAN,Memory Manager,内存管理进程,支持内存分配的自动管理。有了这个进程,我们DBA只需要去设置总的内存大小,SGA以及PGA等,MMAN会在DBA设置的总体大小范围内进行自动分配。
8、LREG
侦听器注册进程,它注册了有关数据库实例和Oracle网络监听调度程序的信息。这样,用户就可以通过侦听器连接到数据库。同时LREG还能根据工作负载与性能信息更新侦听器,这在多实例环境下是比较智能的。之前这个功能是由PMON来实现的。
9、ARCn
它将联机重做日志文件的内容写入到归档日志文件中。由于联机重做日志文件只有那么几组,每组几个文件,每个文件就几兆,它们会频繁地被刷新,不可能保留长期且完整的重做条目,所以,为了保证可恢复性,必须在联机重做日志文件被刷新前将其归档。如果启用了归档模式,ARCn将会启动,一旦ARCn异常,数据库实例将会挂起。ARCn最多有30个,命名为ARC1~ARC30。
10、RECO
RECO,Recoverer,恢复进程。它是在分布式架构下,解决分布式事务失败问题的进程。
相关推荐
- Linux基础知识之修改root用户密码
-
现象:Linux修改密码出现:Authenticationtokenmanipulationerror。故障解决办法:进入单用户,执行pwconv,再执行passwdroot。...
- Linux如何修改远程访问端口
-
对于Linux服务器而言,其默认的远程访问端口为22。但是,出于安全方面的考虑,一般都会修改该端口。下面我来简答介绍一下如何修改Linux服务器默认的远程访问端口。对于默认端口而言,其相关的配置位于/...
- 如何批量更改文件的权限
-
如果你发觉一个目录结构下的大量文件权限(读、写、可执行)很乱时,可以执行以下两个命令批量修正:批量修改文件夹的权限chmod755-Rdir_name批量修改文件的权限finddir_nam...
- CentOS「linux」学习笔记10:修改文件和目录权限
-
?linux基础操作:主要介绍了修改文件和目录的权限及chown和chgrp高级用法6.chmod修改权限1:字母方式[修改文件或目录的权限]u代表所属者,g代表所属组,o代表其他组的用户,a代表所有...
- Linux下更改串口的权限
-
问题描述我在Ubuntu中使用ArduinoIDE,并且遇到串口问题。它过去一直有效,但由于可能不必要的原因,我觉得有必要将一些文件的所有权从root所有权更改为我的用户所有权。...
- Linux chown命令:修改文件和目录的所有者和所属组
-
chown命令,可以认为是"changeowner"的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。当只需要修改所有者时,可使用...
- chmod修改文件夹及子目录权限的方法
-
chmod修改文件夹及子目录权限的方法打开终端进入你需要修改的目录然后执行下面这条命令chmod777*-R全部子目录及文件权限改为777查看linux文件的权限:ls-l文件名称查看li...
- Android 修改隐藏设置项权限
-
在Android系统中,修改某些隐藏设置项或权限通常涉及到系统级别的操作,尤其是针对非标准的、未在常规用户界面显示的高级选项。这些隐藏设置往往与隐私保护、安全相关的特殊功能有关,或者涉及开发者选项、权...
- 完蛋了!我不小心把Linux所有的文件权限修改了!在线等修复!
-
最近一个客户在群里说他一不小心把某台业务服务器的根目录权限给改了,本来想修改当前目录,结果执行成了根目录。...
- linux改变安全性设置-改变所属关系
-
CentOS7.3学习笔记总结(五十八)-改变安全性设置-改变所属关系在以前的文章里,我介绍过linux文件权限,感兴趣的朋友可以关注我,阅读一下这篇文章。这里我们不在做过的介绍,注重介绍改变文件或者...
- Python基础到实战一飞冲天(一)--linux基础(七)修改权限chmod
-
#07_Python基础到实战一飞冲天(一)--linux基础(七)--修改权限chmod-root-groupadd-groupdel-chgrp-username-passwd...
- linux更改用户权限为root权限方法大全
-
背景在使用linux系统时,经常会遇到需要修改用户权限为root权限。通过修改用户所属群组groupid为root,此操作只能使普通用户实现享有部分root权限,普通用户仍不能像root用户一样享有超...
- 怎么用ip命令在linux中添加路由表项?
-
在Linux中添加路由表项,可以使用ip命令的route子命令。添加路由表项的基本语法如下:sudoiprouteadd<network>via<gateway>这...
- Linux配置网络
-
1、网卡名配置相关文件回到顶部网卡名命名规则文件:/etc/udev/rules.d/70-persistent-net.rules#PCIdevice0x8086:0x100f(e1000)...
- Linux系列---网络配置文件
-
1.网卡配置文件在/etc/sysconfig/network-scripts/下:[root@oldboynetwork-scripts]#ls/etc/sysconfig/network-s...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)