《高性能MySQL(第4版)》封麵

內容簡介

《高性能MySQL》一直是MySQL領域的經典之作,影響了一代又一代的DBA和技術人員,從第3版出版到第4版出版過去了近十年,MySQL也從5.5版本更新到了8.0版本。第4版中增加了大量對MySQL5.7和8.0版本新特性的介紹,刪除了一些在新版本中已經廢棄或者不再常用的功能,還增加了對雲數據庫的介紹,減少了在官方文檔中已有的基礎使用和配置相關的內容。這些年,MySQL經過在大量大規模互聯網場景中的應用驗證,使得本書在繼續關注高性能之外,還用了較多的篇幅來介紹如何實現MySQL的大規模可擴展應用和合規性問題,這是相比第3版最大的不同,也是本書封麵上所寫的“經過大規模運維驗證的策略”的體現。

《高性能MySQL(第4版)》適合數據庫管理員(DBA)閱讀,也適合係統運維和開發人員參考學習。不管你是數據庫新手還是專家,相信都能從本書中有所收獲。

作者簡介

SilviaBotros是Twilio的高級首席工程師。在SendGrid工作期間,她幫助部署和維護了各種MySQL數據存儲,這些數據存儲支持郵件管道和SendGrid提供的其他產品,並推動MySQL設計從開始到生產。

JeremyTinley是Etsy的高級職員工程師,擁有超過20年的MySQL經驗。在他的職業生涯中,他管理了成千上萬個MySQL實例,著眼於可用性、可靠性和運營效率。

譯者簡介

寧海元有超過十年的數據庫管理經驗,從最初的SQLServer2000到Oracle再到MySQL,擅長數據庫高可用架構、性能優化和故障診斷。目前專注於無線數據領域。網絡常用名NinGoo,

周振興畢業於北京師範大學數學係,2009年開始負責MySQL運維管理工作,有豐富的MySQL性能優化、Troubleshooting經驗,對MySQL主要模塊的實現和原理有深入的研究,對係統架構、高可用環境規劃都有深入理解。

張新銘,雲掣資深數據庫專家,網絡常用名俊達,曾任淘寶、支付寶DBA,全程參與淘寶核心業務係統底層存儲係統改造,參與建設支付寶MySQL標準化運維體係。對於數據庫體係結構和運作原理有深入的理解,擅長大數據量和高訪問量OLTP數據庫的設計和優化。

目錄

