這次讓我們從幾個點認識一下Mysql的Innodb

MySQL 的 InnoDB 存儲引擎是 MySQL 默認和最常用的存儲引擎之一。它主要關注的是高可靠性、性能以及完整的事務支持。以下是對 InnoDB 存儲引擎的詳細介紹:

1. 數據庫特性

1.1 事務支持

InnoDB 是完全支持事務的存儲引擎,支持四種主要的事務隔離級別:

  • 讀未提交(Read Uncommitted): 最高并發性但最低隔離級別,可能會看到其他事務的未提交更改。
  • 讀提交(Read Committed): 通常情況下默認的隔離級別,每次讀取時會看到事務已經提交的更改。
  • 可重復讀(Repeatable Read): 默認的隔離級別,保證在同一事務中多次讀取獲取一致的結果,解決不可重復讀問題,但不能解決幻讀問題。
  • 可串行化(Serializable): 最強隔離級別,解決幻讀問題,但性能較低。
1.2 鎖機制

InnoDB 支持行級鎖,而不是表級鎖,從而能夠在大部分情況下提供更高的并發性。主要的鎖類型有:

  • 共享鎖(S鎖): 允許事務讀取一行數據。
  • 排他鎖(X鎖): 允許事務刪除或更新一行數據。

InnoDB 還支持意向鎖(Intention Lock),意向鎖分為意向共享鎖(IS鎖)和意向排他鎖(IX鎖),用來在執行表鎖時減少鎖之間的沖突。

1.3 外鍵約束

InnoDB 是 MySQL 中唯一一個支持外鍵約束的存儲引擎,能夠保證數據的完整性和一致性。它支持刪除和更新時的級聯操作。

2. 數據存儲結構

InnoDB 使用了一種稱為表空間(Tablespace)的存儲結構,它可以存儲多個表的數據和索引。具體數據文件結構如下:

2.1 表空間
  • 系統表空間: 存儲所有數據庫的元數據,以及自身的數據字典和雙寫緩沖(Doublewrite Buffer)等。
  • 獨立表空間: 每個表都有一個單獨的表空間文件(.ibd 文件),其中存儲該表的數據和索引。
2.2 內部存儲結構
  • 頁(Page): InnoDB 的數據文件由頁組成,每頁大小通常為 16KB。
  • 區(Extent): 由 64 個連續的頁組成,大小為 1MB。
  • 段(Segment): 可以包含多個區,用來存儲表和索引的數據。

3. 數據一致性和恢復機制

3.1 重做日志(Redo Log)

InnoDB 使用重做日志記錄對數據頁的物理更改,確保即使在系統崩潰時也能恢復數據。重做日志按照順序寫入獨立的日志文件(ib_logfile0 和 ib_logfile1)。

3.2 回滾日志(Undo Log)

回滾日志用于實現事務回滾和隔離級別。每當事務發生修改時,InnoDB 會記錄這些更改的舊值,這樣如果事務被回滾,可以通過這些舊值恢復之前的數據。

3.3 雙寫緩沖(Doublewrite Buffer)

雙寫緩沖是 InnoDB 存儲引擎為了保障數據頁寫入磁盤時的原子性而設計的。數據頁首先寫入雙寫緩沖區,然后再從緩沖區寫到實際數據文件中。這樣可以避免因磁盤寫入錯誤導致的數據頁損壞。

4. 緩存和性能優化

4.1 緩沖池(Buffer Pool)

InnoDB 將數據和索引頁緩存在內存中的緩沖池中,從而提升對數據頁面的訪問速度。緩沖池大小可以通過 innodb_buffer_pool_size 參數配置,通常需要分配系統內存的 70-80%。

4.2 自適應哈希索引(Adaptive Hash Index)

InnoDB 會根據工作負載自動創建哈希索引,可以顯著提高某些查詢的性能。自適應哈希索引的創建和維護不需要額外的管理開銷。

4.3 LRU 列表和 Free 列表

InnoDB 使用 LRU(Least Recently Used)算法來管理緩沖池中的數據頁。經常使用的數據頁放在 LRU 列表的前面,而不常使用的數據頁會被移到后面并最終被淘汰。此外,InnoDB 維護 Free 列表來管理空閑的緩沖池頁面。

5. 高可用和擴展性

5.1 復制(Replication)

InnoDB 是 MySQL 內建復制的基礎,支持主從復制(Master-Slave Replication)和多主復制(Multi-Master Replication),用于實現高可用性和數據冗余。

