-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

MySQL內核:InnoDB存儲引擎 卷1

( 簡體 字)
作者:姜承堯,蔣鴻翔,饒瓏輝 溫正湖類別:1. -> 資料庫 -> MySQL
譯者:
出版社:電子工業出版社MySQL內核:InnoDB存儲引擎 卷1 3dWoo書號: 38373
詢問書籍請說出此書號!

缺書
NT售價: 345

出版日:5/1/2014
頁數:360
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121229084
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

為什么要寫這本書
過去這些年,我一直在和各種不同的數據庫打交道,見證了MySQL 從一個小型的關系型數
據庫發展成為各大互聯網企業的核心數據庫系統的過程。期間我參與了一些大大小小的項目開發工作,成功地幫助開發人員構建了一些可靠的、健壯的應用程序。在這個過程中積累了一些經驗,正是這些不斷累積的經驗賦予了我靈感,于是有了本書。這本書實際上反映了這些年來我做了哪些事情,匯集了很多同行每天可能都會遇到的一些問題,并給出解決方案。
本書是MySQL 內核系列的第一本書,與之前出版的MySQL 技術內幕不同的是,該系列的
書將更靠近數據庫內核層面,揭示MySQL 數據庫內核是如何運行的。MySQL 內核系列的第
一本書將從InnoDB 存儲引擎的內核來展開。
毫無疑問,InnoDB 存儲引擎已經成為MySQL 數據庫的“標準配置”。Facebook、Twitter、Yahoo、百度、淘寶、騰訊、網易這些互聯網公司都將InnoDB 作為后臺的存儲引擎。在時間的長河以及線上高并發驗證下,其已經被證明是高性能、高可擴展性的引擎。
身處數據庫這個圈子,可以明顯地感覺到從2010 年開始,各大互聯網公司已經不再滿足于
僅僅使用InnoDB 存儲引擎,他們開始越來越接觸到引擎的內核層面,對引擎進行內核級別
的優化以及根據公司的業務需求進行二次開發。即使是DBA 本身也開始慢慢地不滿足現狀
開始研究起InnoDB 存儲引擎的內核,似乎一夜之間不了解點內核實現都不好意思和別人說
你是搞MySQL 數據庫的。
當然,我們需要感謝MySQL 數據庫,感謝MySQL 數據庫的創始人和InnoDB 存儲引擎的創
始人。正是他們開源了這些代碼,使得我們這些后人可以站在巨人的肩膀上繼續學習與進步。
在這方面,MySQL/InnoDB 比其他數據庫都要偉大,更值得我們尊敬。
不可否認的是,國內對于數據庫內核的開發學習資料與課程都非常有限。本科階段幾乎沒有
相關課程,僅特定數據庫研究方向的研究生才會去關注這些技術,并且這些人才在國內非常
稀少。很多想要踏進數據庫內核領域的人在最初都會感到迷茫和無助。
IV | 前言
另外,有些人憑著自己的聰明與天賦看似掌握了內核的實現,但是從他們的博客描述來看,
其離真正的理解還是有一些距離的,或者說他們僅剛入門。所以我們才會在網上看到不斷
有人在翻閱過代碼后,或者簡單設置了幾個斷點和調試后抱怨InnoDB 存儲引擎的設計是多
么爛。
數據庫的世界并不如他們想象的那樣簡單與粗糙,數據庫有著自己的理論體系。雖然數據庫
的實現有很多種,但大多需要遵循一些理論規范,如Fix Rules、Write-Ahead Log、Forcelog-
at-commit、Lock 等。
我從2006 年就開始進行數據庫的內核開發,現在想來還最多只能稱為hack。我在內核開發
的路上走了很多彎路,經過高人的指點以及自己不斷的學習與探索,終于有了一些經驗,現
通過本書來完整地展示給讀者。希望通過MySQL 內核系列,使正在通往或已經在數據庫內
核開發道路的人員少走彎路。
出于這個目的,我聯合了網易MySQL 技術組的各位同事,完成了InnoDB 存儲引擎卷1 的
書籍撰寫工作。其中第1、3、4、5、7、8、9、10、11 章由我個人獨立完成,第2 和第14
章由我和溫正湖共同完成、第6 和第12 章由我和饒隴輝共同完成、第13 和第15 章由我和
蔣鴻翔共同完成。
在每章的最后,我還給出了思考題以及繼續閱讀的參考資料,通過這部分的內容,讀者可以
加深對于每個知識模塊的理解,并繼續對某一模塊進行深入研究。
讀者對象
本書面向的讀者群:
y 數據庫管理員
y 數據庫架構設計師
y 數據庫內核開發人員
y 其他對數據庫內核感興趣的開發人員
如何閱讀本書
本書一共有15 章,每章都像一本“迷你書”,可以單獨成冊。用戶可以有選擇地閱讀,但是
更推薦根據本書的組織方式進行閱讀,這樣會更具有條理性。
第1 章 概覽
本章首先介紹了MySQL 數據庫以及InnoDB 存儲引擎的歷史,之后介紹了InnoDB 存儲引擎
的源碼結構與代碼風格,最后推薦了閱讀InnoDB 存儲引擎源碼的次序。
前言 | V
第2 章 基本數據結構與算法
本章對InnoDB 中常用的數據結構和算法進行了介紹。首先是InnoDB 的內存管理系統,從
內存管理機制、內存操作基元和內存池及內存區等概念著手進行了詳細講解;之后是哈希表
結構,介紹了簡單哈希表和帶鏈哈希表兩種;然后介紹了雙鏈表結構;最后還介紹了動態數組、
標準排序函數。本章的內容是InnoDB 的基礎,相信讀者在閱讀后續章節的代碼時一定會遇
到本章所提的相關數據結構與算法。
第3 章 同步機制
本章介紹了InnoDB 存儲引擎中實現的同步機制mutex 和rw-lock。InnoDB 存儲引擎正是通
過這些數據結構才能完成正確并發控制的。
第4 章 重做日志
本章首先介紹與重做日志模塊相關的概念,之后具體分析了InnoDB 存儲引擎重做日志模塊
的實現。InnoDB 存儲引擎原先就支持組提交,因此有著相當不錯的性能。最后,根據之前所
介紹的內容,分析了如何通過重做日志進行有效恢復,從而實現事務系統持久性的要求。
第5 章 mini-transaction
本章介紹了數據庫中的三個協議:Fix Rules、Write-Ahead Log、Force-Log-at-Commit,同
時介紹了InnoDB 存儲引擎中mini-transaction 的實現,并通過一個示例簡單展示了minitransaction
產生的重做日志內容。
第6 章 存儲管理
本章介紹了InnoDB 存儲引擎的物理存儲方式,這包括表空間的構成,段、區、頁的存儲管
理。此外,還介紹了InnoDB 存儲引擎的文件操作方式,包括文件操作的架構設計、同步讀/
寫方式和異步讀/ 寫方式,分別介紹了Windows 操作系統、Posix 操作系統以及InnoDB 模擬
的三種異步I/O 的實現方法。
第7 章 記錄
本章介紹了InnoDB 存儲引擎的記錄(record),使讀者了解在源碼中記錄可以分為物理記錄
與邏輯記錄,以及各種記錄所使用的場合。
第8 章 索引頁
本章介紹了InnoDB 存儲引擎的索引頁,知道在源碼中頁可以分為物理頁與邏輯頁,并且詳
細分析了page header 以及page directory。此外,還對InnoDB 存儲引擎如何在頁中進行記錄
的定位、插入和刪除等操作進行了詳細介紹。
VI | 前言
第9 章 鎖
本章介紹了InnoDB 存儲引擎鎖的實現技術。在InnoDB 存儲引擎中,其通過next-key
locking 算法在事務隔離級別為REPEATABLE READ 實現了完全的隔離性要求。此外,其對
鎖的設計是一種極其高效的設計方式。每個內核開發人員都應該細讀lock 模塊,從而更為深
入地理解鎖的內部實現。
第10 章 B+ 樹索引
本章對InnoDB 存儲引擎的B+ 樹索引實現做了十分詳細的介紹。該部分所需要涉及的內容非
常多,與前面章節的聯系也比較緊密,是一個極為重要的章節。希望讀者可以反復閱讀,從
而更好地體會InnoDB 存儲引擎中B+ 樹索引的實現。
第11 章 Insert Buffer
本章介紹了InnoDB 存儲引擎中Insert Buffer 的實現,首先介紹了Insert Buffer 的基本概念,
然后介紹了Insert Buffer 的物理與邏輯存儲結構,并通過一個示例進行展示。最后,介紹了
Insert Buffer 的源碼實現。我認為這個模塊是難度最大的模塊之一。
第12 章 緩沖池
本章介紹了InnoDB 存儲引擎緩沖池的實現,這包括緩沖池的管理、頁的讀取和頁的刷新。
此外,還介紹了InnoDB 存儲引擎使用midpoint insertion strategy LRU 的LRU 管理機制。
第13 章 事務處理
本章介紹了InnoDB 存儲引擎的事務處理模塊,介紹了InnoDB 存儲引擎對于undo 記錄的存
儲方式,這其中涉及事務系統段、回滾段、undo 段、undo 頁、undo 日志、undo 記錄等多個
概念,讀者應該好好地理清這些概念。此外,還講述了事務的purge、rollback、commit 等操
作的具體實現。相信通過本章的學習讀者可以了解如何設計一個高效的事務系統。
第14 章 數據字典
本章介紹了InnoDB 存儲引擎對于數據字典的具體實現,以及其與之前各章的聯系。
第15 章 服務管理
本章介紹了InnoDB 存儲引擎各服務模塊的管理,并展示了這些服務模塊的具體實現。
勘誤和支持
由于水平有限,編寫時間倉促,書中難免會出現一些錯誤或不準確的地方,懇請讀者批評指正,
前言 | VII
我將盡力在線上為你提供最滿意的解答。如果你有更多的寶貴意見,也歡迎發送郵件至郵箱
jiangchengyao@gmail.com,期待能夠得到您最真摯的反饋。
致謝
感謝網易研究院的所有同事們,能與一群才華出眾的人一起工作讓我感到非常榮幸與自豪,
同時通過不斷地與他人的交流,使我在數據庫方面得到了極大的提升和領悟。
感謝電子工業出版社博文視點公司的孫學瑛老師,她在這段時間內始終支持我的寫作,正是
她的鼓勵和幫助引導我順利完成全部書稿。
謹以此書獻給我最親愛的家人,以及眾多熱愛MySQL 數據庫的朋友們!
姜承堯(David Jiang)
2014 年3 月于中國杭州
內容簡介:

