一条SQL在内存结构与后台进程工作机制
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在内存结构与后台进程工作机制的更多相关文章
- 巩固java(二)----JVM堆内存结构及垃圾回收机制
前言: 我们在运行程序时,有时会碰到内存溢出(OutOfMemoryError)的问题,为了解决这种问题,我们有必要了解JVM的内存结构和垃圾回收机制. 正文: 1.JVM堆内存结构 ...
- JVM内存结构 JVM的类加载机制
JVM内存结构: 1.java虚拟机栈:存放的是对象的引用(指针)和局部变量 2.程序计数器:每个线程都有一个程序计数器,跟踪代码运行到哪个位置了 3.堆:对象.数组 4.方法区:字节流(字节码文件) ...
- JVM结构、GC工作机制详解
JVM结构.内存分配.垃圾回收算法.垃圾收集器.下面我们一一来看. 一.JVM结构 根据<java虚拟机规范>规定,JVM的基本结构一般如下图所示: 从左图可知,JVM主要包括四个部分 ...
- JVM结构、GC工作机制详解(转)
原文地址:http://blog.csdn.NET/tonytfjing/article/details/44278233 JVM结构.内存分配.垃圾回收算法.垃圾收集器.下面我们一一来看. 一.JV ...
- 【转载】JVM结构、GC工作机制详解
文章主要分为以下四个部分 JVM结构.内存分配.垃圾回收算法.垃圾收集器.下面我们一一来看. 一.JVM结构 根据<java虚拟机规范>规定,JVM的基本结构一般如下图所示: 从左图可知, ...
- 共享内存shared pool (5):详解一条SQL在library cache中解析
前面介绍的 shared pool,library cache结构,都是为了说明一条SQL是如何被解析的.先看下面的图: 图中涉及的各结构简单介绍 父HANDLE,里面有父游标堆0的地址.. 父游标堆 ...
- Oracle之内存结构(SGA、PGA)
一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: PGA(Program Global Area):由每个服务进程.后台进程专有:每个进程都有一个PGA. ...
- oracle 初探内存结构
数据库的存储机构 分为 逻辑存储结构 和 物理存储结构 逻辑存储结构: 数据库.表空间.段.区.块 物理存储结构: 数据库.控制文件.数据文件.初始化参数文件.OS块等. 一个区只能在 ...
- Oracle内存结构:SGA PGA UGA
内存结构是oracle数据库最重要的组成部分之一,在数据库中的操作或多或少都会依赖到内存,是影响数据库性能的重要因素Oracle数据库中包括3个基本的内存结构: 一. 系统全局区 (System G ...
随机推荐
- ThreadPoolExecutor自定义线程池
1.ThreadPoolExecutor创建线程池的构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long ...
- 使用java获取手机号归属地等信息httpClient实现
java获取手机号归属地 一般想获取手机号归属地等信息个人是无法获取的,但是可以通过调用第三方接口获取,具体百度搜索很多这里例子提供一个淘宝的接口 ,该功能已经发布到网站作为一个在线小工具,拿走不谢: ...
- [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 ...
- iOS炫酷动画图案、多种选择器、网络测速、滑动卡片效果等源码
iOS精选源码 对网络进行测速 自实现大标题,配合原生骨架屏demo 简单方便的pickerVIew记录数据 LZPickerView 科技风绘制组件,简单快速"画"出炫酷图案 R ...
- in+sb's+基数词的复数形式|UFO|the minutes|
Hawking became world-famous in ________. A. his thirties in the 1970's B. the thirties in his 1970 ...
- selenium元素定位(一)
Selenium提供了8种定位方式. id name class name tag name link text partial link text xpath css selector 这8种定位方 ...
- android高仿抖音、点餐界面、天气项目、自定义view指示、爬取美女图片等源码
Android精选源码 一个爬取美女图片的app Android高仿抖音 android一个可以上拉下滑的Ui效果 android用shape方式实现样式源码 一款Android上的新浪微博第三方轻量 ...
- java 内存溢出-与gc
感谢原作者 在日常中我们经常遇到这样的错误:java.lang.OutOfMemoryError: Java heap space. 但是除了heap space 的OutOfMemoryError, ...
- C# 内置的类型转换方法
C# 提供了下列内置的类型转换方法: 序号 方法 & 描述 1 ToBoolean把类型转换为布尔型. 2 ToByte把类型转换为字节类型. 3 ToChar如果可能的话,把类型转换为单个 ...
- Inventor 卸载工具,完美彻底卸载清除干净Inventor各种残留注册表和文件
一些同学安装Inventor出错了,也有时候想重新安装Inventor的时候会出现这种本电脑windows系统已安装Inventor,你要是不留意直接安装,只会安装Inventor的附件,Invent ...