首页 > 其他分享 >34、检查点及崩溃恢复

34、检查点及崩溃恢复

时间:2024-11-22 14:18:20浏览次数:1  
标签:事务 log buffer 34 检查点 磁盘 日志 数据 崩溃

log buffer space

多个sp连接上数据库,每个sp有一个PGA,修改数据,在PGA里面都生成了日志,然后把日志写到log buffer里;这时候由于lgwr的性能问题或者是IO比较差,或者存储的性能比较差,没有来得及把日志从log buffer里面写到redo log里面,使得log buffer的压力比较大,把log buffer存满了,这种情况我们称为:log buffer space(等待事件)

崩溃恢复

第一种情况:事务已提交,但是对应的数据还未写入磁盘
一个用户修改了一个数据块,这就成了一个脏块,这个事务已经提交,但是修改的数据还没写入磁盘,但redo log肯定已经写入磁盘了;这时候,数据库崩溃了,oracle就会使用redo log将脏块给跑出来,就是使用redo log来把数据库崩溃的那个时刻的脏块构造出来,就要找最早脏的数据块的LRBA地址,然后数据库崩溃的那个时刻的脏块的日志一定在LRBA地址之后,

第二种情况:事务未提交,但是对应的数据已经写入磁盘
一个用户修改了一个数据块,这就成了一个脏块,这个事务还没提交,但是修改的数据已经写入磁盘,因为dbwr进程会完全根据lgwr,适当的参考ckpt,把修改的脏块写到磁盘上,这时候,dbwr不管脏块上有没有未提交事务;修改的数据已经写入磁盘,redo log也一定写入磁盘上了;
因为数据库里记录着所有未提交事务的事务信息,事务所对应的数据块信息,事务的undo数据;这时候数据库崩了,oracle就会根据数据块里事务的信息,找到事务的信息,发现事务确实没有提交,这时候,就成了一个死事务;
死事务就是:事务没有提交,并且对应的会话没有了;
然后sp访问到这个数据块的时候,使用undo信息,把这个数据块回滚一下,这个未提交事务也就被回滚了

第三种情况:事务未提交,对应的数据也还没写入磁盘
一个用户修改了一个数据块,这就成了一个脏块,这个事务还没提交,对应的日志也还在log buffer里面,还没写入到磁盘;这时候数据库崩了,数据和日志都还写入磁盘,这种情况没必要恢复了,丢就丢了

buffer cache里面,每个buffer数据块有一个LRBA地址,ckpt检查点队列会将这些数据块按照最早脏的时间链接起来,这个链叫做:ckpt检查点队列
数据库里面最早脏的那个数据块所对应的LRBA地址,ckpt进程每隔3秒,会将最早脏的数据块的LRBA地址写入到控制文件中
oracle数据库崩溃以后,oracle会根据这个最早脏的LRBA地址,使用redo log,将redo log里面在LRBA地址之后的所有日志前滚,将崩溃那一个时刻的所有脏块重新构造出来

日志空跑的情况

使用日志来跑出脏块的时候,会出现一种情况:空跑
就是日志有:SCN号、dba地址、相应的操作、对哪一行做的操作,数据块的事务槽里有SCN号;数据库崩溃恢复的时候,oracle就会拿着redo log里面日志的SCN号去跟数据块里面事务槽里的SCN号比较,如果,数据块里面事务槽里的SCN号比日志的SCN号小,说明数据块比日志要新,这条日志就空跑,接着下一条日志;然后这条日志也是修改的同一个数据块的日志,日志的SCN号比数据块里面事务槽里的SCN号都大,说明数据块没有日志的新,就需要这条日志来构造出这个脏块

等待事件:

1、free buffer waits :
就是sp把一个数据从数据库读到buffer里面的时候,就找LRU,找了半天没找到,就抛出free buffer wiats,这时候说明数据库好脏,还有就是数据块被频繁的访问

2、log file parallet waits:
日志从log buffer往redo log写的时候lgwr进程的一个写的性能

3、log file sync :
一个sp执行一个事务,然后事务提交了,提交以后,触发lgwr把日志写到磁盘,然后lgwr又将日志写到磁盘的这一个过程响应回来给sp,这一个过程就是:log file sync