本書由資深MySQL專家親自執筆,在以往出版的兩本InnoDB介紹性圖書的基礎之上,更深入地介紹InnoDB存儲引擎的內核,例如latch、B+樹索引、事務、鎖等,從源代碼的角度深度解析了InnoDB的體系結構、實現原理、工作機制,并給出了大量最佳實踐,希望通過本書幫助用戶真正了解一個數據庫存儲引擎的開發。

目錄:

第1 章 概覽.. 1
1.1 InnoDB 存儲引擎歷史. 1
1.2 源碼版本............ 2
1.3 源碼風格............ 3
1.3.1 源碼結構 3
1.3.2 代碼風格 4
1.4 代碼編譯............ 4
1.5 閱讀源碼次序.... 5
1.6 思考題... 6
1.7 繼續閱讀............ 6
第2 章 基本數據結構與算法.. 7
2.1 相關文件............ 7
2.2 內存管理系統.... 8
2.2.1 內存管理 8
2.2.2 通用內存池..... 11
2.3 哈希表. 14
2.3.1 哈希算法........ 14
2.3.2 數據結構........ 16
2.4 雙鏈表. 17
2.4.1 內存雙鏈表..... 18
2.4.2 磁盤雙鏈表..... 19
2.5 其他數據結構和算法. 20
2.5.1 動態數組........ 21
2.5.2 排序...... 21
2.6 小結.... 22
2.7 思考題. 22
X | 目錄
2.8 繼續閱讀.......... 22
第3 章 同步機制..... 23
3.1 相關文件.......... 23
3.2 基礎知識.......... 23
3.2.1 memory model 24
3.2.2 mutual exclution.......... 25
3.2.3 Atomic Read-Modify-Write Operation... 26
3.2.4 spin lock......... 27
3.2.5 死鎖...... 29
3.3 InnoDB 同步機制....... 30
3.3.1 mutex.... 30
3.3.2 rw-lock. 34
3.3.3 wait array........ 36
3.3.4 死鎖檢測........ 38
3.4 小結.... 39
3.5 思考題. 39
3.6 繼續閱讀.......... 40
第4 章 重做日志..... 41
4.1 相關文件.......... 41
4.2 相關概念.......... 41
4.2.1 簡介...... 41
4.2.2 物理邏輯日志. 45
4.2.3 LSN...... 45
4.2.4 檢查點.. 47
4.2.5 歸檔日志........ 48
4.2.6 恢復...... 49
4.3 物理存儲結構.. 49
4.3.1 重做日志物理架構...... 49
4.3.2 重做日志塊..... 51
4.3.3 重做日志組與文件...... 53
4.4 相關數據結構.. 55
4.4.1 log_group_struct.......... 55
4.4.2 log_struct........ 56
4.5 組提交. 60
4.6 恢復.... 61
4.6.1 數據結構........ 61
4.6.2 重做日志恢復. 62
4.7 總結.... 66
4.8 思考題. 66
4.9 繼續閱讀.......... 66
第5 章 mini-transaction...... 67
5.1 相關文件.......... 67
5.2 mini-transaction 介紹. 67
5.2.1 基本概念........ 67
5.2.2 The FIX Rules 68
5.2.3 Write-Ahead Log(WAL)......... 69
5.2.4 Force-log-at-commit.... 69
5.3 具體實現.......... 70
5.3.1 數據結構........ 70
5.3.2 物理邏輯日志的實現... 71
5.3.3 mini-transaction 的使用............ 72
5.4 示例.... 73
5.5 小結.... 76
5.6 思考題. 76
5.7 繼續閱讀.......... 76
第6 章 存儲管理..... 77
6.1 相關文件.......... 77
6.2 物理存儲.......... 77
6.2.1 頁.......... 78
6.2.2 區.......... 79
6.2.3 段.......... 82
6.2.4 表空間.. 84
6.3 數據結構.......... 86
6.3.1 概述...... 86
6.3.2 fil_system_struct.......... 86
6.3.3 fil_space_struct............ 87
6.3.4 fil_node_struct 88
6.4 異步I/O........... 91
6.4.1 異步I/O 數據結構....... 91
6.4.2 異步I/O 線程. 94
6.5 總結.... 95
6.6 思考題. 95
6.7 繼續閱讀.......... 95
第 7 章 記錄 97
7.1 相關文件.......... 97
7.2 概述.... 98
7.3 物理記錄.......... 99
7.3.1 物理記錄格式. 99
7.3.2 大記錄格式... 103
7.3.3 偽記錄 106
7.4 邏輯記錄........ 107
7.5 記錄之間的比較....... 108
7.6 行記錄版本.....111
7.7 小結.. 115
7.8 思考題............ 115
7.9 繼續閱讀........ 115
第8 章 索引頁....... 117
8.1 相關文件........ 117
8.2 頁...... 117
8.3 存儲結構........ 118
8.3.1 Page Header.. 118
8.3.2 Page Directory........... 121
8.3.3 示例.... 122
8.4 Page Cursor.... 125
8.4.1 定位記錄...... 125
8.4.2 插入記錄...... 127
8.4.3 刪除記錄...... 130
8.4.4 并發控制...... 130
8.5 小結.. 131
8.6 思考題............ 131
8.7 繼續閱讀........ 131
第9 章 鎖.. 133
9.1 相關文件........ 133
9.2 鎖與事務........ 133
9.2.1 隔離性 133
9.2.2 事務的隔離級別........ 135
9.2.3 幻讀.... 136
9.3 InnoDB 存儲引擎中鎖的類型與算法. 137
9.4 鎖的內部實現 139
9.4.1 數據結構...... 139
9.4.2 鎖的并發控制............ 143
9.4.3 鎖的類型與模式........ 143
9.4.4 鎖的兼容性... 144
9.5 顯式鎖和隱式鎖....... 145
9.5.1 顯式鎖與隱式鎖的區別.......... 145
9.5.2 聚集索引記錄的隱式鎖.......... 146
9.5.3 輔助索引記錄的隱式鎖.......... 146
9.6 加鎖操作........ 152
9.6.1 加鎖流程...... 152
9.6.2 加鎖過程...... 154
9.7 行鎖的維護.... 154
9.7.1 插入.... 154
9.7.2 更新.... 155
9.7.3 PURGE......... 156
9.7.4 一致性的鎖定讀........ 158
9.7.5 頁的分裂...... 159
9.7.6 頁的合并...... 162
9.8 自增鎖............ 164
9.9 死鎖.. 165
9.9.1 死鎖的概念... 165
9.9.2 死鎖概率...... 167
9.9.3 死鎖的示例... 168
9.10 小結 170
9.11 思考題.......... 171
9.12 繼續閱讀...... 171
第10 章 B+ 樹索引............ 173
10.1 B+ 樹............ 173
10.1.1 概述.. 173
10.1.2 插入.. 176
10.1.3 刪除.. 179
10.2 B+ 樹索引.... 180
10.2.1 索引的特點. 180
10.2.2 聚集索引.... 181
10.2.3 輔助索引.... 185
10.2.4 填充因子.... 190
10.3 InnoDB 存儲引擎B+ 樹索引實現.... 191
10.3.1 數據結構.... 191
10.3.2 相關latch... 192
10.3.3 整理.. 192
10.3.4 分裂.. 192
10.3.5 合并.. 200
10.4 查找 201
10.4.1 mode. 201
10.4.2 latch_mode... 204
10.4.3 cursor 205
10.5 DML 操作.... 207
10.5.1 插入.. 207
10.5.2 非主鍵更新. 210
10.5.3 主鍵更新.... 215
10.5.4 刪除.. 216
10.6 持久游標...... 219
10.7 自適應哈希索引..... 221
10.7.1 實現原理.... 221
10.7.2 創建哈希索引.......... 225
10.7.3 哈希索引的維護...... 226
10.7.4 自適應哈希索引的優缺點.... 227
10.8 小結 227
10.9 思考題.......... 228
10.10 繼續閱讀.... 228
第11 章 Insert Buffer......... 229
11.1 相關文件...... 229
11.2 基本概念...... 229
11.3 架構實現...... 231
11.3.1 存儲結構..... 231
11.3.2 邏輯控制..... 233
11.3.3 示例.. 234
11.4 相關數據結構......... 236
11.5 死鎖. 237
11.5.1 latch 順序.... 237
11.5.2 并發控制..... 239
11.5.3 異步I/O 線程........... 240
11.6 維護. 241
11.6.1 記錄合并..... 241
11.6.2 空間收縮..... 242
11.7 小結. 243
11.8 思考題.......... 244
11.9 繼續閱讀...... 244
第12 章 緩沖池..... 245
12.1 相關文件...... 245
12.2 概述 246
12.2.1 緩沖池........ 246
12.2.2 LRU、Free 和Flush 鏈表..... 249
12.2.3 基本數據結構.......... 251
12.3 緩沖池的管理........ 255
12.3.1 LRU 算法... 255
12.3.2 LRU 鏈表維護......... 255
12.3.3 頁的分配.... 256
12.4 頁的讀取...... 257
12.4.1 物理讀取.... 257
12.4.2 隨機預讀.... 258
12.4.3 線性預讀.... 259
12.4.4 邏輯讀取.... 262
12.5 頁的刷新...... 264
12.5.1 檢查點........ 264
12.5.2 部分寫的問題.......... 266
12.5.3 刷新的實現. 267
12.6 小結 269
12.7 思考題.......... 269
12.8 繼續閱讀...... 270
第13 章 事務處理. 271
13.1 相關文件........ 271
13.2 事務.. 272
13.2.1 概述.... 272
13.2.2 分類.... 274
13.2.1 隔離級別...... 275
13.3 事務系統結構 275
13.3.1 事務系統段.. 275
13.3.2 數據結構...... 277
13.4 DOUBLEWRITE 段. 280
13.5 UNDO 日志存儲...... 281
13.5.1 簡介.... 281
13.5.2 實現結構...... 283
13.5.3 回滾段 283
13.5.4 UNDO 段...... 284
13.6 UNDO 記錄... 288
13.6.1 存儲結構...... 288
13.6.2 INSERT UNDO LOG RECORD.......... 290
13.6.3 UPDATE UNDO LOG RECORD......... 292
13.7 PURGE.......... 299
13.7.1 清理操作...... 299
13.7.2 實現原理...... 300
13.8 ROLLBACK.. 303
13.8.1 回滾指針...... 303
13.8.2 回滾操作...... 303
13.9 COMMIT....... 306
13.10 kernel_mutex 與并發控制... 308
13.11 小結 309
13.12 思考題......... 309
13.13 繼續閱讀...... 309
第14 章 數據字典. 311
14.1 相關文件........ 311
14.2 數據字典概述 312
14.3 主要數據對象 312
14.3.1 數據字典系統............ 312
14.3.2 表定義 314
14.3.3 索引定義...... 316
14.3.4 外鍵約束定義............ 317
14.3.5 其他數據對象定義.... 319
14.4 InnoDB 系統表對象. 319
14.4.1 SYS_TABLES........... 319
14.4.2 SYS_COLUMNS....... 320
14.4.3 SYS_INDEXES......... 321
14.4.4 SYS_FIELDS............ 322
14.4.5 其他表對象.. 322
14.5 數據字典創建 323
14.5.1 數據字典段.. 324
14.5.2 數據字典物理結構.... 324
14.5.3 數據字典初始化........ 325
14.5.4 數據字典緩存組織.... 326
14.6 數據字典對象加載... 327
14.6.1 用戶表加載.. 327
14.6.2 用戶索引和外鍵約束加載...... 328
14.7 小結.. 329
14.8 思考題........... 329
14.9 繼續閱讀........ 329
第15 章 服務管理. 331
15.1 相關文件........ 331
15.2 初始化InnoDB 存儲引擎.................. 331
15.2.1 相關重要參數............ 333
15.2.2 服務管理相關數據結構.......... 333
15.2.3 文件創建和加載........ 335
15.2.4 啟動后臺線程............ 337
15.3 關閉InnoDB 存儲引擎......... 337
15.3.1 數據持久化.. 338
15.3.2 資源釋放...... 338
15.4 master 線程.... 339
15.4.1 主要功能...... 339
15.4.2 數據刷盤策略............ 339
15.5 鎖超時監控線程...... 341
15.6 思考題........... 342
15.7 繼續閱讀........ 342
序: