最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

MySQL內(nèi)核:InnoDB存儲(chǔ)引擎卷1

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 19:20:30
文檔

MySQL內(nèi)核:InnoDB存儲(chǔ)引擎卷1

MySQL內(nèi)核:InnoDB存儲(chǔ)引擎卷1:MySQL內(nèi)核:InnoDB存儲(chǔ)引擎卷1(MySQL領(lǐng)域Oracle ACE專家力作,眾多MySQL Oracle ACE力捧,深入MySQL數(shù)據(jù)庫(kù)內(nèi)核源碼分析,InnoDB內(nèi)核開發(fā)與優(yōu)化必備寶典)姜承堯 蔣鴻翔 饒瓏輝 溫正湖 著 ISBN 978-7-121-22908-42014年5月出版定價(jià):
推薦度:
導(dǎo)讀MySQL內(nèi)核:InnoDB存儲(chǔ)引擎卷1:MySQL內(nèi)核:InnoDB存儲(chǔ)引擎卷1(MySQL領(lǐng)域Oracle ACE專家力作,眾多MySQL Oracle ACE力捧,深入MySQL數(shù)據(jù)庫(kù)內(nèi)核源碼分析,InnoDB內(nèi)核開發(fā)與優(yōu)化必備寶典)姜承堯 蔣鴻翔 饒瓏輝 溫正湖 著 ISBN 978-7-121-22908-42014年5月出版定價(jià):
MySQL內(nèi)核:InnoDB存儲(chǔ)引擎卷1(MySQL領(lǐng)域Oracle ACE專家力作,眾多MySQL Oracle ACE力捧,深入MySQL數(shù)據(jù)庫(kù)內(nèi)核源碼分析,InnoDB內(nèi)核開發(fā)與優(yōu)化必備寶典)

姜承堯 蔣鴻翔 饒瓏輝 溫正湖 著

ISBN 978-7-121-22908-4

2014年5月出版

定價(jià):69.00元

360頁(yè)

16開

編輯推薦

預(yù)售前100位讀者送MySQL 5.6 InnoDB存儲(chǔ)引擎的架構(gòu)圖

l 《高性能MySQL》配套深度閱讀數(shù)據(jù)庫(kù)內(nèi)核解析篇

l 網(wǎng)易資深數(shù)據(jù)庫(kù)專家十余年深耕之作

l 深入理解InnoDB引擎是如何設(shè)計(jì)和工作的

l 讓正在通往或已經(jīng)在數(shù)據(jù)庫(kù)內(nèi)核開發(fā)道路的人員少走彎路

內(nèi)容提要

《MySQL內(nèi)核:InnoDB存儲(chǔ)引擎 卷1》由資深MySQL專家,機(jī)工暢銷圖書作者親自執(zhí)筆,在以往出版的兩本InnoDB介紹性圖書的基礎(chǔ)之上,更深入地介紹InnoDB存儲(chǔ)引擎的內(nèi)核,例如latch、B+樹索引、事務(wù)、鎖等,從源代碼的角度深度解析了InnoDB的體系結(jié)構(gòu)、實(shí)現(xiàn)原理、工作機(jī)制,并給出了大量最佳實(shí)踐,希望通過(guò)《MySQL內(nèi)核:InnoDB存儲(chǔ)引擎 卷1》幫助用戶真正了解一個(gè)數(shù)據(jù)庫(kù)存儲(chǔ)引擎的開發(fā)。

《MySQL內(nèi)核:InnoDB存儲(chǔ)引擎 卷1》可以成為帶領(lǐng)讀者進(jìn)入數(shù)據(jù)庫(kù)存儲(chǔ)引擎的內(nèi)核開發(fā),幫助那些從事MySQL數(shù)據(jù)庫(kù)的相關(guān)行業(yè)從業(yè)人員。同時(shí),《MySQL內(nèi)核:InnoDB存儲(chǔ)引擎 卷1》也適合對(duì)于研究生階段有志于數(shù)據(jù)庫(kù)內(nèi)核開發(fā)的同學(xué)。

目錄

第1章 概覽

1.1 InnoDB 存儲(chǔ)引擎歷史

1.2 源碼版本

1.3 源碼風(fēng)格

1.3.1 源碼結(jié)構(gòu)

1.3.2 代碼風(fēng)格

