mysql面試題——日志

一:為什么需要REDO日志

  1. 緩沖池可以幫助我們消除CPU和磁盤之間的鴻溝,checkpoint機制可以保證數據的最終落盤,然而由于checkpoint 并不是每次變更的時候就觸發 的,而是master線程隔一段時間去處理的。所以最壞的情況就是事務提交后,剛寫完緩沖池,數據庫宕機了,那么這段數據就是丟失的,無法恢復。
  2. 事務包含持久性的特性,就是說對于一個已經提交的事務,在事務提交后即使系統發生了潰,這個事務對數據庫中所做的更改也不能丟失。
    解決思路:先寫日志,再寫磁盤,只有日志寫入成功,才算事務提交成功,這里的日志就是rodo日志

二:什么是REDO日志

Redo Log是MySQL用于實現崩潰恢復和數據持久性的一種機制。在事務進行過程中,MySQL會將事務做了什么改動記錄到Redo Log中。當系統崩潰或者發生異常情況時,MySQL會利用Redo Log中的記錄信息來進行恢復操作,將事務所做的修改持久化到磁盤中。

三:redo的組成

  1. 重做日志的緩沖 (redo log buffer) ,保存在內存中,是易失的
  2. 重做日志文件 (redo log file) ,保存在硬盤中,是持久的

四:redo的整體流程

  1. 先將原始數據從磁盤中讀入內存中來,修改數據的內存拷貝
  2. 生成一條重做日志并寫入redo log buffer,記錄的是數據被修改后的值
  3. 當事務commit時,將redo log buffer中的內容刷新到 redo log file,對 redo log file采用追加
    寫的方式
  4. 定期將內存中修改的數據刷新到磁盤中
    在這里插入圖片描述

五:redo log的刷盤策略

redo log的寫入并不是直接寫入磁盤的,InnoDB引擎會在寫redo log的時候先寫redo log buffer,之后以一定的頻率刷入到真正的redo log file 中。這里的一定頻率怎么看待呢?這就是我們要說的刷盤策略。
在這里插入圖片描述
注意,redo log buffer刷盤到redo log file的過程并不是真正的刷到磁盤中去,只是刷入到 文件系統緩存中去,真正的寫入會交給系統自己來決定。那么對于InnoDB來說就存在一個問題,如果交給系統來同步,同樣如果系統宕機,那么數據也丟失了。
針對這種情況,InnoDB提供了一個參數,該參數控制 commit提交事務時,如何將 redo log buffer 中的日志刷新到 redo log

  1. 設置為0 :表示每次事務提交時不進行刷盤操作。(系統默認master thread每隔1s進行一次重做日志的同步)
  2. 設置為1 :表示每次事務提交時都將進行同步,刷盤操作( 默認值 )
  3. 設置為2 :表示每次事務提交時都只把 redo log buffer 內容寫入 page cache,不進行同步。由os自己決定什么時候同步到磁盤文件。

六:什么是Undo Log日志

Undo Log是事務原子性的保證,在事務中更新數據的前置操作其實是要先寫入一個 undo log。如果事務需要回滾,則會從Undo Log中找到相應的記錄來撤銷事務所做的修改。另外,Undo Log還支持MVCC(多版本并發控制)機制,用于在并發事務執行時提供一定的隔離性。

七:undo log的生命周期

假設有2個數值,分別為A=1和B=2,然后將A修改為3,B修改為4

1. start transaction;
2.記錄 A=1 到undo log;
3. update A = 3;
4.記錄 A=3 到redo log;
5.記錄 B=2 到undo log;
6. update B = 4;
7.記錄B = 4 到redo log;
8.將redo log刷新到磁盤
9. commit

在1-8步驟的任意一步系統宕機,事務未提交,該事務就不會對磁盤上的數據做任何影響。
如果在8-9之間宕機,恢復之后可以選擇回滾,也可以選擇繼續完成事務提交,因為此時redo log已經持久化。
若在9之后系統宕機,內存映射中變更的數據還來不及刷回磁盤,那么系統恢復之后,可以根據redo log把數

面試題:

