oracle服务器由数据库以及实例组成,数据库由数据文件,控制文件等物理文件组成,实例是由内存结构+后台进程组成,实例又可以看做连接数据库的方式,在我看来就好比一家公司,实例就是一个决策的办公室,大大小小的决定都要从这个办公室解决。

实例分成内存结构以及后台进程部分。

内存结构主要可以分为:共享池(shared pool),数据库高速缓冲区(data buffer cache),重做日志缓冲区(Redo Log Buffer Cache)。

三大内存池:

共享池(shared pool):用来存放一些共享的资源,比如sql,pl/sql,数据字典一些信息,一条SQL的执行首先在shared pool中进行校验,解析,然后在执行。它主要由两个内存结构区域构成:Library cache和Data dictionary cache,共享池会对执行的sql进行校验,然后解析,最后执行,这里提到两个概念:

    硬解析:没有被执行过的sql,会在shared pool中进行校验,然后解析,最后执行

           1.查看语法是否错误

        2.查看数据字典,检查SQL语句中涉及的对象和列是否存在

        3.通过优化器创建一个最佳的执行计划

        4.将该游标所产生的执行计划,SQL文本缓存到Library cache的hash中

    软解析:将相同的sql存放在library cache中,减少硬解析一个或多个步骤,从而减少大量的资源使用。

所以写sql最好加上变量,减少硬解析,也就减少了IO的开销。

修改共享池的大小:ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;

数据库高速缓冲区(data buffer cache):SGA的一部分,oracle利用buffer cache来管理data block数据块(8k),及用户使用过的数据,比如用户查询到磁盘上的数据就存储在这,修改数据时,同时保存数据库被修改前(前镜像)和修改后(后镜像),避免了对数据文件的直接操作,cache的最终目的还是减少磁盘的IO。一条SQL的执行,首先要将数据文件中的数据提到buffer cache中来修改,然后在buffer cache中修改完,再将这些脏数据写回数据文件中。

     工作机制:假设查询到,或者更改的数据都已放在了buffer cache中,buffer cache的存量就那么大,怎么保证buffer cache不断更新呢?cache利用链表来实现数据块的快速定位,一个数据块8K大小,一次读取会有若干个数据块,缓冲区则是利用LRU(最近最少使用)算法来进行清除以前没用过的数据块,一次来释放内存。从而保证了一致性。

        脏数据:一条更新sql,需要把数据文件的数据提到内存中来修改,但是还没有写回数据文件,这时在buffer cache中的这些已经更改过的不一致数据就叫做脏数据。

重做日志缓冲区(Redo Log Buffer Cache):记录一些ddl,dml操作的缓冲区,用来缓存对于数据块的所有修改。如果正在执行一条sql语句,在内存中已经修改完成,但是还没有将这些脏数据写进数据文件中,但是断电了,内存中谢谢东西被释放掉了,这些东西就真的没了,但是有了log buffer,他会先记录,将这些操作记录下来,下次重新开机的时候,这些操作内存可以在log buffer中找到,重新执行一遍,相当于数据没有丢,还是保证了数据的一致性。

后台主要五大进程:

dbwn(写进程):顾名意义,oracle中有很多后台进程,写进程是很重要的,就是把脏数据写进磁盘的一个过程。

      1.脏数据阈值达到25%时

      2.扫描到整个buffer cache没有空闲时

      3.ddl,dml操作时

      4.表空间脱机

      5.热备命令时

这些都会触发dbwn写进程

lgwr(log日志写进程):将log buffer缓冲区中记录的操作写入物理文件,日志文件中去,所以这个操作必须比较快速切频繁才能保证数据的一致性,同时也必须在dbwn操作之前触发lgwr,否则数据文件已经写进去了,日志文件还没有记录是不行的。

      1.commit;

      2.log buffer达到内存的三分之一时

      3.dbwn写进脏数据之前

      4.每隔3秒

ckpt(检查点进程):检查点的主要任务就是督促dbwn刷新脏块,也类似一个scn号,记录一个时间点的行为

      1.调度数据写

      2.会将自己完成的检查点写到数据文件头

      3.把已经完成的检查点写进控制文件中

smon(系统进程):system monitior,系统监控,数据库的主进程,系统可以根据smon进程来判断oracle是否启动

      1.系统监控管理,定期合并空闲,回收临时段

      2.做实例的恢复,前滚,后滚,释放资源

pmon(监控进程):监控其他非核心进程,释放垃圾进程。如果你的进程卡死了,断掉了,pmon会帮你释放挂掉进程占得资源。

一条SQl的执行过程:

