进程结构
server process服务器进程
前台进程(foreground process):server process(服务器进程)
用户连接到数据库实例以后,暂时可以认为是:对每一个用户连接,oracle实例会启动一个进程,专门对这个连接会启动一个进程,这个进程它属于server process这一类,因为server process有好多进程;
server process是用户连接数据库以后诞生的这么一个进程,这个进程叫前台进程,它主要为用户服务,它是整个数据库对外提供服务的一个窗口
server process做什么事情呢?
一个用户在用户端写了一个SQL(DML),然后提交,这个SQL发送到数据库;然后server process接到这个SQL,server process会做所有的事情,哪些事情呢?server process接到这个SQL以后,第一步,接到这个SQL以后,拿着这个SQL在shared pool里面找,看看这个SQL有没有被解析过,也就是此前有没有被执行过(也就是在shared pool里面找sql和sql执行计划这个动作是在server process里面完成的),找到了就产生软解析,没找到就产生硬解析,假设没找着,就要进行硬解析,而硬解析的一系列过程也是在server process里面完成的,解析完了之后,接着要执行,执行就是要修改或者获取数据,这时候server process在buffer cache里面找,没找到数据时,又要到数据库(磁盘)的数据块里找,找到之后把数据读到buffer cache里去(从block里找到,然后读取数据到buffer cache里去产生物理读,物理读这个动作也是server process完成的),读取到buffer cache里面之后,接着要修改它,修改就要产生redo log,redo log在PGA里面产生,产生redo log完了以后接着修改,修改完了以后,server process把redo日志写到log buffer里面去,之后commit提交。
LGWR(log write)进程
提交的时候,有一个进程LGWR(log write),把log buffer里面的日志写到数据库的redo log里面去,这个进程很勤快的,因为log buffer的大小很小,这个进程是一个后台进程,也就是用户连不连接,这个进程都不受影响,
LGWR进程的特点(LGWR被触发的条件):
1、当log buffer里面的日志超过1M的时候,它就往数据库的redo log里面写
2、当log buffer的容量超过1/3的时候,它也往数据库的redo log里面写
3、每隔3秒钟,它也往数据库的redo log里面写
4、commit的时候,也会触发它把log buffer里面的日志往数据库的redo log里面写
PGA
对于每一个server process,oracle都会分配一块工作空间内存给它,这块内存是server process独有的,这块内存叫PGA
有这么一种情况,就是每个server process在工作的时候,所需要的内存大小是不一样的,而且随着时间的变化,这块内存有时候大,有时候小,对于这种情况,oracle预算分配一个总的PGA,然后对于每一个server process来说,需要的内存不够时,oracle会分配,而内存多的话,就释放回去,需要的时候再分配;比如,现在有100个server process,每个server process需要多少内存就分配多少内存给,而如果有1000个server process的话,每个server process需要多少内存它就不会分配多少内存给了,需要10个G,可能它就分配你3个G了,相当于这个PGA超出了预算
oracle有一个限制:对于每个server process分配的内存不会超过200M,还有一个是不会超过PGA预算的5%,两者取最小值
PGA是server process获取到的一块内存,从oracle 9i开始,oracle提供了这么一个PGA的自动管理
DBWR进程
从磁盘块读取到buffer cache的数据块,经过修改,修改之后的数据就和磁盘里的数据不一致了,修改之后的数据块叫做dirty buffer(脏块),这个脏块早晚要写到磁盘上,把脏块写到磁盘的这个动作呢,又由一个后台进程DBWR来完成
DBWR进程可以有多个进程,从进程0~进程9
DBWR进程被触发的条件:
1、脏块太多的时候
2、每隔3秒钟
3、server process在buffer cache里找数据没找到,要到磁盘上找的时候
arch进程(归档进程)
arch进程(归档进程):
当数据库的一个redo log满了之后,要把redo log里的日志写到arch file里去,这个动作由arch进程来完成
arch进程的数量可以由spfile来控制,实现快速拷贝
process monitor(pmonitor进程监控进程)
例如:用户连接到数据库实例以后,产生一个server process,这时候呢,有这么一种情况,就是用户突然网断了,server process还在一直等着这个用户,然后连接超时了,它又去连接这个用户,但是连接不上,这时候,这个server process就成了死进程了,这个时候就需要pmonitor,周期性的启动起来,把类似于server process的这种死进程清理一下,避免占用PGA,或者还占用着buffer cache里面的某些资源
pmonitor进程是主外的
smonitor进程
例如:oracle数据库里面出现了一些碎片,这时候就需要用smonitor来进行整理碎片;还有就是,在数据库正常运行期间,会有很多脏块,这些脏块对应的日志已经写到磁盘了,这时候数据库突然崩了,但是这些脏块还没来得及写入磁盘里,所以数据库重新启动以后,数据库会使用redo log把这些脏块恢复过来,这也需要smonitor来完成
smonitor进程是主内的
oracle后台进程里面的核心进程
1、pmonitor进程
2、smonitor进程
3、DBWR进程
4、LGWR进程
5、arch进程
CKPT(check point)检查点进程
它会每隔3秒钟会启动一下,会把数据库的一些相关的一些信息,写到控制文件里去,记录着一些数据文件和redo log的新旧的信息
控制文件记录着数据库的物理结构,也就是数据文件、redo log文件
标签:log,process,数据库,server,进程,讲解,oracle,redo
From: https://www.cnblogs.com/xgq20210831/p/18551929