【MySQL】redo log --- 刷入磁盤過程

1、redo log基本概念

redo log的相關概念這里就不再過多闡述,網上有非常多的好的資料,可以看下縹緲大神的文章:https://www.cnblogs.com/cuisi/p/6525077.html,個人感覺介紹的非常詳細。

?

2、數據更改過程簡述

MySQL 在更新數據的時候,都是將數據先從磁盤拉到 buffer pool 中,在buffer pool中修改完成后再寫到磁盤中,也就是說MySQL中數據的更改都是要經過buffer pool的。
回到這個更新數據的過程中來看:當數據在buffer pool中更改完成的這一刻,更新后的數據是“最新”的,因為此時磁盤中的數據還是更改前的“舊數據”,而我們都是將磁盤中已經持久化的數據作為“標準數據”,因此此時 buffer pool 中的“最新”數據也常人們被稱為“臟數據(dirty data)”。

比如將 update 一百行記錄作為一個事務,在這個事務執行過程中會將更新后的數據先寫入redo log buffer,redo log buffer 再將數據刷入(請注意刷入這個用語,而非寫入,后面會詳細介紹)redo log中(這點和 binlog 不同,binlog 是在事務 commit 后一次性寫入,而 redo log 在事務執行過程中就會寫入)。

?

3、redo log刷新過程
首先需要明白兩個概念:
fsync:傳統的unix系統在內核中都設有緩沖區,并且大多數的I/O都會通過緩沖進行。當將數據寫入文件時,內核通常先將該數據復制到其中一個緩沖區中,如果該緩沖區尚未寫滿,則并不將其排入輸出隊列,而是等待其寫滿或者當內核需要重用該緩沖區以便存放其他磁盤塊數據時,再將該緩沖排入輸出隊列,然后待其到達隊首時,才進行實際的 I/O 操作。這種輸出方式被成為延遲寫。
unix提供了sync、fsync、fdatasync三個函數,sync只是將所有修改過的塊放入寫隊列,不管它是否寫磁盤結束就返回;fsync會等待寫磁盤結束才會返回。

O_DIRECT選項:O_DIRECT選項是Linux文件寫入中的一個選項,開啟了這個選項以后,數據就可以跳過系統層的緩存,直接寫入磁盤。

redo log并沒有打開O_DIRECT選項,所以redo log buffer只是先刷入redo log file,此時刷入的數據并沒有落到磁盤上,而是放在文件系統的緩存中。之后為了確保redo log寫入磁盤,就通過fsync操作將數據寫入磁盤。(redo log buffer到redo log file只是“刷入”的過程,這個時候并沒有寫入磁盤,而是寫入了OS層的文件系統緩存。)


4、重要參數
innodb_flush_log_at_trx_commit:用來控制redo log刷新到磁盤的策略。


默認值是1,表示每次事務提交的時候都調用fsync來寫入到磁盤;
0表示事務在執行過程中,日志一直放在redo log buffer中,但是在事務commit的時候,不寫入redo log file,而是通過master線程每秒操作一次,從redo log buffer寫入到redo log file中。
2表示事務提交時將redo log buffer刷入redo log file,也即刷入系統文件緩存中,不進行fsync操作,由系統來進行fsync操作。此時如果數據庫層宕機,則不會丟失redo log,但是如果服務器宕機,這個時候文件系統中的緩存還沒有fsync到磁盤文件中,這個時候就會丟失這一部分數據。

?

轉載于:https://www.cnblogs.com/haohaozhang/p/10093182.html

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

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

相關文章

WPF DataGrid根據內容設置行顏色

轉: https://code.4noobz.net/wpf-change-color-of-a-row-in-a-datagrid-depending-on-the-value/ 轉載于:https://www.cnblogs.com/Mindy-hym/p/11475024.html

QQ web api

QQ的很多功能和信息可以通過web方式獲得~以下鏈接,星號應換成你要查詢的QQ號一、Activities Previewhttp://labs.qq.com/ie8/preview/?uin******二、QQ空間訪問次數查詢(需權限)http://g.qzone.qq.com/fcg-bin/cgi_emotion_list.…

delphi tclientsocket接收不到返回數據_RS—485中教你主站發送報文結構、從站返回報文結構?系列11...

作者:馬樂1.主站發送報文結構大家可以看到我之前寫的文章中的程序都是沒有什么具體功能的,都是兩個站點之間互相傳遞數據,這些數據我們只是看看是否可以正常接收發送,數據本身是沒有任何含義的。很明顯在實際使用過程中我們是不會…

MybatisPlus 通用枚舉無法正確取值

正常使用mybatisplus <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.4</version></dependency> 使用后發現項目中原先對枚舉值的轉換存在異常&#xff1a; ER…

零基礎學習 Python 之條件語句

寫在之前 我們寫程序&#xff0c;就好比學生時代寫作文一樣&#xff0c;由 “字” 到 “詞” 到 “句” 最后到 “文章” 。此前我們學會了一些詞語&#xff08;對象類型&#xff09;&#xff0c;我們接下來就是學如何造句&#xff0c;而在編程語言里&#xff0c;句子被叫做語句…

python input 文件名_Python播放音頻與錄音

這一講主要介紹些音頻基本處理方式&#xff0c;為接下來的語音識別打基礎。三種播放音頻的方式使用 python 播放音頻有以下幾種方式&#xff1a;os.system()os.system(file) 調用系統應用來打開文件&#xff0c;file 可為圖片或者音頻文件。缺點&#xff1a;要打開具體的應用&a…

jQuery選擇器和方法的等價關系

