八股文---MySQl(3)

目錄

12.事務的特性是什么?可以詳細說一下嗎?

回答

13并發事務帶來哪些問題?怎么解決這些問題呢?MySQL的默認隔離級別是?

臟讀:一個事務讀到另外一個事務還沒有提交的數據。

不可重復讀:一個事務先后讀取同一條記錄,但兩次讀取的數據不同,稱之為不可重復讀。

幻讀:一個事務按照條件查詢數據時,沒有對應的數據行,但是在插入數據時,又發現這行數據已經存在,好像出現已經存在,好像出現了”幻影”。幻讀是在解決不可重復讀的基礎上

?編輯

怎么解決并發事務的問題呢?

?編輯

回答

15.undo log和redo log的區別

redo log

undo log

回答

16.事務中的隔離性是如何保證的呢?

回答

17.解釋一下MVCC

17.1記錄中的隱藏字段

17.2undo log

17.3readview

17.3.1當前讀

17.3.2快照讀

回答

18.MySQL主從同步原理

回答

19.你們項目用過分庫分表嗎

19.1拆分策略

19.1.1垂直拆分

19.1.2水平拆分

19.1.3分庫分表的策略有哪些

回答


12.事務的特性是什么?可以詳細說一下嗎?

事務是一組操作的集合,它是一個不可分割的工作單位,事務會把所有的操作作為一個整體一起向系統提交或撤銷操作請求,即這些操作要么同時成功,要么同時失敗

ACID是什么?可以詳細說一下嗎?

  • 原子性(Atomicity):事務是不可分割的最小操作單元,要么全部成功,要么全部失敗。
  • 一致性(Consistency):事務完成時,必須使所有的數據都保持一致狀態。
  • 隔離性(Isolation):數據庫系統提供的隔離機制,保證事務在不受外部并發操作影響的獨立環境下運行。
  • 持久性(Durability):事務一旦提交或回滾,它對數據庫中的數據的改變就是永久的。

回答

  • 原子性( Atomicity )
  • 一致性( Consistency )
  • 隔離性( Isolation )
  • 持久性( Durability )

13并發事務帶來哪些問題?怎么解決這些問題呢?MySQL的默認隔離級別是?

并發事務問題:臟讀、不可重復讀、幻讀

隔離級別:讀未提交、讀已提交、可重復讀、串行化

問題

描述

臟讀

一個事務讀到另外一個事務還沒有提交的數據。

不可重復讀

一個事務先后讀取同一條記錄,但兩次讀取的數據不同,稱之為不可重復讀。

幻讀

一個事務按照條件查詢數據時,沒有對應的數據行,但是在插入數據時,又發現這行數據已經存在,好像出現已經存在,好像出現了幻影

臟讀:一個事務讀到另外一個事務還沒有提交的數據。

不可重復讀:一個事務先后讀取同一條記錄,但兩次讀取的數據不同,稱之為不可重復讀。

幻讀:一個事務按照條件查詢數據時,沒有對應的數據行,但是在插入數據時,又發現這行數據已經存在,好像出現已經存在,好像出現了幻影幻讀是在解決不可重復讀的基礎上

怎么解決并發事務的問題呢?

解決方案:對事物進行隔離

回答

并發事務的問題:

  • 臟讀:一個事務讀到另外一個事務還沒有提交的數據。
  • 不可重復讀:一個事務先后讀取同一條記錄,但兩次讀取的數據不同
  • 幻讀:一個事務按照條件查詢數據時,沒有對應的數據行,但是在插入數據時,又發現這行數據已經存在,好像出現了”幻影”。

隔離級別:

  • READ UNCOMMITTED ?未提交讀? ? ?------臟讀、不可重復讀、幻讀(解決不了的)
  • READ COMMITTED ?讀已提交? ? ? ? ? ------不可重復讀、幻讀(解決不了的)
  • REPEATABLE READ ?可重復讀? ? ? ? ?-------幻讀(解決不了的)
  • SERIALIZABLE ? ?
  • 串行化

15.undo log和redo log的區別