4、log file switch(check point incomplete:检查点不完全):
log file切换(switch),然后要使用下一个log file的时候,dbwr还没有将日志对应的数据写到磁盘上;log file的状态为active,这样的redo log还没能被覆盖使用,就没有可以使用的log file (可以将日志文件增大,增多文件),导致数据库短暂的夯住(挂起)了

5、log file switch (archived needed) :
redo log被覆盖以前,要先归档到归档日志里面,如果日志文件没有被归档到归档日志,日志文件就不能被覆盖,就可能会导致没有可以使用的log file文件,数据库就会夯住了(可能是归档日志空间满了,这是长时间的夯住)

6、buffer buzy waits :
就是一个sp正在修改一个数据块,然后另外一个sp也要读这个数据块,就产生了锁等待:1、正在从磁盘读到内存的时候;2、其他进程正在修改

市场机制

buffer cache里面的buffer,可用块按照冷热(根据TCH来判断的)的顺序链起来,LRU链起来;脏块也按照冷热链接起来,LRUW链;然后想要把数据从磁盘读到buffer里面的时候,它就覆盖冷的块;dbwr写的时候,也是先把冷的脏块先写到磁盘;
也就是说,你冷就经常被覆盖,你不冷就经常在buffer里面

TCH:数据块冷热的一个判断依据
一个sp正在访问一个数据块,这个数据块的头部有一个TCH(touch),访问一次这个数据块,touch就加一,如果touch值很高的话,就说明这个数据块经常被访问,这个块就是热块

全表扫描,6个块全部调到内存中,很读很多的block到buffer cache 中。当一个表发生全表扫描时,将块放到冷端很快就被置换出来。虽然有6个块,一边向里面调,一边置换出来,虽然产生大量的io,但是并不一定占用大量的buffer。

keep池和recsql池
对于一个经常被全表扫描的小表,oracle要把表的全部数据调到buffer里面去,这些数据被放在冷的一端,然后刚调进去就被换出来了,因为其他sp在访问一个块的时候,先覆盖冷的块,刚调进去就被换出来,刚调进去就被换出来,对于这种情况可以使用keep池;
从表面上看,数据库单独从buffer cache里面拿出一个空间来做keep池;然后将经常全表扫描的小表做成keep表,这时候不访问这个keep表的时候,也不会使用这个keep池;然后访问这个表的时候,就调到keep池里;访问keep表的时候,就会自动被调到keep池里去
keep:其实是将数据无论是全表扫秒还是索引访问都会放到热端,不容易被置换出来,但是就造成了一个对空间的浪费;然后其他表用到的keep池的空间就小了,同时IO也起来了

recsql池:就是将表放到buffer cache的冷端,就容易被置换出来;
比如:对于一个只是晚上才访问的大表,但是也会走索引,频繁的访问,这时候就会导致buffer cache被这个表过多的占用,然后第二天白天的时候,这个表是要被访问的,但是这个表过多的占用buffer cache了,访问其他表的时候,其他的表就会被被挤出来,挤出来以后,数据库的物理IO就会很高:因为访问其他表的时候,这些表都被挤出来了,访问的时候就要从磁盘往内存里读,就导致物理IO很高,这时候就可以做一个recsql池,将表放到冷端,这样就容易被置换出来,就不会过多的占用buffer cache的空间了,所以对一些技术使用的时候要谨慎

标签:事务,log,buffer,34,检查点,磁盘,日志,数据,崩溃
From: https://www.cnblogs.com/xgq20210831/p/18562789