層級選擇器 1、ancestor descendant &#xff08;后代選擇器&#xff09; 在給定的祖先元素下匹配所有的后代元素 $(“form input”) $(.div span)選取<div>里的所有的<span>元素 2、parent child &#xff08;子選擇器&#xff09;在給定的父元素下匹配所有…

ActionScript 3.0 Step By Step系列(四):來自面向對象開發之前的吶喊:“學會寫可重用的代碼”...

增強代碼的可重用能力&#xff0c;從創建可重用的代碼開始&#xff0c;可重用的代碼則是通過從現有代碼中重構加以封裝,使其成為功能單一的可復用代碼塊。這句話籠統點說便是“封裝”或“抽象”。 在實際的編程開發中&#xff0c;要實現代碼重用&#xff0c;而不是每次都去Copy…

express利用nodemailer發送郵件(163郵箱)

Nodemailer 是一個簡單易用的Node.js郵件發送組件 首先安裝這個組件 npm install nodemailer --save安裝之后&#xff0c;可以在某個get請求下&#xff0c;發送郵件&#xff0c;具體路由代碼&#xff1a; const express require("express"); const nodemailer requ…

使用 Solid 私有化存儲 IPFS 文件哈希值

背景 星際文件系統 IPFS&#xff08;InterPlanetary File System&#xff09;是一個面向全球的、點對點的分布式文件系統&#xff0c;目標是為了補充&#xff08;甚至是取代&#xff09;目前統治互聯網的超文本傳輸協議&#xff08;HTTP&#xff09;&#xff0c;將所有具有相同…

使用window.postMessage實現跨域通信

JavaScript由于同源策略的限制,跨域通信一直是棘手的問題。當然解決方案也有很多&#xff1a; document.domainiframe的設置&#xff0c;應用于主域相同而子域不同&#xff1b;利用iframe和location.hash&#xff0c;數據直接暴露在了url中&#xff0c;數據容量和類型都有限Fla…

appium啟動app失敗_Appium-Desktop Capability 配置及啟動App演示

Appium-Desktop Capability配置介紹desired capability的功能是配置Appium會話。為什么要配置capability&#xff0c;目的就是為了告訴Appium服務器您想要自動化的平臺和應用程序。Desired Capabilities是一組設置的鍵值對的集合&#xff0c;其中鍵對應設置的名稱&#xff0c;而…

WinRAR 命令行簡體中文說明

從命令行也可以運行 WinRAR 命令&#xff0c;常規的命令行語法描述如下:WinRAR - -命令 要 WinRAR 運行的字符組合代表功能。開關 切換操作指定類型&#xff0c;壓縮強度&#xff0c;壓縮文件類型&#xff0c;等等的定義。壓縮文件 要處理的壓縮文件名。文件 要處理的文件名。列…

以Windows服務方式運行.NET Core程序

原文:以Windows服務方式運行.NET Core程序在之前一篇博客《以Windows服務方式運行ASP.NET Core程序》中我講述了如何把ASP.NET Core程序作為Windows服務運行的方法&#xff0c;而今&#xff0c;我們又遇到了新的問題&#xff0c;那就是&#xff1a;我們的控制臺程序&#xff0c…

SparkSession.read().csv()無法定位本地文件的問題

原因是spark有兩個文件頭 [file://]代表本地 [hdfs://]代表hdfs路徑 如果路徑沒有文件頭&#xff0c;spark會將該路徑默認添加上"hdfs://" 所以如果要訪問本地csv文件&#xff0c;需要確保路徑前面有"file://" //java代碼&#xff0c;告訴spark這是本地文件…

JavaScript的10種跨域共享的方法

在客戶端編程語言中&#xff0c;如javascript和ActionScript&#xff0c;同源策略是一個很重要的安全理念&#xff0c;它在保證數據的安全性方面有著重要的意義。同源策略規定跨域之間的腳本是隔離的&#xff0c;一個域的腳本不能訪問和操作另外一個域的絕大部分屬性和方法。那…

好用的shell工具_精選5個酷斃的Python工具

來自&#xff1a;Python之禪工欲善其事必先利其器&#xff0c;一個好的工具能讓起到事半功倍的效果&#xff0c;Python社區提供了足夠多的優秀工具來幫助開發者更方便的實現某些想法&#xff0c;下面這幾個工具給我的工作也帶來了很多便利&#xff0c;推薦給追求美好事物的你。…

承載輝煌歷史 暢想無線未來

看了JustDI的文章“手機也能當電腦用&#xff1f;&#xff0d;&#xff0d;談談未來智能手機操作系統的走向”&#xff0c;作為嵌入式愛好者&#xff0c;我也想談談自己的看法。首先&#xff0c;從網絡發展的角度看&#xff0c;移動互聯網的寬帶化&#xff0c;寬帶互聯網的移動…

接口碼釋義

1xx&#xff1a;信息&#xff0c;請求收到&#xff0c;繼續處理 2xx&#xff1a;成功&#xff0c;行為被成功地接受、理解和采納 3xx&#xff1a;重定向&#xff0c;為了完成請求&#xff0c;必須進一步執行的動作 4xx&#xff1a;客戶端錯誤&#xff0c;請求包含語法錯誤或…

java讀取文件內容,文件頭有\ufeff

"\ufeff"是UTF-8 BOM編碼的文件頭&#xff0c;代表該文件按照什么字節順序排序 調用java的工具類[ UnicodeInputStream ]即可解決這個問題 //第二個參數targetEncoding為null時在getDetectedEncoding方法中會自動檢測編碼類型 UnicodeInputStream unicodeInputStrea…