緩沖池(buffer pool):主內存中的一個區域,里面可以緩存磁盤上經常操作的真實數據,在執行增刪改查操作時,先操作緩沖池中的數據(若緩沖池沒有數據,則從磁盤加載并緩存),以一定頻率刷新到磁盤,從而減少磁盤IO,加快處理速度

數據頁(page):是InnoDB 存儲引擎磁盤管理的最小單元,每個頁的大小默認為 16KB。頁中存儲的是行數據

磁盤結構中主要存儲的就是數據頁,當我們操作數據的時候,并不會直接操作磁盤,首先先操作內存(緩沖池),看看有沒有需要操作的數據,沒有的話,就會從磁盤中把數據加載到內存中,操作完成后,會按照一定的頻率再把數據同步到磁盤中,就可以減少磁盤的io,加快處理的速度

redo log

重做日志,記錄的是事務提交時數據頁的物理修改,是用來實現事務的持久性。

該日志文件由兩部分組成:重做日志緩沖(redo log buffer)以及重做日志文件(redo log file),前者是在內存中,后者在磁盤中。當事務提交之后會把所有修改信息都存到該日志文件中, 用于在刷新臟頁到磁盤,發生錯誤時, 進行數據恢復使用。

當有增刪改查的時候,現在BufferPool中發生改變,RedoLogBuffer就會記錄數據頁的變化,一但RedoLogBuffer發生變化,就會同步加載到磁盤文件中RedoLogFile中,如果對當頁數據同步失敗了,就會從RedoLogFile恢復數據

刷新當頁數據的到磁盤的加入發生了錯誤,就可以使用Redo Log來進行數據的恢復

undo log

回滾日志,用于記錄數據被修改前的信息 , 作用包含兩個 : 提供回滾 MVCC(多版本并發控制) 。undo log和redo log記錄物理日志不一樣,它是邏輯日志

  • 可以認為當delete一條記錄時,undo log中會記錄一條對應的insert記錄,反之亦然,
  • 當update一條記錄時,它記錄一條對應相反的update記錄。當執行rollback時,就可以從undo log中的邏輯記錄讀取到相應的內容并進行回滾。

undo log可以實現事務的一致性和原子性

回答

redo log: 記錄的是數據頁的物理變化,服務宕機可用來同步數據

undo log :記錄的是邏輯日志,當事務回滾時,通過逆操作恢復原來的數據

redo log保證了事務的持久性,undo log保證了事務的原子性和一致性

16.事務中的隔離性是如何保證的呢?

回答

鎖:排他鎖(如一個事務獲取了一個數據行的排他鎖,其他事務就不能再獲取該行的其他鎖)

mvcc : 多版本并發控制?

17.解釋一下MVCC

全稱 Multi-Version Concurrency Control,多版本并發控制。指維護一個數據的多個版本,使得讀寫操作沒有沖突

MVCC的具體實現,主要依賴于數據庫記錄中的隱式字段undo log日志readView

17.1記錄中的隱藏字段

隱藏字段

含義

DB_TRX_ID

最近修改事務ID,記錄插入這條記錄或最后一次修改該記錄的事務ID

DB_ROLL_PTR

回滾指針,指向這條記錄的上一個版本,用于配合undo?log,指向上一個版本。

DB_ROW_ID

隱藏主鍵,如果表結構沒有指定主鍵,將會生成該隱藏字段。

17.2undo log

回滾日志,在insert、update、delete的時候產生的便于數據回滾的日志

當insert的時候,產生的undo log日志只在回滾時需要,在事務提交后,可被立即刪除。

而update、delete的時候,產生的undo log日志不僅在回滾時需要,mvcc版本訪問也需要,不會立即被刪除。

17.3readview

