为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Oracle体系结构简要介绍

2019-02-25 12页 doc 34KB 46阅读

用户头像

is_079973

暂无简介

举报
Oracle体系结构简要介绍oracle体系结构简要介绍 1. oracle数据库软件介绍 oracle数据库包括:oracle数据库和oracle实例两个东西。Oracle实例指的是:oracle启动后占用的内存和后台进程的总称;oracle数据库是实例和数据文件的总称。数据库关闭后数据库实例就不存在了,数据库文件一直存在。 Oracle是由oracle软件和oracle数据库组成,oracle数据库主要指的是三类文件,分别是控制文件(*.ctl)、日志文件(*.log)、数据文件(*.dbf)。 2. oracle中内存结构介绍 oracle...
Oracle体系结构简要介绍
oracle体系结构简要介绍 1. oracle数据库软件介绍 oracle数据库包括:oracle数据库和oracle实例两个东西。Oracle实例指的是:oracle启动后占用的内存和后台进程的总称;oracle数据库是实例和数据文件的总称。数据库关闭后数据库实例就不存在了,数据库文件一直存在。 Oracle是由oracle软件和oracle数据库组成,oracle数据库主要指的是三类文件,分别是控制文件(*.ctl)、日志文件(*.log)、数据文件(*.dbf)。 2. oracle中内存结构介绍 oracle数据库启动起来后有两大内存结构,一是SGA(系统全局区),二是PGA,其中SGA是用来共享的,PGA是用来给进程使用的。 2.1 SGA介绍 Sga是就是oracle系统的全局区,在linux和nuix中用 ipcs  -m命令来查看占用的共享内存。Sga包括:共享池(shared pool)、stream池(stream pool)、大型池(large pool)、java 池、数据库缓冲区高速缓存(buffer cache)、重做日志缓冲区(log buffer)。其中主要的缓冲区包括:共享池(shared_pool)、数据库高速缓存区(db_cache)、重做日志缓冲区(log_buffer),最容易出问题的也是这三个。 在plsql中可以通过 show parameters sga 或者 show sga 来查看sga的参数配置。 2.1.1 共享池(shard pool) 共享池(shard pool)主要用来缓存SQL语句以及所对应的SQL执行。参数是shared_pool_size。 SQL语句的执行计划存放在shard pool中,下次去执行的时候先到shard pool中去找,这样大大减少资源的消耗。 SQL语句的解析以及执行计划的缓存、shard pool的访问,都是有server process 来做的。 2.1.2 数据库缓冲区高速缓存(buffer cache) 数据库缓冲区高速缓存(buffer cache)主要用来缓存DBF的数据,这些数据通过SQL语句的执行计划得来的。参数是db_cache_size 。 数据库缓存区高速缓存对应的是数据库写进程(DBWN),数据库写进程(DBWN)对应的是数据文件和控制文件。 2.1.3 重做日志缓冲区(log buffer) 重做日志缓冲区(log buffer)主要用来存放日志的。参数是log_buffer。 重做日志缓冲区对应的是日志写进程(LGWR),日志写进程(LGWR)对应的数据文件是重做日志文件,也就是日志文件。 2.1.4 stream 池(stream pool) stream 池(stream pool)是由oracle的stream来使用的。参数是streams_pool_size。 2.1.5 大型池(large pool) 大型池(large pool)用于为某些大型的进程提供大量的内存分配,如数据备份等。参数是:lorge_pool_size 2.1.6 java 池(java pool) java 池(java pool)用于java虚拟机中特定会话的所有java代码和数据,参数是:java_pool_size。 2.1.7 修改SGA参数的语法: 在10g和11g这2个版本中,空间的大小一般都是oracle自动划分出来的,也可以手动设置,它们都是动态的,所以更改后不会立即生效,需要重启,使 用命令:alter system set sga_max_size=xxxM scope=spfile;和alter system set sga_target = xxxM scope=spfile;sga_max_size必须大于等于sga_target,并且在设置sga的值大小时候是根据总内存大小的60%的 70%-80%,pga的大小是根据总内存大小的60%的20-30%。 2.2 PGA介绍 Pga是用来个进程使用的,在oracle10g中不仅前台进程分配了PGA空间,后台进程也分配了PGA空间。它是私有全局区,主要用来存放每个进程来了后单独存放内存区域。 2.3 oracle 实例介绍 把oracle启动起来后分配的内存和进程统称为oracle实例,也就是说oracle启动起来后就会产生一个实例,当oracle数据库关闭后数据库实例就会消失了。一个数据库可以对应多个实例,如oracle,一般是双数,如2、4、6、8,8台机器用的很少。 3. oracle中进程介绍 oracle中有六大进程,分别是:检查点进程(CKPT)、系统监视器(SMON)、进程监视器(PMON)、数据库写进程(DBWN)、日志写进程(LGWR)、归档进程(ARCN)。 Oracle中进程共分为三类,分别是用户进程、服务进程、后台进程。其中后天进程伴随实例的启动而启动,他们主要是维护数据库的稳定,相当于一个企业中的管理者及内部服务人员,他们并不直接给用户提供服务。 3.1 数据库写进程(DBWN) Database write(DBWN)数据库写进程,它的作用是把SGA中被修改的数据同步到磁盘文件中,保证Buffer cache 中有足够的空闲数据块的数量。用来处理数据库缓冲区的数据写到硬盘。 触发条件是:1.检查点;2.一个服务进程在设定的时间内没有找到空闲块;3、每隔三秒钟自动唤醒一次。 设置:DB_WRITER_PROCESSES用来定义DBWn进程数量。(commit命令只是把记录修改写入日志文件,不是把修改后的数据写入数据文件,下面还会提到。) 从buffer cache中将数据写入DBF的时候,是由DBWN进程来完成的。 3.2 日志写进程(LGWR) Log write(LGWR)日志写进程,它的作用是把log buffer中的日志写入联机的日志文件中,释放log用户的buffer空间。 触发条件是:1.用户发出commit命令。(在oracle中称为快速提交(fast commit):把redo log buffer中的记录写入日志文件,写入一条已提交的记录);2.三秒钟定时唤醒;3.log buffer 超过1/3,或者日志数据量超过1M;4.DBWR进程触发:DBWR试图将脏数据写入磁盘先检查它的相关rode记录是否写入联机日志文件,如果没有就通知LGWR进程,在oracle中称为提交写机制(write ahead):redo记录先于数据记录被写入磁盘。 将rode log buffer中的日志写入到redo log日志文件里去,是由LGWR来完成的。 3.3 检查点进程(CKPT) Checkpoint(CKPT)检查点进程,它的作用是维护数据库的一致性状态,检查点时刻检查数据文件盒SGA中的内容一致,这不是一个单独的进程,要和前面两个进程一起工作,DBWR写入脏数据,同事触发LGWR进程。用于将数据库当前的状态写在控制文件和数据文件的头部。 CKPT更新控制文件中检查点的记录。 触发条:日志切换(log switch)会触发检查点。 3.4 进程监视器(PMON) Process monitor (PMON)维护用户进程或者进程监视器,它的作用是1、发现用户进程异常终止,并进行清理。释放占用资源。(清理异常终止用户使用的锁)。2、向监听程序动态注册实例。 触发条件是:定时被唤醒,其他进程也会主动唤醒它。 3.5 系统监视器(SMON) System monitor(SMON)实例维护或者系统监视器,它的作用是1、负责实例恢复,前滚(Roll Forward)恢复到实例关闭时刻的状态,使用最后一次检查点后的日志进行重做。这时包括提交和未提交的事务。打开数据库进行回滚(roll back),回滚未提交的事务。(oracle承诺commit之后的数据不会丢失,现在我们可以大致的了解oracle是如何实现这个承诺的,以及在数据安全性和数据库性能之间的平衡选择);2、负责清理临时段,已释放空间。 触发条件是:定期被唤醒或者被其他事务主动唤醒。 3.6 归档进程(ARCN) Archive (ARCN)归档操作或归档进程,它的作用是发生日志切换时把写满的联机日志文件拷贝到归档目录中。 触发条件是:日志切换时被LGWR唤醒。 4. oracle中三大文件介绍 oracle中的三大文件分别是:数据库文件(*.dbf)、控制文件(*.ctl)和日志文件(*.log)。 数据文件。 4.1 数据文件(dbf) 数据文件中存放的是用户提交后的相关数据,都是commit提交后实实在在的数据。 4.2 控制文件(ctl) 控制文件中存放了一个数据库的物理结构信息(包括数据库有多少个数据文件,分别存放在哪里等信息),数据库当前运行的状态信息等。 4.3 日志文件(log) 日志文件中存放的是oracle用户对数据库所做的所有的操作,全部会以日志的方式记录到数据文件中,也就是说日志文件里面记录着数据文件的每一个数据库所有变化的过程。 5. 用户进程介绍(server process) 当用户访问数据库的时候就会创建一个server process,并且为server process 创建一个PGA内存。Server process 是实例的一个进程。 从DBF中将数据读取到buffer cache中这个过程是由server process来完成的。 DBWN和LGWR都是后台进程,server process 是前台进程,也就是说server process只是负责将数据从DBF中读取出来存放在内存中进行修改,将内存(buffer cache)中的数据写回DBF不是server process来完成的,而是由有DBRN来完成的。Server process是直接为用户服务的,用户把SQL语句给了server process,然后server process做了以下几件事情:第一、对SQL语句进行解析,将SQL语句变为执行计划;第二、然后去执行解析好的执行计划;第三、获取相关数据,将数据存放在buffer cache中;第四、将获取到存放在buffer cache中,最后将buffer cache中的数据返回给用户。 SQL语句对标的修改都是在内存里面修改的,通过server process来完成,所有的日志都是server process产生的。 将修改完成的数据从内存(buffer cache)写入到数据文件DBF中是由DBWn来完成的,DBWN进程负责将server process修改的数据写回磁盘,DBWN是后台进程,server process是前台进程。Server process 只负责读取数据,server process是直接给用户提供服务的,要是server process慢的话用户就会感觉数据库比较慢,所以我们希望server process做最有意义的事情,后台进程能做的事情尽量给后台进程来完成,不要给server process来完成。 6. SQL语句的执行过程 客户端录入SQL语句,通过网络到达数据库实例,server process 就收SQL语句,然后将SQL语句解析为执行计划,最后oracle拿着执行计划去操作数据,将最终的结果保存在buffer cache中。 SQL语句执行的第一步是解析,解析的时候消耗很多资源,包括内存资源,IO资源,CPU资源,最主要消耗的是内存资源。计算机的三大资源包括:CPU、IO、内存资源。 SQL语句的解析以及执行计划的缓存、shard pool的访问,都是有server process 来做的。 Server process 执行SQL语句获取数据的时候,它首先找的是buffer cache,如果buffer cache中没有找到他要找的相关数据,然后从DBF中把数据取出来,取出来后不是直接把数据返回给用户 ,而是将数据存储在buffer cache中,最后将buffer cache中数据返回给用户。 解析SQL语句步骤包括:第一、首先server process 来判断SQL语句的语法有没有问题,如果有问题就不会执行下面的相关操作;第二、判断SQL语句所访问的资源是否有权限;第三、判断SQL语句所访问资源是否存在;第四、判断SQL语句该怎么去执行,一条SQL语句有N种执行,server process从这N种方案中选择一个最有的方案来执行。 7. 逻辑IO和物理IO的区别 逻辑(login)IO指的是server process 执行SQL语句的时候,首先读取buffer cache,判断是否有请求的数据,如果有那么就会直接从buffer cache中读取数据,这种读叫做逻辑读,也叫内存读。 物理(physice)IO指的是server process在buffer cache 中找不到数据的时候就要从DBF中读取数据,这个读叫做物理读,物理读也叫磁盘读。 8. 命中率 命中率指的是不需要进行磁盘访问的情况下在内存结构中找到常用数据块的频率。 命中率的计算方式:逻辑读除以逻辑读jia物理读(L/(L+p)),命中率越高说明逻辑读越大,命中率越低说明物理读越大,对于oracle数据库来说,命中率低一定有问题,但是命中率高不一定没有问题,可以参考《Oracle检查命中率的相关知识》进行观察。 在linux中查看命中率的命令是 vmstat 1 10 和 iostat 10,其中iostat中有个tps的参数,它的值就是每秒传输的速度,Blk_read/s物理读的速度,Blk_wrtn/s物理写的速度,Blk_read读的总数,Blk_wrtn写的总数。 9. 缓冲区的状态 缓冲区的状态包括:已连接、干净、空闲(未使用)和脏几种类型。内存和DBF中数据一致的话我们叫做干净,没有使用的内存叫做空闲,内存和DBF中的数据不一致的时候把内存中的数据叫做脏数据,当内存中有脏数据将要写入到DBF中,在写和正在读的这一瞬间我们叫做ping(已连接)住了。 缓冲区优先使用的是空闲或未使用的,接着就是干净的,全部是脏的时候就会触发DBWR,将脏的数据写入磁盘,对脏的不能覆盖。 10. 服务器进程 服务器进程首先会到数据库文件中读取数据处理,服务器进程读取数据的时候首先会到SGA数据库缓冲区高速缓存(buffer cache)中找数据,有的话直接返回给用户,没有的话再到数据库文件中读取,同时服务器进程也会修改SGA数据库缓冲区高速缓存中的数据。服务器进程对buffer cache进行读和写,buffer cache 写回数据文件由DBWN进程来完成的。 Oracle 简单来说是由六大池子,六大进程,三大文件组成。六大池子包括:shard poll(共享池),streams poll (streams池)、large pool(大型池)、java pool(java 池)、buffer cache(数据库缓存区高速缓存)、redo log buffer(重做日志缓冲区);六大进程指的是:数据库写进程(DBWN)、日志写进程(LGWR)、检查点进程(CKPT)、进程监视器(PMON)、系统监视器(SMON)、归档进程(ARCN);三大文件包括:数据文件(dbf)、日志文件(log)、控制文件(ctl)。
/
本文档为【Oracle体系结构简要介绍】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索