1.4 代碼編譯

1.5 閱讀源碼次序

1.6 思考題

1.7 繼續(xù)閱讀

第2章 基本數(shù)據(jù)結(jié)構(gòu)與算法

2.1 相關(guān)文件

2.2 內(nèi)存管理系統(tǒng)

2.2.1 內(nèi)存管理

2.2.2 通用內(nèi)存池

2.3 哈希表

2.3.1 哈希算法

2.3.2 數(shù)據(jù)結(jié)構(gòu)

2.4 雙鏈表

2.4.1 內(nèi)存雙鏈表

2.4.2 磁盤雙鏈表

2.5 其他數(shù)據(jù)結(jié)構(gòu)和算法

2.5.1 動(dòng)態(tài)數(shù)組

2.5.2 排序

2.6 小結(jié)

2.7 思考題

2.8 繼續(xù)閱讀

第3章 同步機(jī)制

3.1 相關(guān)文件

3.2 基礎(chǔ)知識(shí)

3.2.1 memory model

3.2.2 mutual exclution

3.2.3 Atomic Read-Modify-Write Operation

3.2.4 spin lock

3.2.5 死鎖

3.3 InnoDB 同步機(jī)制

3.3.1 mutex

3.3.2 rw-lock

3.3.3 wait array

3.3.4 死鎖檢測(cè)

3.4 小結(jié)

3.5 思考題

3.6 繼續(xù)閱讀

第4章 重做日志

4.1 相關(guān)文件

4.2 相關(guān)概念

4.2.1 簡(jiǎn)介

4.2.2 物理邏輯日志

4.2.3 LSN

4.2.4 檢查點(diǎn)

4.2.5 歸檔日志

4.2.6 恢復(fù)

4.3 物理存儲(chǔ)結(jié)構(gòu)

4.3.1 重做日志物理架構(gòu)

4.3.2 重做日志塊

4.3.3 重做日志組與文件

4.4 相關(guān)數(shù)據(jù)結(jié)構(gòu)

4.4.1 log_group_struct

4.4.2 log_struct

4.5 組提交

4.6 恢復(fù)

4.6.1 數(shù)據(jù)結(jié)構(gòu)

4.6.2 重做日志恢復(fù)

4.7 總結(jié)

4.8 思考題

4.9 繼續(xù)閱讀

第5章 mini-transaction

5.1 相關(guān)文件

5.2 mini-transaction 介紹

5.2.1 基本概念

5.2.2 The FIX Rules

5.2.3 Write-Ahead Log(WAL)

5.2.4 Force-log-at-commit

5.3 具體實(shí)現(xiàn)

5.3.1 數(shù)據(jù)結(jié)構(gòu)

5.3.2 物理邏輯日志的實(shí)現(xiàn)

5.3.3 mini-transaction 的使用

5.4 示例

5.5 小結(jié)

5.6 思考題

5.7 繼續(xù)閱讀

第6章 存儲(chǔ)管理

6.1 相關(guān)文件

6.2 物理存儲(chǔ)

6.2.1 頁(yè)

6.2.2 區(qū)

6.2.3 段

6.2.4 表空間

6.3 數(shù)據(jù)結(jié)構(gòu)

6.3.1 概述

6.3.2 fil_system_struct

6.3.3 fil_space_struct

6.3.4 fil_node_struct

6.4 異步 I/O

6.4.1 異步 I/O 數(shù)據(jù)結(jié)構(gòu)

6.4.2 異步 I/O 線程

6.5 總結(jié)

6.6 思考題

6.7 繼續(xù)閱讀

第 7 章 記錄

7.1 相關(guān)文件

7.2 概述

7.3 物理記錄

7.3.1 物理記錄格式

7.3.2 大記錄格式

7.3.3 偽記錄

7.4 邏輯記錄

7.5 記錄之間的比較

7.6 行記錄版本

7.7 小結(jié)

7.8 思考題

7.9 繼續(xù)閱讀

第8章 索引頁(yè)

8.1 相關(guān)文件

8.2 頁(yè)

8.3 存儲(chǔ)結(jié)構(gòu)

8.3.1 Page Header

8.3.2 Page Directory

8.3.3 示例

8.4 Page Cursor

8.4.1 定位記錄

8.4.2 插入記錄

8.4.3 刪除記錄