ReadView(讀視圖是快照讀 SQL執行時MVCC提取數據的依據,記錄并維護系統當前活躍的事務(未提交的)id

17.3.1當前讀

讀取的是記錄的最新版本,讀取時還要保證其他并發事務不能修改當前記錄,會對讀取的記錄進行加鎖。對于我們日常的操作,如:
select...lock in share mode(共享鎖),select...for update、update、insert、delete(排他鎖)都是一種當前讀。

17.3.2快照讀

簡單的select(不加鎖)就是快照讀,快照讀,讀取的是記錄數據的可見版本,有可能是歷史數據,不加鎖,是非阻塞讀。

  • Read Committed:每次select,都生成一個快照讀。
  • Repeatable Read:開啟事務后第一個select語句才是快照讀的地方。

ReadView中包含了四個核心字段:

字段

含義

m_ids

當前活躍的事務ID集合

min_trx_id

最小活躍事務ID

max_trx_id

預分配事務ID,當前最大事務ID+1(因為事務ID是自增的)

creator_trx_id

ReadView創建者的事務ID

不同的隔離級別,生成ReadView的時機不同:

READ COMMITTED :在事務中每一次執行快照讀時生成ReadView。

REPEATABLE READ:僅在事務中第一次執行快照讀時生成ReadView,后續復用該ReadView。

回答

MySQL中的多版本并發控制。指維護一個數據的多個版本,使得讀寫操作沒有沖突

1.隱藏字段:

  1. trx_id(事務id),記錄每一次操作的事務id,是自增的
  2. roll_pointer(回滾指針),指向上一個版本的事務版本記錄地址

2.undo log:

  1. 回滾日志,存儲老版本數據
  2. 版本鏈:多個事務并行操作某一行記錄,記錄不同事務修改數據的版本,通過roll_pointer指針形成一個鏈表

3.readView解決的是一個事務查詢選擇版本的問題

  • 根據readView的匹配規則和當前的一些事務id判斷該訪問那個版本的數據
  • 不同的隔離級別快照讀是不一樣的,最終的訪問的結果不一樣 ? ? RC :每一次執行快照讀時生成ReadView ? ? RR:僅在事務中第一次執行快照讀時生成ReadView,后續復用

18.MySQL主從同步原理

MySQL主從復制的核心就是二進制日志

二進制日志(BINLOG)記錄了所有的 DDL(數據定義語言)語句和 DML(數據操縱語言)語句,但不包括數據查詢(SELECT、SHOW)語句。

回答

MySQL主從復制的核心就是二進制日志binlog(DDL(數據定義語言)語句和 DML(數據操縱語言)語句)

  1. 主庫在事務提交時,會把數據變更記錄在二進制日志文件 Binlog 中。
  2. 從庫讀取主庫的二進制日志文件 Binlog ,寫入到從庫的中繼日志 Relay Log 。
  3. 從庫重做中繼日志中的事件,將改變反映它自己的數據

19.你們項目用過分庫分表嗎

分擔訪問壓力

解決存儲壓力

分庫分表的時機:

1,前提,項目業務數據逐漸增多,或業務發展比較迅速

2,優化已解決不了性能問題(主從讀寫分離、查詢索引…)

3,IO瓶頸(磁盤IO、網絡IO)、CPU瓶頸(聚合查詢、連接數太多)

19.1拆分策略

19.1.1垂直拆分

垂直分庫

以表為依據,根據業務將不同表拆分到不同庫中

特點: 1.按業務對數據分級管理、維護、監控、擴展

????????????2.在高并發下,提高磁盤IO和數據量連接數

垂直分表

垂直分表:以字段為依據,根據字段屬性將不同字段拆分到不同表中。

特點: 1,冷熱數據分離

????????????2,減少IO過渡爭搶,兩表互不影響

19.1.2水平拆分

水平分庫

路由規則:1.根據id節點取模

????????????????2.按id也就是范圍路由,節點1(1-100萬 ),節點2(100萬-200萬)

????????????????3.…

水平分庫:將一個庫的數據拆分到多個庫中。

特點:1. 解決了單庫大數量,高并發的性能瓶頸問題

???????????2.提高了系統的穩定性和可用性

水平分表

水平分表:將一個表的數據拆分到多個表中(可以在同一個庫內)

特點:1.優化單一表數據量過大而產生的性能問題;

???????????2.避免IO爭搶并減少鎖表的幾率;

19.1.3分庫分表的策略有哪些

新的問題和新的技術

  • 分庫之后的問題:
  • 分布式事務一致性問題
  • 跨節點關聯查詢
  • 跨節點分頁、排序函數
  • 主鍵避重

分庫分表中間件:

  • sharding-sphere
  • mycat

回答

業務介紹:

1,根據自己簡歷上的項目,想一個數據量較大業務(請求數多或業務累積大)

具體拆分策略:

1,水平分庫,將一個庫的數據拆分到多個庫中,解決海量數據存儲和高并發的問題?

2,水平分表,解決單表存儲和性能的問題

3,垂直分庫,根據業務進行拆分,高并發下提高磁盤IO和網絡連接數----微服務一般用的多

4,垂直分表,冷熱數據分離,多表互不影響2----用的也多

注意:水平分庫,水平分表要使用中間件:sharding-sphere、mycat

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

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

相關文章

實驗五 內存管理實驗

實驗五 內存管理實驗 一、實驗目的 1、了解操作系統動態分區存儲管理過程和方法。 2、掌握動態分區存儲管理的主要數據結構--空閑表區。 3、加深理解動態分區存儲管理中內存的分配和回收。 4、掌握空閑區表中空閑區3種不同放置策略的基本思想和實現過程。 5、通過模擬程…

【MySQL】MySQL表的增刪改查(CRUD) —— 上篇

目錄 MySQL表的增刪改查(CRUD) 1. 新增(Create)/插入數據 1.1 單行數據 全列插入 insert into 表名 values(值, 值......); 1.2 單行數據 指定列插入 1.3 多行數據 指定列插入 1.4 關于時間日期(datetime&am…

【MATLAB代碼例程】AOA與TOA結合的高精度平面地位,適用于四個基站的情況,附完整的代碼

本代碼實現了一種基于到達角(AOA) 和到達時間(TOA) 的混合定位算法,適用于二維平面內移動或靜止目標的定位。通過4個基站的協同測量,結合最小二乘法和幾何解算,能夠有效估計目標位置,并支持噪聲模擬、誤差分析和可視化輸出。適用于室內定位、無人機導航、工業監測等場景…

ModbusTCP 轉 Profinet 主站網關

一、 功能概述 1.1 設備簡介 本產品是 ModbusTCP 和 Profinet(M) 網關(以下簡稱網關),使用數據映射 方式工作。 本產品在 ModbusTCP 側作為 ModbusTCP 從站,接 PLC 、上位機、 wincc 屏 等;在 Profin…

《AI大模型應知應會100篇》第25篇:Few-shot與Zero-shot使用方法對比

第25篇:Few-shot與Zero-shot使用方法對比 摘要 在大語言模型的應用中,**Few-shot(少樣本)和Zero-shot(零樣本)**是兩種核心的提示策略。它們各自適用于不同的場景,能夠幫助用戶在不進行額外訓練…

深入理解C++中string的深淺拷貝

目錄 一、引言 二、淺拷貝與深拷貝的基本概念 2.1 淺拷貝 2.2 深拷貝 在C++ 中, string 類的深淺拷貝有著重要的區別。 淺拷貝 深拷貝 string 類中的其他構造函數及操作 resize 構造 = 構造(賦值構造) + 構造(拼接構造) cin 和 cin.get 的區別 三、C++中string類的…

在Qt中驗證LDAP賬戶(Windows平臺)

一、前言 原本以為在Qt(Windows平臺)中驗證 LDAP 賬戶很簡單:集成Open LDAP的開發庫即可。結果臨了才發現,Open LDAP壓根兒不支持Windows平臺。沿著重用的原則,考慮遷移Open LDAP的源代碼,卻發現工作量不小…

《軟件設計師》復習筆記(11.4)——處理流程設計、系統設計、人機界面設計

目錄 一、業務流程建模 二、流程設計工具 三、業務流程重組(BPR) 四、業務流程管理(BPM) 真題示例: 五、系統設計 1. 主要目的 2. 設計方法 3. 主要內容 4. 設計原則 真題示例: 六、人機界面設…

UniRig ,清華聯合 VAST 開源的通用自動骨骼綁定框架

UniRig是清華大學計算機系與VAST聯合開發的前沿自動骨骼綁定框架,專為處理復雜且多樣化的3D模型而設計。基于強大的自回歸模型和骨骼點交叉注意力機制,UniRig能夠生成高質量的骨骼結構和精確的蒙皮權重,大幅提升動畫制作的效率和質量。 UniR…

LeetCode 443 壓縮字符串

字符數組壓縮算法詳解:實現與分析 一、引言 在處理字符數組時,我們常常遇到需要對連續重復字符進行壓縮的場景。這不僅可以節省存儲空間,還能提升數據傳輸效率。本文將深入解析一個經典的字符數組壓縮算法,通過詳細的實現步驟和…

alertManager部署安裝、告警規則配置詳解及告警消息推送

? java接受告警請求RestController RequestMapping("/alert") Slf4j public class TestApi {private static final DateTimeFormatter FORMATTER DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");RequestMappingpublic void sendTemplate(HttpServl…

數據庫勒索病毒威脅升級:企業數據安全防線如何用安當RDM組件重構

摘要:2025年Q1全球數據庫勒索攻擊量同比激增101.8%,Cl0p、Akira等團伙通過邊緣設備漏洞滲透企業核心系統,制造業、金融業等關鍵領域面臨數據加密與業務停擺雙重危機。本文深度解析勒索病毒對數據庫的五大毀滅性影響,結合安當RDM防…

thanos sidecar和receive區別?

Thanos Sidecar 和 Thanos Receive 是 Thanos 生態系統中兩個關鍵組件,但它們在架構中的作用和功能上有明顯的區別。以下是它們的主要區別: 1. Thanos Sidecar 功能: 與 Prometheus 集成: Sidecar 是一個部署在每個 Prometheus…

Unity入門筆記(緣更)

內容來源SiKi學院的Luna’s Fantasy 文章目錄 一、基礎知識1.準備2.基礎知識1.層級(Layer)2.軸心點3.預制體(Prefab)4.剛體組件(Rigidbody)5.碰撞器組件(BoxCollider) 二、代碼1.移動 一、基礎知識 1.準備 Unity安裝: https://unity.cn 2.基礎知識 1.層級(Layer…

使用VHD虛擬磁盤安裝雙系統,避免磁盤分區

前言 很多時候,我們對現在的操作系統不滿意,就想要自己安裝一個雙系統 但是安裝雙系統又涉及到硬盤分區,非常復雜,容易造成數據問題 虛擬機的話有經常用的不爽,這里其實有一個介于虛擬機和雙系統之間的解決方法,就是使用虛擬硬盤文件安裝系統. 相當于系統在機上…

ARINC818協議(五)

1.R_CTL,設置固定的0x44即可 2.Dest_ID:目的地D_ID,如果不需要目的地址,就設置為0;ADVB協議支持 多個視頻目的地址,廣播通信; 3.cs_ctl在FC-AV上不用 4.source_ID:S_ID [23:0]包含源實體的端口的地址標識;不用就設置為0. ADVB允許…

鴻蒙開發對于RelativeContainer高度設置‘auto‘后還是沒有自適應問題的解決方案

RelativeContainer設置高度為自適應‘auto’沒用生效,查看了官方文檔(文檔中心)也沒用給出明確的答案。只說了不能把錨點設置成父組件錨點(__container__)。也嘗試了使用guidline來替換父組件錨點,還是沒能自適應高度。 后來嘗試讓…

k8s教程3:Kubernetes應用的部署和管理

學習目標 理解Kubernetes中應用部署的基本概念和方法掌握Deployment、ReplicaSet、StatefulSet、DaemonSet、Job與CronJob等控制器的使用了解Helm作為Kubernetes的包管理工具的基本使用通過實際示例學習應用的部署、更新與管理 Kubernetes提供了一套強大而靈活的機制&#xff…

通過特定協議拉起 electron 應用

在 Android 通過 sheme 協議可以拉起其他應用。 electron 應用也可以通過類似特定協議被拉起。 在同時有 web、客戶端的應用里,可以通過這種方式在 web 拉起客戶端。 支持拉起客戶端 const PROTOCOL xxxif (process.defaultApp) {// 這里是開發環境,有…

算法備案的審核標準是什么?

隨著《互聯網信息服務算法推薦管理規定》等法規的出臺,算法備案成為了強制性備案,是產品合規上線的必要條件之一。本篇內容將從企業視角出發,分析算法備案的常見問題,意在對有備案需求的小伙伴們有所幫助。 一、誰需要做算法備案…