mysql ACID 原理

序言:ACID 是一組數據庫設計原則,他是業務數據和關鍵業務程序的可靠性保障。

1、atomicity(原子性)

依賴如下能力

autocommit
commit 
rollback

2、一致性

2.1 double write buffer
1、定義:double write buffer 是一塊空間,mysql 將緩沖池的數據寫入到此空間,然后 flush 到 mysql 數據存儲空間。當 mysql 發生異常退出時,會從這個空間恢復數據。
2、可能問題:double write buffer 會造成兩倍磁盤IO 嗎?
不會,寫入double write buffer 使用OS 調用 fsync()方法,每次寫入一塊大的 chunk 數據。(順序 IO)
2.2 crash recovery

mysql 異常恢復分為如下幾步進行

2.2.1 tablespace discovery
mysql 啟動時會掃描tablespace空間,看是否有表需要 recovery。
2.2.1 redo log application

重要知識:checkpoint(檢查點) 是 redo log 管理的核心機制之一。它的核心作用是 標記哪些數據修改已經持久化到磁盤,從而優化崩潰恢復的效率并回收 redo log 空間

1、redo log 存儲方式:redo log,存儲物理日志 記錄數據頁的變化(即第幾頁第幾行變動),用于 mysql 程序異常退出后恢復。
redo log 在磁盤中是一系列文件,在事務成功提交并且寫入后會被清理,此空間會重復使用
2、redo log 的寫入:寫入 redo log buffer,默認事務提交時強制刷盤 innodb_flush_log_at_trx_commit。(可每秒刷盤 0 ,OS 異步刷盤)

在這里插入圖片描述

2.2.2 回滾未提交事務
2.2.3 change buffer merge
redo log 中會存儲buffer pool 和 change buffer 中的數據,在 redo log 重放時,會根據 checkpoint 位置恢復對應的 change buffer
2.2.4 purge
清除被標記刪除的,并且在所有事務中不可見的數據。

3、隔離性

3.1 隔離級別
1、REPEATABLE READ:事務開啟時read snapshot,snapshot 在事務執行中不會變化,除非本事務使用 DML語句。 在執行 DQL,DML 語句時會使用 gap lock。這也是REPEATABLE READ減少幻讀的核心。
2、READ COMMITTED:每次 read 都是讀取最新的 snapshot,在 select,update delete 時根據 where 條件匹配到 row,然后使用 primary key 或者隱藏主鍵鎖住 row,而不會使用 gap lock 鎖住間隙。READ COMMITTED確保最終一致性,且會有更好的并發性能。
3、READ UNCOMMITTED:產生臟讀,幻讀,一般不用。
4、SERIALIZABLE:禁用并發。

3.2 data lock

4、持久性
mysql數據持久性主要和 redo log,double write buffer,bin log 相關聯,除此之外,還與 mysq 服務所在的機器相關,如 CPU,OS,hardware。下面從 mysql 自身支持持久性分析:

1、如圖可知 Redo Log 和 double write buffer的數據都來自 buffer pool 中的臟頁,這兩類數據都是以磁盤存儲,buffer pool 是內存存儲。
2、Redo log 和 double write buffer 都是 mysql 的恢復機制,當 mysql recovery 時首先從 double write buffer 恢復,如果恢復失敗或者部分恢復,則會從 redo log 恢復。
3、innodb_flush_log_at_trx 參數的配置會影響 mysql 數據持久性,默認配置 1,Redo log 同步刷盤才返回客戶端成功,其他兩種情況均可能導致 mysql 丟失數據。
4、mysql server 層還有 bin log,它存儲 mysql 事務提交后的每一條邏輯數據(SQL),常用做主從復制和數據同步。
下圖是 mysql 寫入數據時的流程圖

在這里插入圖片描述

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

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

相關文章

WebStorm 高效快捷方式全解析

作為前端開發的黃金搭檔,WebStorm 憑借強大的功能和高度可定制的快捷鍵體系,成為眾多開發者提升編碼效率的利器。本文基于 IntelliJ IDEA 的快捷鍵體系(WebStorm 作為 JetBrains 家族成員,快捷鍵邏輯高度一致)&#xf…

基于 STM32 的農村污水處理控制系統設計與實現

摘要 針對農村污水處理自動化程度低、運維成本高的問題,本文設計了一種基于 STM32 單片機的污水處理控制系統。系統通過多傳感器實時監測水質參數,結合 PID 控制算法實現污水處理全流程自動化,并集成遠程監控功能,滿足農村地區低成本、易維護的需求。 一、硬件系統設計 …

自動生成md文件以及config.mjs文件-vitepress

效果: config.mjs文件 import {defineConfig} from vitepress import hljs from highlight.js/lib/core import javascript from highlight.js/lib/languages/javascript import xml from highlight.js/lib/languages/xml import {ref} from "./cache/deps/vue…

Tailwind css實戰,基于Kooboo構建AI對話框頁面(二)

基于上篇內容,添加交互邏輯,實現一個偽聊天功能的對話框效果: Tailwind css實戰,基于Kooboo構建AI對話框頁面(一)-CSDN博客 在前期文章中,我們完成了 AI 對話框的靜態頁面搭建。本文將聚焦交互…

Conda:環境移植及更新1--使用conda-pack

更多內容:XiaoJ的知識星球 目錄 一、使用conda-pack1.安裝 conda-pack2.移植整個 Anaconda 環境3.移植單個虛擬環境4.驗證是否生效 在相同Linux設備上移植Miniconda3(Anaconda3同理)常用方法有。 使用conda-pack:使用conda-pack工…