序.................................................................................xxiii
前言...............................................................................xxv
本書第4版的致謝..............................................................xxix
第1章 MySQL架構............................................................1
MySQL的邏輯架構......................................................................................................1
連接管理與安全性................................................................................................2
優化與執行............................................................................................................2
並發控製.......................................................................................................................3
讀寫鎖...................................................................................................................3
鎖的粒度...............................................................................................................4
事務..............................................................................................................................5
隔離級別...............................................................................................................7
死鎖.......................................................................................................................8
事務日誌...............................................................................................................9
MySQL中的事務................................................................................................10
多版本並發控製..........................................................................................................12
複製............................................................................................................................13
數據文件結構.............................................................................................................14
InnoDB引擎...............................................................................................................14
JSON文檔支持...................................................................................................15
數據字典的變化..................................................................................................16
原子DDL............................................................................................................16
小結............................................................................................................................16
第2章 可靠性工程世界中的監控..............................................17
可靠性工程對DBA團隊的影響.................................................................................18
定義服務水平目標......................................................................................................18
怎樣才能讓客戶滿意...........................................................................................19
用什麼來度量.............................................................................................................20
定義SLI和SLO.................................................................................................20
監控解決方案......................................................................................................21
監控可用性..........................................................................................................22
監控查詢延遲......................................................................................................24
監控報錯.............................................................................................................24
主動監控.............................................................................................................25
度量長期性能.............................................................................................................31
了解業務節奏......................................................................................................31
有效地跟蹤指標..................................................................................................32
使用監控工具檢查性能.......................................................................................33
使用SLO來指導整體架構..................................................................................34
小結............................................................................................................................34
第3章 PerformanceSchema...........................................35
PerformanceSchema介紹...........................................................................................35
插樁元件.............................................................................................................36
消費者表的組織..................................................................................................37
資源消耗.............................................................................................................39
局限性.................................................................................................................39
sysSchema..........................................................................................................40
理解線程.............................................................................................................40
配置............................................................................................................................41
啟用或禁用PerformanceSchema........................................................................42
啟用或禁用插樁..................................................................................................42
啟用或禁用消費者表...........................................................................................43
優化特定對象的監控...........................................................................................44
優化線程的監控..................................................................................................45
調整PerformanceSchema的內存大小................................................................46
默認值.................................................................................................................46
使用PerformanceSchema...........................................................................................46
檢查SQL語句....................................................................................................46
檢查讀寫性能......................................................................................................54
檢查元數據鎖......................................................................................................56
檢查內存使用情況..............................................................................................56
檢查變量.............................................................................................................59
檢查最常見的錯誤..............................................................................................62
檢查PerformanceSchema自身...........................................................................63
小結............................................................................................................................65
第4章 操作係統和硬件優化..................................................66
什麼限製了MySQL的性能........................................................................................66
如何為MySQL選擇CPU...........................................................................................67
平衡內存和磁盤資源..................................................................................................67
緩存、讀取和寫入..............................................................................................67
你的工作集是什麼..............................................................................................68
固態存儲.....................................................................................................................68
閃存概述.............................................................................................................69
垃圾收集.............................................................................................................69
RAID性能優化...........................................................................................................70
RAID故障、恢複和監控....................................................................................72
RAID配置和緩存...............................................................................................73
網絡配置.....................................................................................................................75
選擇文件係統.............................................................................................................77
選擇磁盤隊列調度器...........................................................................................79
內存和交換..........................................................................................................79
操作係統狀態......................................................................................................81
其他有用的工具..................................................................................................84
小結............................................................................................................................84
第5章 優化服務器設置.......................................................86
MySQL的配置是如何工作的.....................................................................................87
語法、作用域和動態性.......................................................................................88
持久化係統變量..................................................................................................89
設置變量的副作用..............................................................................................89
規劃變量的更改..................................................................................................90
什麼不該做.................................................................................................................91
創建MySQL配置文件...............................................................................................92
最小化配置..........................................................................................................92
檢查MySQL服務器的狀態變量.........................................................................94
配置內存使用.............................................................................................................94
每個連接的內存需求...........................................................................................94
為操作係統保留內存...........................................................................................95
InnoDB緩衝池....................................................................................................95
線程緩存.............................................................................................................96
配置MySQL的I/O行為............................................................................................97
InnoDB事務日誌................................................................................................98
日誌緩衝區..........................................................................................................98
InnoDB表空間..................................................................................................100
其他I/O配置選項.............................................................................................103
配置MySQL並發.....................................................................................................103
安全設置...................................................................................................................104
高級InnoDB設置.....................................................................................................106
小結..........................................................................................................................108
第6章 schema設計與管理................................................109
選擇優化的數據類型................................................................................................109
整數類型............................................................................................................111
實數類型............................................................................................................111
字符串類型........................................................................................................112
日期和時間類型................................................................................................117
位壓縮數據類型................................................................................................119
JSON數據類型.................................................................................................121
選擇標識符........................................................................................................124
特殊數據類型....................................................................................................126
MySQLschema設計中的陷阱..................................................................................127
太多的列...........................................................................................................127
太多的聯接........................................................................................................127
全能的枚舉........................................................................................................127
變相的枚舉........................................................................................................128
NULL不是虛擬值.............................................................................................128
schema管理..............................................................................................................128
作為數據存儲平台一部分的schema管理.........................................................129
小結..........................................................................................................................135
第7章 創建高性能的索引....................................................136
索引基礎...................................................................................................................136
索引的類型........................................................................................................137
使用索引的優點................................................................................................141
高性能的索引策略....................................................................................................142
前綴索引和索引的選擇性.................................................................................142
多列索引...........................................................................................................145
選擇合適的索引列順序.....................................................................................147
聚簇索引...........................................................................................................150
覆蓋索引...........................................................................................................157
使用索引掃描來做排序.....................................................................................159
冗餘和重複索引................................................................................................161
未使用的索引....................................................................................................164
維護索引和表...........................................................................................................164
找到並修複損壞的表.........................................................................................165
更新索引統計信息............................................................................................165
減少索引和數據的碎片.....................................................................................167
小結..........................................................................................................................168
第8章 查詢性能優化.........................................................170
為什麼查詢速度會慢................................................................................................170
慢查詢基礎:優化數據訪問.....................................................................................171
是否向數據庫請求了不需要的數據..................................................................171
MySQL是否在掃描額外的記錄........................................................................173
重構查詢的方式........................................................................................................177
一個複雜查詢還是多個簡單查詢......................................................................177
切分查詢...........................................................................................................178
分解聯接查詢....................................................................................................178
查詢執行的基礎........................................................................................................179
MySQL的客戶端/服務器通信協議.................................................................180
查詢狀態...........................................................................................................182
查詢優化處理....................................................................................................183
查詢執行引擎....................................................................................................196
將結果返回給客戶端.........................................................................................197
MySQL查詢優化器的局限性...................................................................................197
UNION的限製..................................................................................................197
等值傳遞...........................................................................................................198
並行執行...........................................................................................................198
在同一個表中查詢和更新.................................................................................198
優化特定類型的查詢................................................................................................199
優化COUNT()查詢..........................................................................................199
優化聯接查詢....................................................................................................201
使用WITHROLLUP優化GROUPBY............................................................201
優化LIMIT和OFFSET子句............................................................................202
優化SQL_CALC_FOUND_ROWS...................................................................203
優化UNION查詢.............................................................................................204
小結..........................................................................................................................204
第9章 複製....................................................................205
複製概述...................................................................................................................205
複製如何工作....................................................................................................207
複製原理...................................................................................................................208
選擇複製格式....................................................................................................208
全局事務標識符................................................................................................208
崩潰後的複製安全............................................................................................210
延遲複製...........................................................................................................210
多線程複製........................................................................................................211
半同步複製........................................................................................................214
複製過濾器........................................................................................................214
複製切換...................................................................................................................216
計劃內切換........................................................................................................216
計劃外切換........................................................................................................217
切換時的權衡....................................................................................................217
複製拓撲...................................................................................................................217
主動/被動模式.................................................................................................218
主動/隻讀池模式.............................................................................................219
不推薦的一些拓撲架構.....................................................................................220
複製管理和維護........................................................................................................223
複製監控...........................................................................................................223
觀測複製延遲....................................................................................................224
確定副本數據的一致性.....................................................................................225
複製問題和解決方案................................................................................................226
源端二進製日誌損壞.........................................................................................226
非唯一的服務器ID...........................................................................................226
未配置服務器ID...............................................................................................227
臨時表丟失........................................................................................................227
沒有複製所有變更............................................................................................227
複製延遲過大....................................................................................................228
來自源服務器的超大數據包.............................................................................229
磁盤空間耗盡....................................................................................................229
複製的限製........................................................................................................229
小結..........................................................................................................................230
第10章 備份與恢複..........................................................231
為什麼要備份........................................................................................................232
定義恢複需求.......................................................................................................233
設計MySQL備份方案.........................................................................................234
在線備份還是離線備份.....................................................................................235
邏輯備份還是裸文件備份.................................................................................236
備份什麼...........................................................................................................238
增量備份和差異備份.........................................................................................239
複製...................................................................................................................240
管理和備份二進製日誌..........................................................................................241
備份和恢複工具....................................................................................................241
MySQLEnterpriseBackup................................................................................241
PerconaXtraBackup..........................................................................................242
mydumper..........................................................................................................242
mysqldump........................................................................................................242
備份數據................................................................................................................242
邏輯SQL備份..................................................................................................242
文件係統快照....................................................................................................244
PerconaXtraBackup..........................................................................................249
從備份中恢複數據.................................................................................................252
恢複邏輯備份....................................................................................................253
從快照中恢複....................................................................................................254
使用PerconaXtraBackup進行恢複..................................................................255
原始文件恢複後啟動MySQL...........................................................................256
小結......................................................................................................................257
第11章 擴展MySQL.......................................................258
什麼是可擴展性.....................................................................................................258
讀限製與寫限製工作負載.......................................................................................260
理解工作負載....................................................................................................260
讀限製工作負載................................................................................................261
寫限製工作負載................................................................................................261
功能拆分...............................................................................................................262
使用讀池擴展讀.....................................................................................................262
管理讀池的配置................................................................................................264
讀池健康檢查....................................................................................................265
選擇負載均衡器算法.........................................................................................266
排隊機製....................................................................................................267
使用分片擴展寫...............................................................................................268
選擇切分方案....................................................................................................269
多個分片鍵........................................................................................................270
跨分片查詢........................................................................................................271
Vitess.................................................................................................................272
ProxySQL..........................................................................................................275
小結.............................................................................................................279
第12章 雲端的MySQL....................................................280
托管MySQL.............................................................................................280
AmazonAuroraforMySQL...............................................................................281
GCPCloudSQL.................................................................................................283
虛擬機上的MySQL..................................................................................................284
雲上的機器類型................................................................................................284
選擇正確的機器類型.........................................................................................285
選擇正確的磁盤類型.........................................................................................286
額外的建議........................................................................................................287
小結...........................................................................................................289
第13章 MySQL的合規性.................................................291
什麼是合規性..........................................................................................291
服務組織控製類型2..........................................................................................292
薩班斯-奧克斯利法案.....................................................................................292
支付卡行業數據安全標準.................................................................................292
健康保險可攜帶性和責任法案..........................................................................292
聯邦風險和授權管理計劃.................................................................................293
通用數據保護條例............................................................................................293
SchremsII.........................................................................................................293
建立合規控製體係....................................................................................294
機密信息管理....................................................................................................294
角色與數據分離................................................................................................297
跟蹤變更...........................................................................................................297
備份和恢複過程................................................................................................302
小結......................................................................................................................304
附錄A 升級MySQL.........................................................305
附錄B Kubernetes上的MySQL.......................................310
······

最後修改:2024 年 01 月 30 日