5.2 組復制(Group Replication)

InnoDB 支持 MySQL 的組復制(Group Replication),可以在一組服務器之間實現數據的自動化復制和故障轉移,提高數據的可用性和一致性。

5.3 分區(Partitioning)

雖然分區是 MySQL 的一個特性,但 InnoDB 可以利用分區來提高查詢性能和管理大型表。分區表會將數據分段存儲在多個分區中,每個分區可以獨立管理和優化。

6. 配置和調優

優化 InnoDB 性能通常涉及對以下參數的調整:

  • innodb_buffer_pool_size: 緩沖池大小,建議設置為系統可用內存的 70-80%。
  • innodb_log_file_size: 重做日志文件大小,較大的日志文件可以減少檢查點的頻率,提高性能。
  • innodb_flush_log_at_trx_commit: 控制事務提交時重做日志的刷新行為,可以在性能與數據安全之間權衡。
  • innodb_io_capacity: 配置 InnoDB 的 I/O 能力,適當調整該參數可以提高磁盤 I/O 密集型操作的性能。
[mysqld]
innodb_buffer_pool_size = 4G
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 2000

通過合理的配置和持續的監控,可以有效優化 InnoDB 存儲引擎的性能,滿足各種業務場景需求。

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

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

相關文章

【uniapp-ios】App端與webview端相互通信的方法以及注意事項

前言 在開發中,使用uniapp開發的項目開發效率是極高的,使用一套代碼就能夠同時在多端上線,像筆者之前寫過的使用Flutter端和webview端之間的相互通信方法和問題,這種方式本質上實際上是h5和h5之間的通信,網上有非常多…

ios身份證實名認證接口開發示例助力電商物流實名認證

為了更好的利用貨車資源,也方便企業正常的運送貨物,“互聯網電商”平臺可謂風起云涌。貨車司機和有發貨需求的人們可以在物流平臺注冊,貨車司機接單為有運送需求的用戶提供有償貨運服務。那么,如何讓企業放心的將貨物安心的交予貨…

物聯網實訓室建設可行性報告

一、建設物聯網實訓室的目的和意義 隨著信息技術的快速發展,物聯網(IoT)已成為推動社會進步和經濟發展的關鍵技術之一。物聯網技術的集成應用,不僅能夠提高生產效率,還能促進智慧城市、智能家居、智能農業等多個領域的…

python04——類(基礎new)

類其實也是一種封裝的思想,類就是把變量、方法等封裝在一起,然后可以通過不同的實例化對其進行調用操作。 1.類的定義 class 類名: 變量a def __init__ (self,參數2,參數2...):初始化函數!!&…

vivado DELAY_VALUE_XPHY、DIFF_TERM

延遲_值_XPHY PORT對象上的DELAY_VALUE_XPHY屬性指定要添加的延遲量 Versal XPHY邏輯接口的輸入或輸出路徑。在的早期階段 opt_design在重新生成高級I/O向導IP時 DELAY_VALUE_XPHY值將從PORT復制到的XPHY實例上 輸入或輸出路徑。Vivado設計套件中存在DRCs,以確保 DE…

簡單實現聯系表單Contact Form自動發送郵件

如何實現簡單Contact Form自動郵件功能?怎樣簡單設置? 聯系表單不僅是訪客與網站所有者溝通的橋梁,還可以收集潛在客戶的信息,從而推動業務的發展。AokSend將介紹如何簡單實現一個聯系表單,自動發送郵件的過程&#x…

java Collections類介紹

Java 的 java.util.Collections 類提供了一組靜態方法,用于操作或返回集合(如列表、集合和映射)。Collections 類是一個實用工具類,旨在為集合提供便捷的算法和操作。以下是對 Collections 類及其常用方法的介紹。 常用方法總結 …

【游戲客戶端】大話slg玩法架構(一)滾動基類

【游戲客戶端】大話slg玩法架構(一)滾動基類 大家好,我是Lampard家杰~~ 今天我們兌現諾言,給大家分享SLG玩法的實現j架構,關于SLG玩法的介紹可以參考這篇上一篇文章:【游戲客戶端】制作率土之濱Like玩法 PS…

保險理論與實踐

《保險理論與實踐》是由中國保險學會主辦的學術集刊,于2016年1月正式創辦,致力于發表權威、嚴謹、高質量的理論研究、政策研究和實務研究成果,強調學術性與政策性、理論性與實踐性的有機結合。本刊由中國金融出版社公開出版,每月下…