樹莓派超全系列教程文檔--(50)如何查找樹莓派的IP地址

如何查找樹莓派的IP地址 找到您的Raspberry Pi的IP地址桌面命令行引導輸出網絡管理器使用mDNS解析 raspberrypi.local檢查路由器的設備列表使用 nmap 查找設備使用智能手機應用程序查找設備 文章來源: http://raspberry.dns8844.cn/documentation 原文網址 找到您…

如何優化 MySQL 存儲過程的性能?

文章目錄 1. 優化 SQL 語句避免全表掃描減少子查詢,改用 JOIN避免 SELECT 2. 合理使用索引3. 優化存儲過程結構減少循環和臨時變量避免重復計算 4. 使用臨時表和緩存5. 優化事務處理6. 分析和監控性能7. 優化數據庫配置8. 避免用戶自定義函數(UDF&#…

尚硅谷redis7 47-48 redis事務之理論簡介

47 redis事務之理論簡介 什么是事務 可以一次執行多個命令,本質是一組命令的集合。一個事務中的所有命令都會序列化,按順序地串行化執行而不會被其它命令插入 能干什么? 一個隊列中,一次性、順序性、排他性的執行一系列操作 redis事務vs數據庫事務 …

Nginx 在四大核心場景中的應用實踐與優化

一、Nginx 核心應用場景深度解析 1. HTTP 服務器:靜態資源的高性能承載者 Nginx 作為 HTTP 服務器時,憑借輕量級架構和高效的事件驅動模型,成為靜態資源服務的首選方案。 核心能力與場景 靜態文件高效處理:直接響應 HTML、CSS…

亞當·斯密思想精髓的數學建模與形式化表征

亞當斯密思想精髓的數學建模與形式化表征 摘要:本文運用數學建模方法對亞當斯密的經濟與倫理思想進行形式化表征。通過分工的規模經濟模型和市場均衡條件展現《國富論》中"看不見的手"原理;采用擴展效用函數與合作博弈均衡解釋《道德情操論》…

FastDFS集群部署與性能優化實戰

目錄 一、介紹 二、FastDFS原理 三、FastDFS部署 1.資源清單 2.修改主機名 3.安裝libfastcommon(tracker01、tracker02、storage1、storage2) 4.安裝編譯FastDFS(tracker01、tracker02、storage1、storage2) 5.配置tracker…

學習心得(14--16)

模板: 前端的頁面單獨存在模板當中 jinja2 :模板語法 保持前端頁面不變的情況下,返回內容給前端做法: 寫一個data,并在return中的render_template中,寫上datadata 使用時,要將templa…

stm與51單片機哪個更適合新手學

一句話總結 51單片機:像學騎自行車,簡單便宜,但只能在小路上騎。 STM32:像學開汽車,復雜但功能強,能上高速公路,還能拉貨載人(做復雜項目)。 1. 為啥有人說“先學51單片…

Web安全測試-文件上傳繞過-DVWA

Web安全測試-文件上傳繞過-DVWA 很多網站都有上傳資源(圖片或者文件)的功能,資源上傳后一般會存儲在服務器的一個文件夾里面,如果攻擊者繞過了上傳時候的文件類型驗證,傳了木馬或者其他可執行的代碼上去,那服務器就危險了。 我用…

ant-design-vue中的分頁組件自定義

ant-design-vue中的分頁組件自定義 實現效果 實現代碼 需要自己創建一個分頁組件的代碼然后導入進去。 <template><div style"display: flex; justify-content: space-between; margin-bottom: 10px"><div><a-select v-model:value"pageS…

LabVIEW軟件開發過程中如何保證軟件的質量?

一、需求與架構設計階段 明確功能邊界與技術指標 在測試系統設計初期&#xff0c;圍繞比例閥性能測試核心需求&#xff08;如壓力 / 流量信號采集、特性曲線繪制、數據對比分析&#xff09;&#xff0c;定義軟件功能模塊&#xff08;數據采集、邏輯控制、界面顯示&#xff09;&…

Linux 527 重定向 2>1 rsync定時同步(未完)

rsync定時同步 配環境 關閉防火墻、selinux systemctl stop firewalld systemctl disable firewalld setenforce0 vim /etc/SELINUX/config SELINUXdisable515 設置主機名 systemctl set-hostname code systemctl set-hostname backup 配靜態ip rsync 需要穩定的路由表和端…

Vue 3.0 中狀態管理Vuex 與 Pinia 的區別

在 Vue.js 應用開發中&#xff0c;狀態管理是構建復雜應用的關鍵環節。隨著 Vue 3 的普及和 Composition API 的引入&#xff0c;開發者面臨著狀態管理庫的選擇問題&#xff1a;是繼續使用經典的 Vuex&#xff0c;還是轉向新興的 Pinia&#xff1f;本文將從設計理念、API 設計、…

分布式緩存:三萬字詳解Redis

文章目錄 緩存全景圖PreRedis 整體認知框架一、Redis 簡介二、核心特性三、性能模型四、持久化詳解五、復制與高可用六、集群與分片方案 Redis 核心數據類型概述1. String2. List3. Set4. Sorted Set&#xff08;有序集合&#xff09;5. Hash6. Bitmap7. Geo8. HyperLogLog Red…

React useEffect和useEffectLa

原理把對象以樹的形式存檔&#xff0c;根據URL進行匹配渲染對應組件 useEffect 和useLayoutEffect區別 useEffect中的回調函數放在異步任務隊列中&#xff0c;是異步的&#xff0c;會在React渲染&#xff0c; dom 元素更新&#xff0c;瀏覽器繪制完成之后才會執行 useLayout…