編輯推薦
作者是騰訊的T4級專家,有近20年資料庫核心研發經驗,曾是Oracle公司MySQL全球開發組核心成員
中國計算機學會(CCF)常務理事、資料庫專委會主任、資料庫領域著名專家、中國人民大學杜小勇教授親自作序推薦
人民大學張孝和盧衛教授、武漢大學彭煜煒教授、雲和恩墨CEO蓋國強、騰訊金融支付資料庫運營與研發部副總監姜承堯聯袂推薦
內容簡介
作者有近20年資料庫核心研發經驗,曾是Oracle公司MySQL全球開發組核心成員,現在是騰訊的T4級專家。資料庫領域的泰斗杜小勇老師親自為是本書作序,資料庫學術界的知名學者張孝博士(中國人民大學)、盧衛博士後(中國人民大學)、彭煜瑋博士(武漢大學),以及資料庫工業界的知名專家蓋國強和姜承堯等也給予了極高的評價。
全書共12章,首先介紹資料庫事務管理與並發控制的基礎理論和工作機制,然後再從工程實踐的角度對比和分析了4個主流資料庫的事務管理與並發控制的實現原理,最後通過原始碼分析了PostgreSQL和MySQL在事務管理與並發控制上的技術架構與設計思想。
第一篇(1-2章) 事務管理與並發控制基礎理論
對資料庫事務管理和並發控制的基礎理論、核心技術和工作原理進行了講解,包括資料庫事務處理技術的範圍、數據的異常現象及成因、事務模型、並發訪問控制技術、以及隔離性等。
第二篇(3-6章) 事務管理與並發控制套用實例研究
以Informix、Oracle、PostgreSQL和MySQL/InnoDB等主流資料庫系統為例,對他們的事務管理和並發控制的實現技術、工作原理以及原理背後的設計思想進行了深度分析和對比。
第三篇(7-9章) PostgreSQL事務管理與並發控制源碼分析
首先對PostgreSQL事務處理技術的架構、層次、設計思想、相關數據結構和實現原理進行了深入系統的分析,然後從功能角度對PostgreSQL的事務模型、並發控制、一致性、隔離性以及其所使用的SS2PL、MVCC、SSI等技術做了深入的講解。
第四篇(10-12章) InnoDB事務管理與並發控制源碼分析
首先對事MySQL/InnoDB的務處理技術的架構、層次、設計思想、相關數據結構和實現原理進行了深入系統的分析,然後從功能角度對MySQL/InnoDB的事務模型、並發控制、一致性、隔離性以及其所使用的SS2PL、MVCC等技術做了深入的講解。
作者簡介
李海翔(網名:那海藍藍)
資深數據專家,擁有近20年資料庫核心研發經驗,曾就職於人大金倉、Oracle公司MySQL全球開發組等,現就職於騰訊TEG計費平台部,T4級專家。中國人民大學工程碩士企業導師。
資料庫技術精湛,不僅熟悉PostgreSQL、GreenPlum、MySQL、Informix、CockroachDB等資料庫的使用,而且熟悉它們的源碼,尤其擅長資料庫的查詢最佳化技術、事務處理技術和資料庫架構技術。資料庫相關工作閱歷豐富,從事過資料庫研發(JDBC驅動、管理工具套機、核心)、資料庫測試、技術團隊管理、資料庫架構設計等多個崗位。
曾獲得北京市科學技術進步獎一等獎和騰訊公司級技術突破獎,做過包括863、核高基、工信部、科技部、發改委、北京市科委等多個重大科技項目在內的30多個國家*大型項目。
除本書外,還撰寫並出版了本書的姊妹篇《資料庫查詢最佳化器的藝術:原理解析與SQL性能最佳化》,被譽為資料庫性能最佳化領域的經典。
圖書目錄
推薦序一
推薦序二
推薦序三
推薦序四
推薦序五
推薦序六
前言
第一篇 事務管理與並發控制基礎理論
第1章 資料庫管理系統的事務原理 2
1.1 事務模型要解決的問題 2
1.1.1 為什麼需要事務處理機制 2
1.1.2 事務機制要處理的問題——事務故障、系統故障、介質故障 4
1.1.3 並髮帶來的問題椚?
常見的讀數據異常現象 4
1.1.4 並髮帶來的問題——寫並發操作引發的數據異常現象 8
1.1.5 語義約束引發的數據異常現象 9
1.1.6 其他的異常 11
1.1.7 深入探討三種讀數據異常現象 13
1.2 事務處理技術的原理 17
1.2.1 什麼是事務 17
1.2.2 事務的屬性 20
1.2.3 ACID的實現技術 24
1.3 事務的模型 26
1.4 並發控制技術 27
1.4.1 並發控制技術的實現策略 27
1.4.2 並發控制技術的實現技術 28
1.5 日誌技術與恢復子系統31
1.6 本章小結 32
第2章 深入理解事務管理和並發控制技術 33
2.1 在正確性和效率之間平衡 33
2.1.1 隔離級別 34
2.1.2 快照隔離 36
2.1.3 理解可見性 39
2.2 並發控制 40
2.2.1 基於鎖的並發控制方法 42
2.2.2 基於時間戳的並發控制方法 47
2.2.3 基於有效性檢查的並發控制方法 52
2.2.4 基於MVCC的並發控制方法 53
2.2.5 基於MVCC的可串列化快照隔離並發控制方法 56
2.2.6 再深入探討三種讀數據異常現象 60
2.3 並發控制技術的比較 62
2.3.1 並發控制技術整體比較 62
2.3.2 S2PL和SS2PL的比較 64
2.3.3 事務屬性與並發控制技術的關係 65
2.3.4 SCO和SS2PL的比較 66
2.3.5 TO和SS2PL的比較 67
2.4 深入探討隔離級別 68
2.4.1 隔離級別與基於鎖的並發控制方法 68
2.4.2 隔離級別與各種並發控制技術 69
2.5 事務的管理 70
2.5.1 事務的開始 71
2.5.2 事務的提交 71
2.5.3 事務的中止與回滾 72
2.5.4 子事務與SAVEPOINT 72
2.5.5 長事務的管理 73
2.5.6 XA 74
2.6 事務相關的實戰問題討論 75
2.7 本章小結 76
第二篇 事務管理與並發控制套用實例研究
第3章 Informix事務管理與並發控制 78
3.1 Informix的事務操作 78
3.1.1 開始事務 78
3.1.2 提交事務 79
3.1.3 回滾事務 80
3.1.4 XA事務 80
3.1.5 事務模型 82
3.2 Informix的封鎖技術 83
3.2.1 鎖的級別 83
3.2.2 鎖的粒度 84
3.3 隔離級別與數據異常 85
3.3.1 Informix支持的隔離級別 85
3.3.2 隔離級別與日誌的模式 86
3.3.3 寫偏序異常 87
3.4 本章小結 88
第4章 PostgreSQL事務管理與並發控制 89
4.1 PostgreSQL事務操作 89
4.1.1 開始事務 90
4.1.2 提交事務 90
4.1.3 回滾事務 90
4.1.4 XA事務 91
4.1.5 自動控制事務 91
4.2 SQL操作與鎖 92
4.2.1 鎖的研究準備 92
4.2.2 INSERT操作觸發的鎖 94
4.2.3 SELECT操作觸發的鎖 94
4.2.4 SELECT FOR UPDATE操作觸發的鎖 97
4.2.5 UPDATE操作觸發的鎖 100
4.2.6 DELETE操作觸發的鎖 103
4.2.7 ANALYZE操作觸發的鎖 106
4.2.8 CREATE INDEX操作觸發的鎖 106
4.2.9 CREATE TRIGGER操作觸發的鎖 107
4.2.10 鎖的相關參數 108
4.3 隔離級別與數據異常 108
4.3.1 SQL標準定義的三種讀異常 108
4.3.2 寫偏序異常 115
4.4 本章小結 118
第5章 InnoDB事務管理與並發控制 119
5.1 InnoDB的事務模型 119
5.1.1 開始事務 120
5.1.2 提交事務與回滾事務 121
5.1.3 MySQL的XA 122
5.2 InnoDB基於鎖的並發控制 123
5.2.1 基於封鎖技術實現基本的並發控制 123
5.2.2 鎖的種類 124
5.2.3 鎖的施加規則 127
5.2.4 獲取InnoDB行鎖爭用情況 129
5.2.5 死鎖 129
5.3 InnoDB基於MVCC的並發控制 130
5.4 隔離級別與數據異常 131
5.4.1 SQL標準定義的三種讀異常 131
5.4.2 寫偏序異常 134
5.5 本章小結 138
第6章 Oracle事務管理與並發控制 139
6.1 Oracle的事務操作 139
6.1.1 事務管理 139
6.1.2 事務屬性和隔離級別 140
6.1.3 XA事務 141
6.2 Oracle的封鎖技術 142
6.2.1 元數據鎖的級別 142
6.2.2 用戶數據鎖的級別 143
6.3 MVCC技術 145
6.3.1 MVCC的歷史 145
6.3.2 深入理解MVCC 147
6.3.3 Oracle的MVCC 149
6.4 隔離級別與數據異常 157
6.4.1 Oracle支持的隔離級別 157
6.4.2 寫偏序異常 158
6.5 本章小結 160
第三篇 PostgreSQL事務管理與並發控制源碼分析
第7章 PostgreSQL事務系統的實現 162
7.1 架構概述 162
7.1.1 事務和並發控制相關的檔案 162
7.1.2 事務相關的整體架構 164
7.2 事務管理的基礎 166
7.2.1 事務狀態 166
7.2.2 事務體 171
7.2.3 事務運行的簡略過程 172
7.3 事務操作 173
7.3.1 開始事務 173
7.3.2 事務提交 177
7.3.3 日誌落盤 179
7.3.4 事務回滾 180
7.3.5 clog 185
7.4 子事務的管理 186
7.4.1 子事務與父事務的區別 186
7.4.2 保存點 187
7.5 本章小結 188
第8章 PostgreSQL並發控制系統的實現—封鎖 189
8.1 鎖的概述 189
8.1.1 鎖操作的本質 189
8.1.2 與鎖相關的檔案 190
8.1.3 與鎖相關的記憶體初始化 191
8.2 系統鎖 192
8.2.1 SpinLock 192
8.2.2 LWLock 198
8.2.3 SpinLock與LWLock比較 213
8.3 事務鎖 214
8.3.1 鎖的基本信息 214
8.3.2 ReguarLock 221
8.3.3 行級鎖 232
8.3.4 Advisory lock(勸告鎖) 237
8.4 事務鎖的管理 239
8.4.1 獲取鎖 239
8.4.2 鎖查找或創建 242
8.4.3 釋放鎖 243
8.4.4 鎖衝突檢測 244
8.5 死鎖檢測 247
8.5.1 數據結構 247
8.5.2 等待獲取鎖與死鎖處理 248
8.5.3 死鎖檢測 251
8.5.4 進程喚醒 252
8.6 從鎖的角度看用法 254
8.6.1 AccessShareLock 254
8.6.2 RowShareLock 256
8.6.3 RowExclusiveLock 257
8.6.4 ExclusiveLock 258
8.6.5 其他的鎖 260
8.7 本章小結 262
第9章 PostgreSQL並發控制系統的實現—MVCC 263
9.1 快照 264
9.1.1 相關檔案 264
9.1.2 數據結構 265
9.1.3 快照的類型 268
9.1.4 快照的管理 268
9.1.5 可串列化隔離級別的快照 271
9.2 可見性判斷與多版本 273
9.2.1 可見性判斷 273
9.2.2 多版本實現 282
9.3 可串列化快照原理 285
9.3.1 理論基礎 285
9.3.2 算法實現 287
9.4 PostgreSQL可串列化快照的實現 289
9.4.1 PostgreSQL的狀況 289
9.4.2 PostgreSQL實現SSI的理論基礎 289
9.4.3 謂詞鎖數據結構 297
9.4.4 謂詞鎖操作 306
9.4.5 衝突檢測 321
9.5 隔離級別 336
9.5.1 隔離級別 336
9.5.2 各種隔離級別的實現 337
9.6 本章小結 340
第四篇 InnoDB事務管理與並發控制源碼分析
第10章 InnoDB事務系統的實現 342
10.1 架構概述 342
10.1.1 事務和並發控制相關的檔案 342
10.1.2 事務相關的整體架構 344
10.2 事務管理的基礎 346
10.2.1 事務狀態 346
10.2.2 表示事務的數據結構 348
10.2.3 UNDO日誌與回滾 349
10.2.4 REDO日誌 350
10.2.5 內部事務的處理 352
10.2.6 Mini-Transaction 352
10.3 事務操作 353
10.3.1 InnoDB的初始化 354
10.3.2 開始事務 354
10.3.3 提交事務 359
10.3.4 日誌落盤 364
10.3.5 回滾事務 367
10.3.6 Mini-Transaction的提交 371
10.3.7 Mini-Transaction的回滾 373
10.3.8 SAVEPOINT 373
10.3.9 XA 375
10.3.10 事務的其他內容 375
10.4 InnoDB事務模型 378
10.5 本章小結 382
第11章 InnoDB並發控制系統的實現—兩階段鎖 383
11.1 鎖的概述 383
11.1.1 鎖操作的本質 383
11.1.2 全局鎖表 384
11.1.3 封鎖系統的架構 384
11.2 系統鎖 386
11.2.1 讀寫鎖 386
11.2.2 Mutex鎖 394
11.2.3 其他鎖 401
11.3 事務鎖之記錄鎖 401
11.3.1 記錄鎖的基本數據結構 402
11.3.2 記錄鎖 408
11.3.3 記錄鎖與隔離級別 423
11.4 事務鎖之元數據鎖 433
11.4.1 元數據鎖的數據結構 433
11.4.2 元數據鎖的管理與使用 450
11.4.3 死鎖處理 468
11.5 SQL語義定義鎖 476
11.5.1 鎖的粒度 476
11.5.2 重要的數據結構 478
11.5.3 InnoDB對接MySQL Server 480
11.6 其他類型的鎖 493
11.6.1 Mini-Transaction加鎖 493
11.6.2 事務鎖之謂詞鎖 494
11.7 事務與鎖 499
11.8 本章小結 500
第12章 InnoDB並發控制系統的實現—MVCC 502
12.1 數據結構 503
12.1.1 MVCC 503
12.1.2 Read View快照 504
12.1.3 事務與快照 505
12.2 可見性判斷 506
12.2.1 可見性原則 506
12.2.2 二級索引的可見性 509
12.3 多版本的實現 509
12.3.1 多版本結構 509
12.3.2 多版本生成 510
12.3.3 多版本查找 510
12.3.4 多版本清理 511
12.4 一致性讀和半一致性讀 511
12.4.1 一致性讀 512
12.4.2 半一致性讀 512
12.5 本章小結 513
附錄 TDSQL簡介 514