8.4.4 并發(fā)控制

8.5 小結(jié)

8.6 思考題

8.7 繼續(xù)閱讀

第9章 鎖

9.1 相關(guān)文件

9.2 鎖與事務(wù)

9.2.1 隔離性

9.2.2 事務(wù)的隔離級(jí)別

9.2.3 幻讀

9.3 InnoDB 存儲(chǔ)引擎中鎖的類型與算法

9.4 鎖的內(nèi)部實(shí)現(xiàn)

9.4.1 數(shù)據(jù)結(jié)構(gòu)

9.4.2 鎖的并發(fā)控制

9.4.3 鎖的類型與模式

9.4.4 鎖的兼容性

9.5 顯式鎖和隱式鎖

9.5.1 顯式鎖與隱式鎖的區(qū)別

9.5.2 聚集索引記錄的隱式鎖

9.5.3 輔助索引記錄的隱式鎖

9.6 加鎖操作

9.6.1 加鎖流程

9.6.2 加鎖過(guò)程

9.7 行鎖的維護(hù)

9.7.1 插入

9.7.2 更新

9.7.3 PURGE

9.7.4 一致性的鎖定讀

9.7.5 頁(yè)的分裂

9.7.6 頁(yè)的合并

9.8 自增鎖

9.9 死鎖

9.9.1 死鎖的概念

9.9.2 死鎖概率

9.9.3 死鎖的示例

9.10 小結(jié)

9.11 思考題

9.12 繼續(xù)閱讀

第10章 B+樹索引

10.1 B+ 樹

10.1.1 概述

10.1.2 插入

10.1.3 刪除

10.2 B+ 樹索引

10.2.1 索引的特點(diǎn)

10.2.2 聚集索引

10.2.3 輔助索引

10.2.4 填充因子

10.3 InnoDB 存儲(chǔ)引擎 B+ 樹索引實(shí)現(xiàn)

10.3.2 相關(guān) latch

10.3.3 整理

10.3.4 分裂

10.3.5 合并

10.4 查找

10.4.1 mode

10.4.2 latch_mode

10.4.3 cursor

10.5 DML 操作

10.5.1 插入

10.5.2 非主鍵更新

10.5.3 主鍵更新

10.5.4 刪除

10.6 持久游標(biāo)

10.7 自適應(yīng)哈希索引

10.7.1 實(shí)現(xiàn)原理

10.7.2 創(chuàng)建哈希索引

10.7.3 哈希索引的維護(hù)

10.7.4 自適應(yīng)哈希索引的優(yōu)缺點(diǎn)

10.8 小結(jié)

10.9 思考題

10.10 繼續(xù)閱讀

第11章 Insert Buffer

11.1 相關(guān)文件

11.2 基本概念

11.3 架構(gòu)實(shí)現(xiàn)

11.3.1 存儲(chǔ)結(jié)構(gòu)

11.3.2 邏輯控制

11.3.3 示例

11.4 相關(guān)數(shù)據(jù)結(jié)構(gòu)

11.5 死鎖

11.5.1 latch 順序

11.5.2 并發(fā)控制

11.5.3 異步 I/O 線程

11.6 維護(hù)

11.6.1 記錄合并

11.6.2 空間收縮

11.7 小結(jié)

11.8 思考題

11.9 繼續(xù)閱讀

第12章 緩沖池

12.1 相關(guān)文件

12.2 概述

12.2.1 緩沖池

12.2.2 LRU、Free 和 Flush 鏈表

12.2.3 基本數(shù)據(jù)結(jié)構(gòu)

12.3 緩沖池的管理

12.3.1 LRU 算法

12.3.2 LRU 鏈表維護(hù)

12.3.3 頁(yè)的分配

12.4 頁(yè)的讀取

12.4.1 物理讀取

12.4.2 隨機(jī)預(yù)讀

12.4.3 線性預(yù)讀

12.4.4 邏輯讀取

12.5 頁(yè)的刷新

12.5.1 檢查點(diǎn)

12.5.2 部分寫的問(wèn)題

12.5.3 刷新的實(shí)現(xiàn)

12.6 小結(jié)

12.7 思考題

12.8 繼續(xù)閱讀

第13章 事務(wù)處理

13.1 相關(guān)文件

13.2 事務(wù)

13.2.1 概述

