代码改变世界

体系结构 --- 实例和数据库

2020-11-30 17:03  EniNiemand  阅读(80)  评论(0编辑  收藏  举报

话不多说,直接上图

 

1. 各种概念

实例(INSTANCE):由内存区SGA:system global area (六大池:共享池,数据缓冲区,日志缓冲区,JAVA池,流池,大池)+ 后台进程(六大后台进程:DBWR、LGWR、PMON、SMON、CKPT、LEGR)组成

数据库:由一系列文件组成的(数据文件 .dbf,控制文件 .ctl,在线日志文件 .log,参数文件,口令密码文件等)

SGA(System global area):系统全局区,也可以称为共享全局区,共享内存。SGA由所有服务器进程和后台进程共享。

PGA(Program global area):程序全局区,也可以称为私有全局区,私有内存。服务器进程(User progress)对PGA的访问是独占的,每个服务器进程(User progress)都有自己的PGA。

Oracle Server : 实例(Instance) + 数据库(Database)

Instance : 内存 + 后台进程

Oracle Memory : SGA + PGA

把内存中的数据写入数据库(磁盘),是由后台进程主导的

把数据库(磁盘)中的数据写入内存区,是由服务进程(Server progress)主导的

 

2. 图片解析(针对专有服务模式 Dedicated server)

实验:假设用户A要查询数据库中EMP表的数据,用户A在客户端发出 SQL> select * from emp; 指令后,后台的运转流程如下:

解析:用户A发出指令后,就产生了用户进程(User progress),此时服务器监听到此用户进程,就会派生出一个服务进程(Server progress)与之对接,服务进程(Server progress)拿着用户的请求到SGA中索取与用户相关的数据。

           如果SGA中有该数据的缓存,则服务进程(Server progress)直接返回该数据给用户;

   如果SGA中没有该数据的缓存,则服务进程(Server progress)会到数据库(磁盘)中调取该数据到SGA中,然后再把数据返回给用户。

   如果用户A在客户端发出的请求是 SQL> select * from emp order by sal;  则服务进程(Server progress)将数据返回给用户前,需先把数据放进PGA(Program global area)进行排序处理,处理完成后再返回给用户。

 

3. 实例与数据库的区别