相关文章

  • AO3416-ASEMI中低压N沟道MOS管AO3416
    编辑:llAO3416-ASEMI中低压N沟道MOS管AO3416型号:AO3416品牌:ASEMI封装:SOT-23批号:最新最大漏源电流:6.5A漏源击穿电压:20VRDS(ON)Max:30mΩ引脚数量:3芯片个数:沟道类型:N沟道MOS管、低压MOS管漏电流:ua特性:N沟道MOS管、场效应管工作温度:-55℃~150℃备受欢迎的AO3416MOS管 ......
  • 计算机毕业设计必看必学38034+Web影评系统设计与实现原创定制程序单片机,java、PHP、p
    摘   要网络的兴起,让电影从业者和影迷之间的交流变得更加的便捷,影评系统可以成为电影公司和制片方的重要参考,通过分析用户对电影的评价和反馈,了解观众的需求和口碑反应。基于这些信息,电影公司可以制定更有效的营销策略,提升电影的知名度和票房。同时也让用户有了一个可......
  • 电脑服务器应用程序exe监控 卡死崩溃关闭 自动重新创建运行服务启动方案
    作为物联网数据采集解决方案专业提供商,数采物联网小编daq-iot在这里做以下内容介绍,并诚挚的欢迎大家讨论和交流。1.产品概述本软件功能用途:监控电脑或服务器exe程序运行,在exe程序由于异常或其他原因退出后,自动启动exe程序,具有开机自启动功能,可以在开机后自动运行监控程序本身......
  • 2345看图王去广告增强版
    前言2345看图王去广告版一款好用的图片浏览和管理软件。不论什么格式的图片,它都能轻松浏览、管理和编辑。在文件夹里看图片,你可以方便地翻页、放大缩小,还能直接打印。最棒的是,它还能播放GIF这样的动态图片,并且可以保存你喜欢的那一帧。全屏查看和幻灯片功能,让看图片变得更有趣。......
  • 【力扣热题100】[Java版] 刷题笔记-234. 回文链表
    题目:234.回文链表给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。解题思路回文定义:是指正读和反读都相同的字符序列。将链表数据获取出来,再通过前后指针向中间遍历,数据一致,则是回文;如果不一致则不是回文。......
  • AO3407-ASEMI中低压P沟道MOS管AO3407
    编辑:llAO3407-ASEMI中低压P沟道MOS管AO3407型号:AO3407品牌:ASEMI封装:SOT-23最大漏源电流:-4.1A漏源击穿电压:-30V批号:最新RDS(ON)Max:65mΩ引脚数量:3沟道类型:P沟道MOS管芯片尺寸:MIL漏电流:恢复时间:5ns芯片材质:封装尺寸:如图特性:中低压MOS管、P沟道MOS管工作结温:-55℃~150......
  • AO3404-ASEMI中低压N沟道MOS管AO3404
    编辑:llAO3404-ASEMI中低压N沟道MOS管AO3404型号:AO3404品牌:ASEMI封装:SOT-23批号:最新最大漏源电流:5.8A漏源击穿电压:30VRDS(ON)Max:30mΩ引脚数量:3芯片个数:沟道类型:N沟道MOS管、低压MOS管漏电流:ua特性:N沟道MOS管、场效应管工作温度:-55℃~150℃备受欢迎的AO3404MOS管 ......
  • 日常 34
    html列表标签:有序列表无序列表定义列表项超链接标签href指定访问资源的urltarget指定代开资源的方式:_self当前页面打开_blank在空白页面打开表格标签:定义表格border定义表格边框宽度width定义表格宽度cellspacing规定单元格之间的空白定义行align定义表格行的内......
  • 代码随想录算法训练营第八天|344.反转字符串、541.反转字符串||、卡玛网54.替换数字
    344和541来自leetcode,54来自卡玛网344.反转字符串很简单的一道题,直接把数组一分为二,第一个和最后一个互换就行,直到遍历到数组一半,就结束了,从第一个往后就是s[i],最后一个往前就是s[s.lenght-i-1]。publicclassSolution{publicvoidreverseString(char[]s){......
  • AO3401-ASEMI中低压P沟道MOS管AO3401
    编辑:llAO3401-ASEMI中低压P沟道MOS管AO3401型号:AO3401品牌:ASEMI封装:SOT-23最大漏源电流:-4.2A漏源击穿电压:-30V批号:最新RDS(ON)Max:60mΩ引脚数量:3沟道类型:P沟道MOS管芯片尺寸:MIL漏电流:恢复时间:5ns芯片材质:封装尺寸:如图特性:中低压MOS管、P沟道MOS管工作结温:-55℃~150......