13.2.2 分類

13.2.1 隔離級(jí)別

13.3 事務(wù)系統(tǒng)結(jié)構(gòu)

13.3.1 事務(wù)系統(tǒng)段

13.3.2 數(shù)據(jù)結(jié)構(gòu)

13.4 DOUBLEWRITE 段

13.5 UNDO 日志存儲(chǔ)

13.5.1 簡(jiǎn)介

13.5.2 實(shí)現(xiàn)結(jié)構(gòu)

13.5.3 回滾段

13.5.4 UNDO 段

13.6 UNDO 記錄

13.6.1 存儲(chǔ)結(jié)構(gòu)

13.6.2 INSERT UNDO LOG RECORD

13.6.3 UPDATE UNDO LOG RECORD

13.7 PURGE

13.7.1 清理操作

13.7.2 實(shí)現(xiàn)原理

13.8 ROLLBACK

13.8.1 回滾指針

13.8.2 回滾操作

13.9 COMMIT

13.10 kernel_mutex 與并發(fā)控制

13.11 小結(jié)

13.12 思考題

13.13 繼續(xù)閱讀

第14章 數(shù)據(jù)字典

14.1 相關(guān)文件

14.2 數(shù)據(jù)字典概述

14.3 主要數(shù)據(jù)對(duì)象

14.3.1 數(shù)據(jù)字典系統(tǒng)

14.3.2 表定義

14.3.3 索引定義

14.3.4 外鍵約束定義

14.3.5 其他數(shù)據(jù)對(duì)象定義

14.4 InnoDB 系統(tǒng)表對(duì)象

14.4.1 SYS_TABLES

14.4.2 SYS_COLUMNS

14.4.3 SYS_INDEXES

14.4.4 SYS_FIELDS

14.4.5 其他表對(duì)象

14.5 數(shù)據(jù)字典創(chuàng)建

14.5.1 數(shù)據(jù)字典段

14.5.2 數(shù)據(jù)字典物理結(jié)構(gòu)

14.5.3 數(shù)據(jù)字典初始化

14.5.4 數(shù)據(jù)字典緩存組織

14.6 數(shù)據(jù)字典對(duì)象加載

14.6.1 用戶表加載

14.6.2 用戶索引和外鍵約束加載

14.7 小結(jié)

14.8 思考題

14.9 繼續(xù)閱讀

第15章 服務(wù)管理

15.1 相關(guān)文件

15.2 初始化 InnoDB 存儲(chǔ)引擎

15.2.1 相關(guān)重要參數(shù)

15.2.2 服務(wù)管理相關(guān)數(shù)據(jù)結(jié)構(gòu)

15.2.3 文件創(chuàng)建和加載

15.2.4 啟動(dòng)后臺(tái)線程

15.3 關(guān)閉 InnoDB 存儲(chǔ)引擎

15.3.1 數(shù)據(jù)持久化

15.3.2 資源釋放

15.4 master 線程

15.4.1 主要功能

15.4.2 數(shù)據(jù)刷盤策略

15.5 鎖超時(shí)監(jiān)控線程

15.6 思考題

15.7 繼續(xù)閱讀

作者簡(jiǎn)介

姜承堯(DavidJiang),MySQL領(lǐng)域的Oracle ACE,資深MySQL數(shù)據(jù)庫(kù)專家,擅長(zhǎng)于數(shù)據(jù)庫(kù)的故障診斷、性能調(diào)優(yōu)、容災(zāi)處理、高可用和高擴(kuò)展研究,同時(shí)一直致力于MySQL數(shù)據(jù)庫(kù)底層實(shí)現(xiàn)原理的研究和探索。此外,對(duì)高性能數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)也有深刻而獨(dú)到的理解。曾為MySQL編寫了許多開源工具和性能擴(kuò)展補(bǔ)丁,如廣受好評(píng)的InnoDB引擎二級(jí)緩存項(xiàng)目?,F(xiàn)任網(wǎng)易杭州研究院技術(shù)經(jīng)理一職,負(fù)責(zé)MySQL數(shù)據(jù)庫(kù)的內(nèi)核開發(fā),參與設(shè)計(jì)與開發(fā)MySQL數(shù)據(jù)庫(kù)在網(wǎng)易云環(huán)境中的應(yīng)用。曾擔(dān)任久游網(wǎng)數(shù)據(jù)庫(kù)工程部經(jīng)理,曾領(lǐng)導(dǎo)并參與了多個(gè)大型核心數(shù)據(jù)庫(kù)的設(shè)計(jì)、實(shí)施、管理和維護(hù),實(shí)戰(zhàn)經(jīng)驗(yàn)非常豐富。活躍于開源數(shù)據(jù)庫(kù)以及開源軟件領(lǐng)域,是著名開源社區(qū)ChinaUnixMySQL版塊的版主,熱衷于與網(wǎng)友分享自己的心得和體會(huì),深受社區(qū)歡迎