1. redolog和undolog區別?
(1)redo log:記錄的是"物理級別"上的頁修改操作,比如頁號xx、偏移量yyy,寫了’zzz’數據
undo log:記錄的是邏輯操作,比如對某一行數據進行了INSERT語句操作,那么 undo log就記錄一條與之相反的DELETE操作
(2)redo log:目的是為了保證事務的持久性,主要用于崩潰恢復
undo log:目的是為了保證事務的原子性和一致性,主要用于事務回滾

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211163.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211163.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211163.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

持續集成交付CICD:Jenkins配置Nexus制品發布

目錄 一、實驗 1.Jenkins配置Nexus制品發布 一、實驗 1.Jenkins配置Nexus制品發布 (1)策略 發布其實就是下載制品,然后將制品發送到目標主機,最后通過腳本或者指令啟動程序。 (2)安裝Maven Artifact …

前端知識(十一)———js判斷上傳的文件是GBK編碼還是UTF-8

1、獲取文件二進制數據,這里只做示例,例如element-ui中文件上傳的beforeUpload方法,返回的file對象,然后使用FileReader對其進行轉換,再進行后續判斷 function beforeUpload(file: File) { const reader new FileRe…

uniapp圖片預覽

用的是Uview組件庫里面的 直接在頁面寫上&#xff1a; <u-album singleSize"100" :urls"[https://lxt.jingyi.icu/item.img]"></u-album> 這圖片路徑是我自己的 你們可以按照組件庫里面的方法去實現

DataFrame的使用

查看數據類型及屬性 # 查看df類型 type(df) # 查看df的shape屬性&#xff0c;可以獲取DataFrame的行數&#xff0c;列數 df.shape # 查看df的columns屬性&#xff0c;獲取DataFrame中的列名 df.columns # 查看df的dtypes屬性&#xff0c;獲取每一列的數據類型 df.dtypes df.i…

標準成本核算基礎知識 – 了解間接費用成本流程 - Part4

原文地址&#xff1a;Basics of Standard Costing – Understanding overhead cost flow-Part 4 | SAP Blogs 這是我理解標準成本計算及其流程的另一篇文檔的延續。 標準成本核算基礎知識 - 了解成本構成結構 - 第 3 部分 管理費用是只能間接歸因于產品的成本&#xff0c;例如…

react中使用react-konva實現畫板框選內容

文章目錄 一、前言1.1、API文檔1.2、Github倉庫 二、圖形2.1、拖拽draggable2.2、圖片Image2.3、變形Transformer 三、實現3.1、依賴3.2、源碼3.2.1、KonvaContainer組件3.2.2、use-key-press文件 3.3、效果圖 四、最后 一、前言 本文用到的react-konva是基于react封裝的圖形繪…

基礎課20——從0-1客服機器人生命周期

溫馨提示&#xff1a;篇幅較長&#xff0c;可點擊目錄查看對應節點。 1.機器人搭建期 搭建機器人包含&#xff1a;素材整理、問題提煉、相似問題補充、答案編輯、問題分配引擎等等步驟&#xff0c;不同廠商可能有所區別&#xff0c;但關鍵功能的實現離不開以下步驟。 1.1素材…

Flutter路由的幾種用法

Flutter路由跳轉 基本路由跳轉 ElevatedButton(onPressed: () {//基本路由跳轉Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) {return const SearchPage();}),);},child: const Text("基本路由跳轉"), ), search.dart頁面 impo…

說說react的事件機制?

React的事件機制是一種用于處理用戶界面事件的方式&#xff0c;它建立在原生DOM事件的基礎上&#xff0c;提供了一種更高級、更一致的方式來處理事件。 1. 合成事件&#xff08;Synthetic Events&#xff09;&#xff1a;React引入了合成事件的概念&#xff0c;它是一種React自…

K8S學習指南(3)-minikube的安裝

這里寫自定義目錄標題 簡介Windows 系統安裝步驟 1&#xff1a;安裝 Hypervisor步驟 2&#xff1a;安裝 kubectl步驟 3&#xff1a;安裝 Minikube步驟 4&#xff1a;啟動 Minikube CentOS 系統安裝步驟 1&#xff1a;安裝 Hypervisor步驟 2&#xff1a;安裝 kubectl步驟 3&…

《形式語言與自動機理論(第4版)》筆記(三)

文章目錄 [toc]前導《形式語言與自動機理論&#xff08;第4版&#xff09;》筆記&#xff08;一&#xff09;《形式語言與自動機理論&#xff08;第4版&#xff09;》筆記&#xff08;二&#xff09; 第四章&#xff1a;正則表達式4.1|啟示4.2|正則表達式的形式定義正則表達式性…

排序算法之四:直接選擇排序

1.基本思想 每一次從待排序的數據元素中選出最小&#xff08;或最大&#xff09;的一個元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的數據元素排完 。 2.直接選擇排序 在元素集合array[i]--array[n-1]中選擇關鍵碼最大(小)的數據元素 若它不是這組元素中的…

練習:最大公約數

1.什么是公約數 公約數&#xff0c;亦稱“公因數”。 它是指能同時整除幾個整數的數 。 如果一個整數同時是幾個整數的 約數 &#xff0c;稱這個整數為它們的“公約數”&#xff1b;公約數中最大的稱為最大公約數。 2.輾轉相除法 輾轉相除法之所以有效是因為其基于一個核心原…

給定有n個結點的樹和長度為n的排列,q次詢問:l, r, x, 若p[l, r]中存在至少一個結點是x的后代,輸出yes,否則輸出no

題目 #include<bits/stdc.h> using namespace std; const int maxn 1e6 5; int n, q; vector<int> G[maxn]; int L[maxn], R[maxn];//L[i]表示結點i的時間戳&#xff0c;R[i]表示結點i的后代中時間戳的最大值 int p[maxn]; int t[maxn]; struct Node{int id, fl…

MapReduce

1. 請解釋MapReduce的工作原理。 MapReduce是一種編程模型&#xff0c;主要用于大規模數據集&#xff08;特別是非結構化數據&#xff09;的并行處理。這個模型的核心思想是將大數據處理任務分解為兩個主要步驟&#xff1a;Map和Reduce。 在Map階段&#xff0c;輸入數據被分解…

ssm的健身房預約系統(有報告)。Javaee項目。ssm項目。

演示視頻&#xff1a; ssm的健身房預約系統&#xff08;有報告&#xff09;。Javaee項目。ssm項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層體系結構&#xff0c;通過Spring Spring…

AI模型平臺Hugging Face存在API令牌漏洞;大型語言模型與任務模型

&#x1f989; AI新聞 &#x1f680; AI模型平臺Hugging Face存在API令牌漏洞&#xff0c;黑客可竊取、修改模型 摘要&#xff1a;安全公司Lasso Security發現AI模型平臺Hugging Face上存在API令牌漏洞&#xff0c;黑客可獲取微軟、谷歌等公司的令牌&#xff0c;并能夠訪問模…

c++中的內聯函數和編譯器

內聯函數和編譯器&#xff1a; 內聯函數并不是何時何地都有效&#xff0c;為了理解內聯函數何時有效&#xff0c;應該要知道編譯器碰到內聯 函數會怎么處理&#xff1f; 對于任何類型的函數&#xff0c;編譯器會將函數類型(包括函數名字&#xff0c;參數類型&#xff0c;返回值…

Unknown parameter in InstanceGroups[0]: “Configurations“, must be ... 解決方法

使用 aws emr modify-instance-groups 更新集群配置時可能會遇到如下錯誤信息&#xff1a; Unknown parameter in InstanceGroups[0]: “Configurations”, must be one of: InstanceGroupId, InstanceCount, EC2InstanceIdsToTerminate, ShrinkPolicy 這一報錯其實和提供的j…

C語言進階之路之頂峰相見篇

目錄 一、學習目標 二、宏定義 預處理 宏的概念 帶參宏 無值宏定義 三、條件編譯 條件編譯 條件編譯的使用場景 四、頭文件 頭文件的作用 頭文件的內容 頭文件的基礎語句&#xff1a; GCC編譯器的4個編譯步驟&#xff1a; 總結 一、學習目標 掌握宏定義含義和用…