一条SQL在内存结构与后台进程工作机制的更多相关文章

  1. 巩固java(二)----JVM堆内存结构及垃圾回收机制

    前言:        我们在运行程序时,有时会碰到内存溢出(OutOfMemoryError)的问题,为了解决这种问题,我们有必要了解JVM的内存结构和垃圾回收机制. 正文: 1.JVM堆内存结构   ...

  2. JVM内存结构 JVM的类加载机制

    JVM内存结构: 1.java虚拟机栈:存放的是对象的引用(指针)和局部变量 2.程序计数器:每个线程都有一个程序计数器,跟踪代码运行到哪个位置了 3.堆:对象.数组 4.方法区:字节流(字节码文件) ...

  3. JVM结构、GC工作机制详解

      JVM结构.内存分配.垃圾回收算法.垃圾收集器.下面我们一一来看. 一.JVM结构 根据<java虚拟机规范>规定,JVM的基本结构一般如下图所示: 从左图可知,JVM主要包括四个部分 ...

  4. JVM结构、GC工作机制详解(转)

    原文地址:http://blog.csdn.NET/tonytfjing/article/details/44278233 JVM结构.内存分配.垃圾回收算法.垃圾收集器.下面我们一一来看. 一.JV ...

  5. 【转载】JVM结构、GC工作机制详解

    文章主要分为以下四个部分 JVM结构.内存分配.垃圾回收算法.垃圾收集器.下面我们一一来看. 一.JVM结构 根据<java虚拟机规范>规定,JVM的基本结构一般如下图所示: 从左图可知, ...

  6. 共享内存shared pool (5):详解一条SQL在library cache中解析

    前面介绍的 shared pool,library cache结构,都是为了说明一条SQL是如何被解析的.先看下面的图: 图中涉及的各结构简单介绍 父HANDLE,里面有父游标堆0的地址.. 父游标堆 ...

  7. Oracle之内存结构(SGA、PGA)

    一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: PGA(Program Global Area):由每个服务进程.后台进程专有:每个进程都有一个PGA. ...

  8. oracle 初探内存结构

    数据库的存储机构 分为 逻辑存储结构 和 物理存储结构 逻辑存储结构: 数据库.表空间.段.区.块         物理存储结构: 数据库.控制文件.数据文件.初始化参数文件.OS块等. 一个区只能在 ...

  9. Oracle内存结构:SGA PGA UGA

    内存结构是oracle数据库最重要的组成部分之一,在数据库中的操作或多或少都会依赖到内存,是影响数据库性能的重要因素Oracle数据库中包括3个基本的内存结构: 一. 系统全局区  (System G ...

随机推荐

  1. ThreadPoolExecutor自定义线程池

    1.ThreadPoolExecutor创建线程池的构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long ...

  2. 使用java获取手机号归属地等信息httpClient实现

    java获取手机号归属地 一般想获取手机号归属地等信息个人是无法获取的,但是可以通过调用第三方接口获取,具体百度搜索很多这里例子提供一个淘宝的接口 ,该功能已经发布到网站作为一个在线小工具,拿走不谢: ...

  3. [LC] 350. Intersection of Two Arrays II

    Given two arrays, write a function to compute their intersection. Example 1: Input: nums1 = [1,2,2,1 ...

  4. iOS炫酷动画图案、多种选择器、网络测速、滑动卡片效果等源码

    iOS精选源码 对网络进行测速 自实现大标题,配合原生骨架屏demo 简单方便的pickerVIew记录数据 LZPickerView 科技风绘制组件,简单快速"画"出炫酷图案 R ...

  5. in+sb's+基数词的复数形式|UFO|the minutes|

    Hawking became world-famous in ________.  A. his thirties in the 1970's  B. the thirties in his 1970 ...

  6. selenium元素定位(一)

    Selenium提供了8种定位方式. id name class name tag name link text partial link text xpath css selector 这8种定位方 ...

  7. android高仿抖音、点餐界面、天气项目、自定义view指示、爬取美女图片等源码

    Android精选源码 一个爬取美女图片的app Android高仿抖音 android一个可以上拉下滑的Ui效果 android用shape方式实现样式源码 一款Android上的新浪微博第三方轻量 ...

  8. java 内存溢出-与gc

    感谢原作者 在日常中我们经常遇到这样的错误:java.lang.OutOfMemoryError: Java heap space. 但是除了heap space 的OutOfMemoryError, ...

  9. C# 内置的类型转换方法

    C# 提供了下列内置的类型转换方法: 序号 方法 & 描述 1 ToBoolean把类型转换为布尔型. 2 ToByte把类型转换为字节类型. 3 ToChar如果可能的话,把类型转换为单个 ...

  10. Inventor 卸载工具,完美彻底卸载清除干净Inventor各种残留注册表和文件

    一些同学安装Inventor出错了,也有时候想重新安装Inventor的时候会出现这种本电脑windows系统已安装Inventor,你要是不留意直接安装,只会安装Inventor的附件,Invent ...