前言

為什么要寫這本書

過(guò)去這些年,我一直在和各種不同的數(shù)據(jù)庫(kù)打交道,見證了 MySQL 從一個(gè)小型的關(guān)系型數(shù)據(jù)庫(kù)發(fā)展成為各大互聯(lián)網(wǎng)企業(yè)的核心數(shù)據(jù)庫(kù)系統(tǒng)的過(guò)程。期間我參與了一些大大小小的項(xiàng)目開發(fā)工作,成功地幫助開發(fā)人員構(gòu)建了一些可靠的、健壯的應(yīng)用程序。在這個(gè)過(guò)程中積累了一些經(jīng)驗(yàn),正是這些不斷累積的經(jīng)驗(yàn)賦予了我靈感,于是有了本書。這本書實(shí)際上反映了這些年來(lái)我做了哪些事情,匯集了很多同行每天可能都會(huì)遇到的一些問(wèn)題,并給出解決方案。

本書是 MySQL 內(nèi)核系列的第一本書,與之前出版的 MySQL 技術(shù)內(nèi)幕不同的是,該系列的書將更靠近數(shù)據(jù)庫(kù)內(nèi)核層面,揭示 MySQL 數(shù)據(jù)庫(kù)內(nèi)核是如何運(yùn)行的。MySQL 內(nèi)核系列的第一本書將從 InnoDB 存儲(chǔ)引擎的內(nèi)核來(lái)展開。

毫無(wú)疑問(wèn),InnoDB 存儲(chǔ)引擎已經(jīng)成為 MySQL 數(shù)據(jù)庫(kù)的“標(biāo)準(zhǔn)配置”。Facebook、Twitter、Yahoo、百度、淘寶、騰訊、網(wǎng)易這些互聯(lián)網(wǎng)公司都將 InnoDB 作為后臺(tái)的存儲(chǔ)引擎。在時(shí)間的長(zhǎng)河以及線上高并發(fā)驗(yàn)證下,其已經(jīng)被證明是高性能、高可擴(kuò)展性的引擎。身處數(shù)據(jù)庫(kù)這個(gè)圈子,可以明顯地感覺(jué)到從 2010 年開始,各大互聯(lián)網(wǎng)公司已經(jīng)不再滿足于僅僅使用 InnoDB 存儲(chǔ)引擎,他們開始越來(lái)越接觸到引擎的內(nèi)核層面,對(duì)引擎進(jìn)行內(nèi)核級(jí)別的優(yōu)化以及根據(jù)公司的業(yè)務(wù)需求進(jìn)行二次開發(fā)。即使是 DBA 本身也開始慢慢地不滿足現(xiàn)狀開始研究起 InnoDB 存儲(chǔ)引擎的內(nèi)核,似乎一夜之間不了解點(diǎn)內(nèi)核實(shí)現(xiàn)都不好意思和別人說(shuō)