postmessage()在同一域名下,傳遞消息給另一個頁面

這里是同域名下&#xff0c;getmessage.html&#xff08;發送信息&#xff09;傳遞消息給index.html&#xff08;收到信息&#xff0c;并回傳收到信息&#xff09; index.html頁面 <!DOCTYPE html> <html><head><meta http-equiv"content-type"…

機器學習統計學基礎 - 最大似然估計

最大似然估計&#xff08;Maximum Likelihood Estimation, MLE&#xff09;是一種常用的參數估計方法&#xff0c;其基本原理是通過最大化觀測數據出現的概率來尋找最優的參數估計值。具體來說&#xff0c;最大似然估計的核心思想是利用已知的樣本結果&#xff0c;反推最有可能…

Java并發編程工具包(JUC)詳解

在現代軟件開發中&#xff0c;多線程編程是一個不可避免的話題。為了更好地管理和利用多線程&#xff0c;Java提供了一個強大的工具包——java.util.concurrent&#xff08;簡稱JUC&#xff09;。JUC包含了許多用于并發編程的類和接口&#xff0c;幫助開發者高效、安全地處理線…

binutils ifunc 流程圖

上圖是x86 binutils 的流程圖。 函數說明_bfd_x86_elf_link_hash_table_createInit local STT_GNU_IFUNC symbol hash.elf_x86_64_check_relocsAdd support for handling STT_GNU_IFUNC symbols_bfd_elf_x86_get_local_sym_hashFind and/or create a hash entry for local sym…

[Go] 字符串遍歷數據類型問題

字符串遍歷問題 在使用for i,v:range str遍歷字符串時 str[i]是unit8&#xff08;byte&#xff09;類型&#xff0c;返回的是單個字節 字符串在Go中是以字節序列的形式存儲的&#xff0c;而 str[i] 直接訪問了這個字節序列中的第 i 個字節。如果字符串中的字符是單字節的ASCII…

Leetcode—97. 交錯字符串【中等】

2024每日刷題&#xff08;140&#xff09; Leetcode—97. 交錯字符串 2d動規實現代碼 class Solution { public:bool isInterleave(string s1, string s2, string s3) {int m s1.length();int n s2.length();int len s3.length();if(m n ! len) {return false;}vector<…

SpringBoot日常:封裝rabbitmq starter組件

文章目錄 邏輯實現RabbitExchangeEnumRabbitConfigRabbitModuleInfoRabbitModuleInitializerRabbitPropertiesRabbitProducerManagerPOM.xmlspring.factories 功能測試application.yml配置生產者&#xff1a;消費者&#xff1a;測試結果&#xff1a;總結 本章內容主要介紹編寫一…

stm32 USB CDC類虛擬串口初體驗

1. 目標 本文介紹CubeMX生成 USB CDC類虛擬串口工程的操作步驟。 2. 配置流程 時鐘配置 usb外設需要48M時鐘輸入 stm32405使用外部時鐘源HSE,否則配不出來48M時鐘stm32h750內部有一個48M時鐘 stm32f405時鐘配置 stm32h750時鐘配置 Connectivity ->USB_OTG_FS 和 Connect…

GEE代碼實例教程詳解:植被狀況指數(VCI)與干旱監測

簡介 在本篇博客中&#xff0c;我們將使用Google Earth Engine (GEE) 進行植被狀況指數&#xff08;Vegetation Condition Index, VCI&#xff09;的計算和干旱監測。通過MODIS NDVI數據&#xff0c;我們可以評估2001年至2024年間的植被狀況和干旱等級。 背景知識 MODIS NDV…

C++初階:從C過渡到C++的入門基礎

??所屬專欄&#xff1a;C?? ??作者主頁&#xff1a;嶔某?? C發展歷史 C的起源可以追溯到1979年&#xff0c;當時BjarneStroustrup(本賈尼斯特勞斯特盧普&#xff0c;這個翻譯的名字不同的地?可能有差異)在?爾實驗室從事計算機科學和軟件?程的研究?作。?對項?中復…

第4章 Vite模塊化與插件系統(二)

4.3 常用插件介紹 4.3.1 官方插件 vitejs/plugin-vue 用于支持 Vue.js 開發&#xff1a; npm install vitejs/plugin-vue --save-devimport vue from vitejs/plugin-vueexport default defineConfig({plugins: [vue()] })vitejs/plugin-react 用于支持 React 開發&#xf…