oracle笔记---oracle数据库结构解析

oracle数据库架构

1.实例(内存+进程)

   内存:

   1)SGA (System Global Area):里面的数据为共享数据(数据需要被所有人共同使用)

   主要包括:(具体见图)

    a.数据块(表记录)

    b.library cache:一条sql被解析,执行计划存放在library cache中,另一用户再执行这个sql,就会从library cache中找,如果  有这个sql执行计划,此sql就不需要被解析了

    c.Data Dictionary cache:存储某个对象,例如表的属性(列、空间、权限)

 

    2)PGA(Program Global Area,也叫做程序缓存区):某个会话独有的数据和其他,每个会话都有自己的pga

         SGA和PGA构成了实例的内存部分(内存就是放置在这的一块区域,后台进程操纵实现功能)

进程:

   oracle后台进程、服务器端进程、客户端进程

   oracle服务端进程有两种模式:默认是delicated(专有),share(共享)

2.Database静态、被动

   文件:

            控制文件、重做日志文件、数据文件

            只有相关进程需要写数据和读数据的时候,才会使用到这些文件

3.其他组成部分

   参数文件、密码文件、归档日志

整体架构图:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

详解:

 

1.实例:

实例如何响应用户的请求?

用户进程首先向数据库发送一条sql指令,数据库端启动server process与client process组成一个session,server process会处理用户的请求,服务器端要自己开一块内存,这个内存就是pga,执行sql语句就要访问sga,先去shared pool解析sql语句,得到执行计划,按照执行计划访问数据(database buffer cache),访问数据有多种方式,访问方式与执行计划有关,先去内存database buffer cache中找,找不到再去磁盘上读,不是后台进程读,而是server profess直接去文件里读,修改数据块在database buffer cache上改,修改数据块就会产生redo log,当用户commit后,redo会通过LGWR把数据写到磁盘上,发出check point命令,DBWN会把脏数据写到磁盘上

1)内存

     a.SGA区

     oracle最重要的内存区域,是数据库中共享资源的内存区域。

      ---SQL字典区(shared pool)

      ---数据缓冲区(db buffer)

      ---重做日志区(redo log buffer)

    作用:

       a.SQL语句解析,生成执行计划,执行计划被共享

       b.数据被访问,被共享

       c.产生重做日志

       select只需要前两步就可以完成,如果对数据块进行修改,则会产生重做日志

       重做日志每三秒往磁盘上刷一次或者用户commit后立刻往磁盘上刷一次,只要重做日志写到磁盘上了,数据块写没写到磁盘上无所谓,可利用重做日志恢复

 

    查看sga大小:

     >show sga;

    b.PGA区(属于某一个会话)

    当内存排序不够的时候,放到临时表空间排序

   PGA里发生了什么:

   a.私有SQL区

   私有SQL区包含了绑定变量值和运行时期内存结构信息等数据,每一个运行SQL语句的会话都有一个块私有SQL区。所有提交了相同SQL语句的用户都有各自的私有SQL区,并且他们共享一个共享SQL区。因此,一个共享SQL区可能和多个私有共享去相关联。

   b.游标和SQL区

    一个ORACLE预编译程序或OCI程序的应用开发人员能够很明确的打开一个游标,或者控制一块特定的私有SQL区,将他们作为程序运行命名的资源

   c.会话内存

   基于排序的操作(ORDER BY、GROUP BY、ROLLUP、窗口函数)

 

   查看pga大小

    pga大小为所有session的总和

    sga+pga基本上是数据库所有内存

2)进程:

 ---后台进程:

  查看后台进程数量:

   SMON(System Monitor):

   a.实例恢复(前滚-启动数据库-回滚)

   b.回收空闲空间

   c.释放临时段

   PMON (Process Monitor):

   a.回滚事务

   b.释放锁及其他资源

   c.重启死掉的调度器(在共享服务器中用)

   d.在监听器中注册服务信息

 

    DBWRn(Data Base Writer):

    将数据缓冲区中的所有修改过的缓冲块数据写到磁盘数据文件,如果有大量的脏数据需要往磁盘上写,就需要n个DBWR

 

     LGWR(Log Writer):

     把日志缓存区的数据从内存写到磁盘的REDO文件里

 

     CKPT(Check Point):

     启动DBWn来写脏数据

     然后会更新DATAFILE的HEADER和控制文件的HEADER。而HEADER中有同步所需要的信息,即CHECKPOINT的信息

     正常情况下,ORACLE的所有文件必须靠CHECKPOINT同步

 

 

   为什么数据往磁盘上写是数据块要写,日志也要写?

   数据位置固定往磁盘上写很耗时间(分散写),日志是顺序写

   ---服务器进程:

   接受客户端响应,与后台进程不同

    a.接受客户端发出的sql请求

    b.完成sql的分析,执行计划和sql的执行过程

    c.抽取数据,排序,数据分析,把结果返回给客户端

    d.分配的内存为pga

一条sql的执行过程

监听器会把服务转到实例上,oracle启动服务器进程,和客户端建立连接,一条会话完成(v$session),在shared pool中进行sql解析,生成执行计划,server process会按照执行计划访问数据,在db buffer中找不到再去数据文件里找,数据文件里找到之后再读到db buffer中,可以修改数据块。修改的时候要产生undo数据,set id=1(之前id=99),会将99放到undo表空间中,以便于进行回滚,放完之后才会将id修改为1,commit后,lgwr把undo产生的回滚日志和当前数据块产生的日志写到磁盘上,更新成功,系统作检查点,把修改的脏数据块写到数据文件中

 

 

参考视频:炼数成金

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值