你是搞 MySQL 數(shù)據(jù)庫(kù)的。當(dāng)然,我們需要感謝 MySQL 數(shù)據(jù)庫(kù),感謝 MySQL 數(shù)據(jù)庫(kù)的創(chuàng)始人和 InnoDB 存儲(chǔ)引擎的創(chuàng)始人。正是他們開源了這些代碼,使得我們這些后人可以站在巨人的肩膀上繼續(xù)學(xué)習(xí)與進(jìn)步。在這方面,MySQL/InnoDB 比其他數(shù)據(jù)庫(kù)都要偉大,更值得我們尊敬。不可否認(rèn)的是,國(guó)內(nèi)對(duì)于數(shù)據(jù)庫(kù)內(nèi)核的開發(fā)學(xué)習(xí)資料與課程都非常有限。本科階段幾乎沒(méi)有相關(guān)課程,僅特定數(shù)據(jù)庫(kù)研究方向的研究生才會(huì)去關(guān)注這些技術(shù),并且這些人才在國(guó)內(nèi)非常稀少。很多想要踏進(jìn)數(shù)據(jù)庫(kù)內(nèi)核領(lǐng)域的人在最初都會(huì)感到迷茫和無(wú)助。另外,有些人憑著自己的聰明與天賦看似掌握了內(nèi)核的實(shí)現(xiàn),但是從他們的博客描述來(lái)看,其離真正的理解還是有一些距離的,或者說(shuō)他們僅剛?cè)腴T。所以我們才會(huì)在網(wǎng)上看到不斷有人在翻閱過(guò)代碼后,或者簡(jiǎn)單設(shè)置了幾個(gè)斷點(diǎn)和調(diào)試后抱怨 InnoDB 存儲(chǔ)引擎的設(shè)計(jì)是多么爛。數(shù)據(jù)庫(kù)的世界并不如他們想象的那樣簡(jiǎn)單與粗糙,數(shù)據(jù)庫(kù)有著自己的理論體系。雖然數(shù)據(jù)庫(kù)的實(shí)現(xiàn)有很多種,但大多需要遵循一些理論規(guī)范,如 Fix Rules、Write-Ahead Log、Force-log-at-commit、Lock 等。

我從 2006 年就開始進(jìn)行數(shù)據(jù)庫(kù)的內(nèi)核開發(fā),現(xiàn)在想來(lái)還最多只能稱為 hack。我在內(nèi)核開發(fā)的路上走了很多彎路,經(jīng)過(guò)高人的指點(diǎn)以及自己不斷的學(xué)習(xí)與探索,終于有了一些經(jīng)驗(yàn),現(xiàn)通過(guò)本書來(lái)完整地展示給讀者。希望通過(guò) MySQL 內(nèi)核系列,使正在通往或已經(jīng)在數(shù)據(jù)庫(kù)內(nèi)核開發(fā)道路的人員少走彎路。

出于這個(gè)目的,我聯(lián)合了網(wǎng)易 MySQL 技術(shù)組的各位同事,完成了 InnoDB 存儲(chǔ)引擎卷 1 的書籍撰寫工作。其中第 1、3、4、5、7、8、9、10、11 章由我個(gè)人獨(dú)立完成,第 2 和第 14章由我和溫正湖共同完成、第 6 和第 12 章由我和饒隴輝共同完成、第 13 和第 15 章由我和蔣鴻翔共同完成。在每章的最后,我還給出了思考題以及繼續(xù)閱讀的參考資料,通過(guò)這部分的內(nèi)容,讀者可以

加深對(duì)于每個(gè)知識(shí)模塊的理解,并繼續(xù)對(duì)某一模塊進(jìn)行深入研究。

本書面向的讀者群:

數(shù)據(jù)庫(kù)管理員

數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)師

數(shù)據(jù)庫(kù)內(nèi)核開發(fā)人員

其他對(duì)數(shù)據(jù)庫(kù)內(nèi)核感興趣的開發(fā)人員

如何閱讀本書

本書一共有 15 章,每章都像一本“迷你書”,可以單獨(dú)成冊(cè)。用戶可以有選擇地閱讀,但是更推薦根據(jù)本書的組織方式進(jìn)行閱讀,這樣會(huì)更具有條理性。

第 1 章概覽

本章首先介紹了 MySQL 數(shù)據(jù)庫(kù)以及 InnoDB 存儲(chǔ)引擎的歷史,之后介紹了 InnoDB 存儲(chǔ)引擎的源碼結(jié)構(gòu)與代碼風(fēng)格,最后推薦了閱讀 InnoDB 存儲(chǔ)引擎源碼的次序。

第 2 章基本數(shù)據(jù)結(jié)構(gòu)與算法

本章對(duì) InnoDB 中常用的數(shù)據(jù)結(jié)構(gòu)和算法進(jìn)行了介紹。首先是 InnoDB 的內(nèi)存管理系統(tǒng),從內(nèi)存管理機(jī)制、內(nèi)存操作基元和內(nèi)存池及內(nèi)存區(qū)等概念著手進(jìn)行了詳細(xì)講解;之后是哈希表結(jié)構(gòu),介紹了簡(jiǎn)單哈希表和帶鏈哈希表兩種;然后介紹了雙鏈表結(jié)構(gòu);最后還介紹了動(dòng)態(tài)數(shù)組、標(biāo)準(zhǔn)排序函數(shù)。本章的內(nèi)容是 InnoDB 的基礎(chǔ),相信讀者在閱讀后續(xù)章節(jié)的代碼時(shí)一定會(huì)遇到本章所提的相關(guān)數(shù)據(jù)結(jié)構(gòu)與算法。

第 3 章同步機(jī)制

本章介紹了 InnoDB 存儲(chǔ)引擎中實(shí)現(xiàn)的同步機(jī)制 mutex 和 rw-lock。InnoDB 存儲(chǔ)引擎正是通過(guò)這些數(shù)據(jù)結(jié)構(gòu)才能完成正確并發(fā)控制的。

第 4 章重做日志

本章首先介紹與重做日志模塊相關(guān)的概念,之后具體分析了 InnoDB 存儲(chǔ)引擎重做日志模塊的實(shí)現(xiàn)。InnoDB 存儲(chǔ)引擎原先就支持組提交,因此有著相當(dāng)不錯(cuò)的性能。最后,根據(jù)之前所介紹的內(nèi)容,分析了如何通過(guò)重做日志進(jìn)行有效恢復(fù),從而實(shí)現(xiàn)事務(wù)系統(tǒng)持久性的要求。

第 5 章 mini-transaction

本章介紹了數(shù)據(jù)庫(kù)中的三個(gè)協(xié)議:Fix Rules、Write-Ahead Log、Force-Log-at-Commit,同時(shí)介紹了 InnoDB 存儲(chǔ)引擎中 mini-transaction 的實(shí)現(xiàn),并通過(guò)一個(gè)示例簡(jiǎn)單展示了 mini-transaction 產(chǎn)生的重做日志內(nèi)容。

第 6 章存儲(chǔ)管理

本章介紹了 InnoDB 存儲(chǔ)引擎的物理存儲(chǔ)方式,這包括表空間的構(gòu)成,段、區(qū)、頁(yè)的存儲(chǔ)管理。此外,還介紹了 InnoDB 存儲(chǔ)引擎的文件操作方式,包括文件操作的架構(gòu)設(shè)計(jì)、同步讀 /寫方式和異步讀 / 寫方式,分別介紹了 Windows 操作系統(tǒng)、Posix 操作系統(tǒng)以及 InnoDB 模擬的三種異步 I/O 的實(shí)現(xiàn)方法。

第 7 章記錄

本章介紹了 InnoDB 存儲(chǔ)引擎的記錄(record),使讀者了解在源碼中記錄可以分為物理記錄與邏輯記錄,以及各種記錄所使用的場(chǎng)合。

第 8 章索引頁(yè)

本章介紹了 InnoDB 存儲(chǔ)引擎的索引頁(yè),知道在源碼中頁(yè)可以分為物理頁(yè)與邏輯頁(yè),并且詳細(xì)分析了 page header 以及 page directory。此外,還對(duì) InnoDB 存儲(chǔ)引擎如何在頁(yè)中進(jìn)行記錄的定位、插入和刪除等操作進(jìn)行了詳細(xì)介紹。

第 9 章鎖

本章介紹了 InnoDB 存儲(chǔ)引擎鎖的實(shí)現(xiàn)技術(shù)。在 InnoDB 存儲(chǔ)引擎中,其通過(guò) next-keylocking 算法在事務(wù)隔離級(jí)別為 REPEATABLE READ 實(shí)現(xiàn)了完全的隔離性要求。此外,其對(duì)鎖的設(shè)計(jì)是一種極其高效的設(shè)計(jì)方式。每個(gè)內(nèi)核開發(fā)人員都應(yīng)該細(xì)讀 lock 模塊,從而更為深入地理解鎖的內(nèi)部實(shí)現(xiàn)。

第 10 章 B+ 樹索引

本章對(duì) InnoDB 存儲(chǔ)引擎的 B+ 樹索引實(shí)現(xiàn)做了十分詳細(xì)的介紹。該部分所需要涉及的內(nèi)容非常多,與前面章節(jié)的聯(lián)系也比較緊密,是一個(gè)極為重要的章節(jié)。希望讀者可以反復(fù)閱讀,從而更好地體會(huì) InnoDB 存儲(chǔ)引擎中 B+ 樹索引的實(shí)現(xiàn)。

第 11 章 Insert Buffer

本章介紹了 InnoDB 存儲(chǔ)引擎中 Insert Buffer 的實(shí)現(xiàn),首先介紹了 Insert Buffer 的基本概念,然后介紹了 Insert Buffer 的物理與邏輯存儲(chǔ)結(jié)構(gòu),并通過(guò)一個(gè)示例進(jìn)行展示。最后,介紹了Insert Buffer 的源碼實(shí)現(xiàn)。我認(rèn)為這個(gè)模塊是難度最大的模塊之一。

第 12 章緩沖池

本章介紹了 InnoDB 存儲(chǔ)引擎緩沖池的實(shí)現(xiàn),這包括緩沖池的管理、頁(yè)的讀取和頁(yè)的刷新。此外,還介紹了 InnoDB 存儲(chǔ)引擎使用 midpoint insertion strategy LRU 的 LRU 管理機(jī)制。

第 13 章事務(wù)處理

本章介紹了 InnoDB 存儲(chǔ)引擎的事務(wù)處理模塊,介紹了 InnoDB 存儲(chǔ)引擎對(duì)于 undo 記錄的存儲(chǔ)方式,這其中涉及事務(wù)系統(tǒng)段、回滾段、undo 段、undo 頁(yè)、undo 日志、undo 記錄等多個(gè)概念,讀者應(yīng)該好好地理清這些概念。此外,還講述了事務(wù)的 purge、rollback、commit 等操作的具體實(shí)現(xiàn)。相信通過(guò)本章的學(xué)習(xí)讀者可以了解如何設(shè)計(jì)一個(gè)高效的事務(wù)系統(tǒng)。

第 14 章數(shù)據(jù)字典

本章介紹了 InnoDB 存儲(chǔ)引擎對(duì)于數(shù)據(jù)字典的具體實(shí)現(xiàn),以及其與之前各章的聯(lián)系。

第 15 章服務(wù)管理

本章介紹了 InnoDB 存儲(chǔ)引擎各服務(wù)模塊的管理,并展示了這些服務(wù)模塊的具體實(shí)現(xiàn)。

勘誤和支持

由于水平有限,編寫時(shí)間倉(cāng)促,書中難免會(huì)出現(xiàn)一些錯(cuò)誤或不準(zhǔn)確的地方,懇請(qǐng)讀者批評(píng)指正,我將盡力在線上為你提供最滿意的解答。如果你有更多的寶貴意見,也歡迎發(fā)送郵件至郵箱jiangchengyao@gmail.com,期待能夠得到您最真摯的反饋。

致謝

感謝網(wǎng)易研究院的所有同事們,能與一群才華出眾的人一起工作讓我感到非常榮幸與自豪,同時(shí)通過(guò)不斷地與他人的交流,使我在數(shù)據(jù)庫(kù)方面得到了極大的提升和領(lǐng)悟。

感謝電子工業(yè)出版社博文視點(diǎn)公司的孫學(xué)瑛老師,她在這段時(shí)間內(nèi)始終支持我的寫作,正是她的鼓勵(lì)和幫助引導(dǎo)我順利完成全部書稿。

謹(jǐn)以此書獻(xiàn)給我最親愛的家人,以及眾多熱愛 MySQL 數(shù)據(jù)庫(kù)的朋友們!

姜承堯(David Jiang)

2014 年4月于中國(guó)杭州

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

MySQL內(nèi)核:InnoDB存儲(chǔ)引擎卷1

MySQL內(nèi)核:InnoDB存儲(chǔ)引擎卷1:MySQL內(nèi)核:InnoDB存儲(chǔ)引擎卷1(MySQL領(lǐng)域Oracle ACE專家力作,眾多MySQL Oracle ACE力捧,深入MySQL數(shù)據(jù)庫(kù)內(nèi)核源碼分析,InnoDB內(nèi)核開發(fā)與優(yōu)化必備寶典)姜承堯 蔣鴻翔 饒瓏輝 溫正湖 著 ISBN 978-7-121-22908-42014年5月出版定價(jià):
推薦度:
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top