《高性能MySQL(第3版)》是MySQL領(lǐng)域的經(jīng)典之作,擁有廣泛的影響力。第3版更新了大量的內(nèi)容,不但涵蓋了最新MySQL5.5版本的新特性,也講述了關(guān)于固態(tài)盤、高可擴(kuò)展性設(shè)計(jì)和云計(jì)算環(huán)境下的數(shù)據(jù)庫(kù)相關(guān)的新內(nèi)容,原有的基準(zhǔn)測(cè)試和性能優(yōu)化部分也做了大量的擴(kuò)展和補(bǔ)充!陡咝阅躆ySQL(第3版)》共分為16章和6個(gè)附錄,內(nèi)容涵蓋MySQL架構(gòu)和歷史,基準(zhǔn)測(cè)試和性能剖析,數(shù)據(jù)庫(kù)軟硬件性能優(yōu)化,復(fù)制、備份和恢復(fù),高可用與高可擴(kuò)展性,以及云端的MySQL和MySQL相關(guān)工具等方面的內(nèi)容。每一章都是相對(duì)獨(dú)立的主題,讀者可以有選擇性地單獨(dú)閱讀。
《高性能MySQL(第3版)》不但適合數(shù)據(jù)庫(kù)管理員(DBA)閱讀,也適合開發(fā)人員參考學(xué)習(xí)。不管是數(shù)據(jù)庫(kù)新手還是專家,相信都能從《高性能MySQL(第3版)》有所收獲。
“只要你不敢以MySQL專家自詡,又豈敢錯(cuò)過這本神書?”“一言以蔽之,寫得好,編排得好,需要參考時(shí)容易到爆!”“我可是從頭到尾看了一遍上一版,可還是毫不猶豫拿起了這本書,而且看完后一點(diǎn)都不后悔……”
目錄
推薦序
前言
第1章 MySQL 架構(gòu)與歷史
1.1 MySQL 邏輯架構(gòu)
1.1.1 連接管理與安全性
1.1.2 優(yōu)化與執(zhí)行
1.2 并發(fā)控制
1.2.1 讀寫鎖
1.2.2 鎖粒度
1.3 事務(wù)
1.3.1 隔離級(jí)別
1.3.2 死鎖
1.3.3 事務(wù)日志
1.3.4 MySQL 中的事務(wù)
1.4 多版本并發(fā)控制
1.5 MySQL 的存儲(chǔ)引擎
1.5.1 InnoDB 存儲(chǔ)引擎
1.5.2 MyISAM 存儲(chǔ)引擎
1.5.3 MySQL 內(nèi)建的其他存儲(chǔ)引擎
1.5.4 第三方存儲(chǔ)引擎
1.5.5 選擇合適的引擎
1.5.6 轉(zhuǎn)換表的引擎
1.6 MySQL 時(shí)間線(Timeline)
1.7 MySQL 的開發(fā)模式
1.8 總結(jié)
第2章 MySQL 基準(zhǔn)測(cè)試
2.1 為什么需要基準(zhǔn)測(cè)試
2.2 基準(zhǔn)測(cè)試的策略
2.2.1 測(cè)試何種指標(biāo)
2.3 基準(zhǔn)測(cè)試方法
2.3.1 設(shè)計(jì)和規(guī)劃基準(zhǔn)測(cè)試
2.3.2 基準(zhǔn)測(cè)試應(yīng)該運(yùn)行多長(zhǎng)時(shí)間
2.3.3 獲取系統(tǒng)性能和狀態(tài)
2.3.4 獲得準(zhǔn)確的測(cè)試結(jié)果
2.3.5 運(yùn)行基準(zhǔn)測(cè)試并分析結(jié)果
2.3.6 繪圖的重要性
2.4 基準(zhǔn)測(cè)試工具
2.4.1 集成式測(cè)試工具
2.4.2 單組件式測(cè)試工具
2.5 基準(zhǔn)測(cè)試案例
2.5.1 http_load
2.5.2 MySQL 基準(zhǔn)測(cè)試套件 .
2.5.3 sysbench
2.5.4 數(shù)據(jù)庫(kù)測(cè)試套件中的dbt2 TPC-C 測(cè)試
2.5.5 Percona 的TPCC-MySQL 測(cè)試工具
2.6 總結(jié)
第3章 服務(wù)器性能剖析
3.1 性能優(yōu)化簡(jiǎn)介
3.1.1 通過性能剖析進(jìn)行優(yōu)化
3.1.2 理解性能剖析
3.2 對(duì)應(yīng)用程序進(jìn)行性能剖析
3.2.1 測(cè)量PHP 應(yīng)用程序
3.3 剖析MySQL 查詢
3.3.1 剖析服務(wù)器負(fù)載
3.3.2 剖析單條查詢
3.3.3 使用性能剖析
3.4 診斷間歇性問題
3.4.1 單條查詢問題還是服務(wù)器問題
3.4.2 捕獲診斷數(shù)據(jù)
3.4.3 一個(gè)診斷案例
3.5 其他剖析工具
3.5.1 使用USER_STATISTICS 表
3.5.2 使用strace
3.6 總結(jié)
第4章 Schema 與數(shù)據(jù)類型優(yōu)化
4.1 選擇優(yōu)化的數(shù)據(jù)類型
4.1.1 整數(shù)類型
4.1.2 實(shí)數(shù)類型
4.1.3 字符串類型
4.1.4 日期和時(shí)間類型
4.1.5 位數(shù)據(jù)類型
4.1.6 選擇標(biāo)識(shí)符(identifier)
4.1.7 特殊類型數(shù)據(jù)
4.2 MySQL schema 設(shè)計(jì)中的陷阱
4.3 范式和反范式
4.3.1 范式的優(yōu)點(diǎn)和缺點(diǎn)
4.3.2 反范式的優(yōu)點(diǎn)和缺點(diǎn) .
4.3.3 混用范式化和反范式化
4.4 緩存表和匯總表
4.4.1 物化視圖
4.4.2 計(jì)數(shù)器表
4.5 加快ALTER TABLE 操作的速度
4.5.1 只修改.frm 文件
4.5.2 快速創(chuàng)建MyISAM 索引
4.6 總結(jié)
第5章 創(chuàng)建高性能的索引
5.1 索引基礎(chǔ)
5.1.1 索引的類型
5.2 索引的優(yōu)點(diǎn)
5.3 高性能的索引策略
5.3.1 獨(dú)立的列
5.3.2 前綴索引和索引選擇性
5.3.3 多列索引
5.3.4 選擇合適的索引列順序
5.3.5 聚簇索引
5.3.6 覆蓋索引
5.3.7 使用索引掃描來做排序
5.3.8 壓縮(前綴壓縮)索引
5.3.9 冗余和重復(fù)索引
5.3.10 未使用的索引
5.3.11 索引和鎖
5.4 索引案例學(xué)習(xí)
5.4.1 支持多種過濾條件
5.4.2 避免多個(gè)范圍條件
5.4.3 優(yōu)化排序
5.5 維護(hù)索引和表
5.5.1 找到并修復(fù)損壞的表 .
5.5.2 更新索引統(tǒng)計(jì)信息
5.5.3 減少索引和數(shù)據(jù)的碎片
5.6 總結(jié)
第6章 查詢性能優(yōu)化
6.1 為什么查詢速度會(huì)慢
6.2 慢查詢基礎(chǔ):優(yōu)化數(shù)據(jù)訪問
6.2.1 是否向服務(wù)器請(qǐng)求了不需要的數(shù)據(jù)
6.2.2 MySQL 是否在掃描額外的記錄
6.3 重構(gòu)查詢的方式
6.3.1 一個(gè)復(fù)雜查詢還是多個(gè)簡(jiǎn)單查詢
6.3.2 切分查詢
6.3.3 分解關(guān)聯(lián)查詢
6.4 查詢執(zhí)行的基礎(chǔ)
6.4.1 MySQL 客戶端/ 服務(wù)器通信協(xié)議
6.4.2 查詢緩存
6.4.3 查詢優(yōu)化處理
6.4.4 查詢執(zhí)行引擎
6.4.5 返回結(jié)果給客戶端
6.5 MySQL 查詢優(yōu)化器的局限性
6.5.1 關(guān)聯(lián)子查詢
6.5.2 UNION 的限制
6.5.3 索引合并優(yōu)化
6.5.4 等值傳遞
6.5.5 并行執(zhí)行
6.5.6 哈希關(guān)聯(lián)
6.5.7 松散索引掃描
6.5.8 最大值和最小值優(yōu)化 .
6.5.9 在同一個(gè)表上查詢和更新
6.6 查詢優(yōu)化器的提示(hint)
6.7 優(yōu)化特定類型的查詢
6.7.1 優(yōu)化COUNT() 查詢
6.7.2 優(yōu)化關(guān)聯(lián)查詢
6.7.3 優(yōu)化子查詢
6.7.4 優(yōu)化GROUP BY 和DISTINCT
6.7.5 優(yōu)化LIMIT 分頁(yè)
6.7.6 優(yōu)化SQL_CALC_FOUND_ROWS
6.7.7 優(yōu)化UNION 查詢
6.7.8 靜態(tài)查詢分析
6.7.9 使用用戶自定義變量 .
6.8 案例學(xué)習(xí)
6.8.1 使用MySQL 構(gòu)建一個(gè)隊(duì)列表
6.8.2 計(jì)算兩點(diǎn)之間的距離 .
6.8.3 使用用戶自定義函數(shù) .
6.9 總結(jié)
第7章 MySQL 高級(jí)特性
7.1 分區(qū)表
7.1.1 分區(qū)表的原理
7.1.2 分區(qū)表的類型
7.1.3 如何使用分區(qū)表
7.1.4 什么情況下會(huì)出問題 .
7.1.5 查詢優(yōu)化
7.1.6 合并表
7.2 視圖
7.2.1 可更新視圖
7.2.2 視圖對(duì)性能的影響
7.2.3 視圖的限制
7.3 外鍵約束
7.4 在MySQL 內(nèi)部存儲(chǔ)代碼
7.4.1 存儲(chǔ)過程和函數(shù)
7.4.2 觸發(fā)器
7.4.3 事件
7.4.4 在存儲(chǔ)程序中保留注釋
7.5 游標(biāo)
7.6 綁定變量
7.6.1 綁定變量的優(yōu)化
7.6.2 SQL 接口的綁定變量
7.6.3 綁定變量的限制
7.7 用戶自定義函數(shù)
7.8 插件
7.9 字符集和校對(duì)
7.9.1 MySQL 如何使用字符集
7.9.2 選擇字符集和校對(duì)規(guī)則
7.9.3 字符集和校對(duì)規(guī)則如何影響查詢
7.10 全文索引
7.10.1 自然語(yǔ)言的全文索引
7.10.2 布爾全文索引
7.10.3 MySQL5.1 中全文索引的變化
7.10.4 全文索引的限制和替代方案
7.10.5 全文索引的配置和優(yōu)化
7.11 分布式(XA)事務(wù)
7.11.1 內(nèi)部XA 事務(wù)
7.11.2 外部XA 事務(wù)
7.12 查詢緩存
7.12.1 MySQL 如何判斷緩存命中
7.12.2 查詢緩存如何使用內(nèi)存
7.12.3 什么情況下查詢緩存能發(fā)揮作用
7.12.4 如何配置和維護(hù)查詢緩存
7.12.5 InnoDB 和查詢緩存 .
7.12.6 通用查詢緩存優(yōu)化
7.12.7 查詢緩存的替代方案
7.13 總結(jié)
第8章 優(yōu)化服務(wù)器設(shè)置
8.1 MySQL 配置的工作原理
8.1.1 語(yǔ)法、作用域和動(dòng)態(tài)性
8.1.2 設(shè)置變量的副作用
8.1.3 入門
8.1.4 通過基準(zhǔn)測(cè)試迭代優(yōu)化
8.2 什么不該做
8.3 創(chuàng)建MySQL 配置文件
8.3.1 檢查MySQL 服務(wù)器狀態(tài)變量
8.4 配置內(nèi)存使用
8.4.1 MySQL 可以使用多少內(nèi)存?
8.4.2 每個(gè)連接需要的內(nèi)存 .
8.4.3 為操作系統(tǒng)保留內(nèi)存 .
8.4.4 為緩存分配內(nèi)存
8.4.5 InnoDB 緩沖池(Buffer Pool)
8.4.6 MyISAM 鍵緩存(Key Caches)
8.4.7 線程緩存
8.4.8 表緩存(Table Cache)
8.4.9 InnoDB 數(shù)據(jù)字典(Data Dictionary)
8.5 配置MySQL 的I/O 行為
8.5.1 InnoDB I/O 配置
8.5.2 MyISAM 的I/O 配置 .
8.6 配置MySQL 并發(fā) .
8.6.1 InnoDB 并發(fā)配置
8.6.2 MyISAM 并發(fā)配置
8.7 基于工作負(fù)載的配置
8.7.1 優(yōu)化BLOB 和TEXT 的場(chǎng)景
8.7.2 優(yōu)化排序(Filesorts).
8.8 完成基本配置
8.9 安全和穩(wěn)定的設(shè)置
8.10 高級(jí)InnoDB 設(shè)置
8.11 總結(jié)
第9章 操作系統(tǒng)和硬件優(yōu)化
9.1 什么限制了MySQL 的性能
9.2 如何為MySQL 選擇CPU
9.2.1 哪個(gè)更好:更快的CPU 還是更多的CPU
9.2.2 CPU 架構(gòu)
9.2.3 擴(kuò)展到多個(gè)CPU 和核心
9.3 平衡內(nèi)存和磁盤資源
9.3.1 隨機(jī)I/O 和順序I/O
9.3.2 緩存,讀和寫
9.3.3 工作集是什么
9.3.4 找到有效的內(nèi)存/ 磁盤比例
9.3.5 選擇硬盤
9.4 固態(tài)存儲(chǔ)
9.4.1 閃存概述
9.4.2 閃存技術(shù)
9.4.3 閃存的基準(zhǔn)測(cè)試
9.4.4 固態(tài)硬盤驅(qū)動(dòng)器(SSD)
9.4.5 PCIe 存儲(chǔ)設(shè)備
9.4.6 其他類型的固態(tài)存儲(chǔ) .
9.4.7 什么時(shí)候應(yīng)該使用閃存
9.4.8 使用Flashcache
9.4.9 優(yōu)化固態(tài)存儲(chǔ)上的MySQL
9.5 為備庫(kù)選擇硬件
9.6 RAID 性能優(yōu)化
9.6.1 RAID 的故障轉(zhuǎn)移、恢復(fù)和鏡像
9.6.2 平衡硬件RAID 和軟件RAID
9.6.3 RAID 配置和緩存
9.7 SAN 和NAS
9.7.1 SAN 基準(zhǔn)測(cè)試
9.7.2 使用基于NFS 或SMB 的SAN
9.7.3 MySQL 在SAN 上的性能
9.7.4 應(yīng)該用SAN 嗎
9.8 使用多磁盤卷
9.9 網(wǎng)絡(luò)配置
9.10 選擇操作系統(tǒng)
9.11 選擇文件系統(tǒng)
9.12 選擇磁盤隊(duì)列調(diào)度策略
9.13 線程
9.14 內(nèi)存交換區(qū)
9.15 操作系統(tǒng)狀態(tài)
9.15.1 如何閱讀vmstat 的輸出
9.15.2 如何閱讀iostat 的輸出
9.15.3 其他有用的工具
9.15.4 CPU 密集型的機(jī)器
9.15.5 I/O 密集型的機(jī)器
9.15.6 發(fā)生內(nèi)存交換的機(jī)器
9.15.7 空閑的機(jī)器
9.16 總結(jié)
第10章 復(fù)制
10.1 復(fù)制概述
10.1.1 復(fù)制解決的問題
10.1.2 復(fù)制如何工作
10.2 配置復(fù)制
10.2.1 創(chuàng)建復(fù)制賬號(hào)
10.2.2 配置主庫(kù)和備庫(kù)
10.2.3 啟動(dòng)復(fù)制
10.2.4 從另一個(gè)服務(wù)器開始復(fù)制
10.2.5 推薦的復(fù)制配置
10.3 復(fù)制的原理
10.3.1 基于語(yǔ)句的復(fù)制
10.3.2 基于行的復(fù)制
10.3.3 基于行或基于語(yǔ)句:哪種更優(yōu)
10.3.4 復(fù)制文件
10.3.5 發(fā)送復(fù)制事件到其他備庫(kù)
10.3.6 復(fù)制過濾器
10.4 復(fù)制拓?fù)?br />
10.4.1 一主庫(kù)多備庫(kù)
10.4.2 主動(dòng)- 主動(dòng)模式下的主- 主復(fù)制
10.4.3 主動(dòng)- 被動(dòng)模式下的主- 主復(fù)制
10.4.4 擁有備庫(kù)的主- 主結(jié)構(gòu)
10.4.5 環(huán)形復(fù)制
10.4.6 主庫(kù)、分發(fā)主庫(kù)以及備庫(kù)
10.4.7 樹或金字塔形
10.4.8 定制的復(fù)制方案
10.5 復(fù)制和容量規(guī)劃
10.5.1 為什么復(fù)制無法擴(kuò)展寫操作
10.5.2 備庫(kù)什么時(shí)候開始延遲
10.5.3 規(guī)劃冗余容量
10.6 復(fù)制管理和維護(hù)
10.6.1 監(jiān)控復(fù)制
10.6.2 測(cè)量備庫(kù)延遲
10.6.3 確定主備是否一致
10.6.4 從主庫(kù)重新同步備庫(kù)
10.6.5 改變主庫(kù)
10.6.6 在一個(gè)主- 主配置中交換角色
10.7 復(fù)制的問題和解決方案
10.7.1 數(shù)據(jù)損壞或丟失的錯(cuò)誤
10.7.2 使用非事務(wù)型表
10.7.3 混合事務(wù)型和非事務(wù)型表
10.7.4 不確定語(yǔ)句
10.7.5 主庫(kù)和備庫(kù)使用不同的存儲(chǔ)引擎
10.7.6 備庫(kù)發(fā)生數(shù)據(jù)改變
10.7.7 不唯一的服務(wù)器ID .
10.7.8 未定義的服務(wù)器ID .
10.7.9 對(duì)未復(fù)制數(shù)據(jù)的依賴性
10.7.10 丟失的臨時(shí)表
10.7.11 不復(fù)制所有的更新 .
10.7.12 InnoDB 加鎖讀引起的鎖爭(zhēng)用
10.7.13 在主- 主復(fù)制結(jié)構(gòu)中寫入兩臺(tái)主庫(kù)
10.7.14 過大的復(fù)制延遲
10.7.15 來自主庫(kù)的過大的包
10.7.16 受限制的復(fù)制帶寬 .
10.7.17 磁盤空間不足
10.7.18 復(fù)制的局限性
10.8 復(fù)制有多快
10.9 MySQL 復(fù)制的高級(jí)特性
10.10 其他復(fù)制技術(shù)
10.11 總結(jié)
第11章 可擴(kuò)展的MySQL
11.1 什么是可擴(kuò)展性
11.1.1 正式的可擴(kuò)展性定義
11.2 擴(kuò)展MySQL
11.2.1 規(guī)劃可擴(kuò)展性
11.2.2 為擴(kuò)展贏得時(shí)間
11.2.3 向上擴(kuò)展
11.2.4 向外擴(kuò)展
11.2.5 通過多實(shí)例擴(kuò)展
11.2.6 通過集群擴(kuò)展
11.2.7 向內(nèi)擴(kuò)展
11.3 負(fù)載均衡
11.3.1 直接連接
11.3.2 引入中間件
11.3.3 一主多備間的負(fù)載均衡
11.4 總結(jié)
第12章 高可用性
12.1 什么是高可用性
12.2 導(dǎo)致宕機(jī)的原因
12.3 如何實(shí)現(xiàn)高可用性
12.3.1 提升平均失效時(shí)間(MTBF)
12.3.2 降低平均恢復(fù)時(shí)間(MTTR)
12.4 避免單點(diǎn)失效
12.4.1 共享存儲(chǔ)或磁盤復(fù)制
12.4.2 MySQL 同步復(fù)制
12.4.3 基于復(fù)制的冗余
12.5 故障轉(zhuǎn)移和故障恢復(fù)
12.5.1 提升備庫(kù)或切換角色
12.5.2 虛擬IP 地址或IP 接管
12.5.3 中間件解決方案
12.5.4 在應(yīng)用中處理故障轉(zhuǎn)移
12.6 總結(jié)
第13章 云端的MySQL
13.1 云的優(yōu)點(diǎn)、缺點(diǎn)和相關(guān)誤解
13.2 MySQL 在云端的經(jīng)濟(jì)價(jià)值
13.3 云中的MySQL 的可擴(kuò)展性和高可用性
13.4 四種基礎(chǔ)資源
13.5 MySQL 在云主機(jī)上的性能
13.5.1 在云端的MySQL 基準(zhǔn)測(cè)試
13.6 MySQL 數(shù)據(jù)庫(kù)即服務(wù)(DBaaS)
13.6.1 Amazon RDS
13.6.2 其他DBaaS 解決方案
13.7 總結(jié)
第14章 應(yīng)用層優(yōu)化
14.1 常見問題
14.2 Web 服務(wù)器問題
14.2.1 尋找最優(yōu)并發(fā)度
14.3 緩存
14.3.1 應(yīng)用層以下的緩存
14.3.2 應(yīng)用層緩存
14.3.3 緩存控制策略
14.3.4 緩存對(duì)象分層
14.3.5 預(yù)生成內(nèi)容
14.3.6 作為基礎(chǔ)組件的緩存
14.3.7 使用HandlerSocket 和memcached
14.4 拓展MySQL
14.5 MySQL 的替代品
14.6 總結(jié)
第15章 備份與恢復(fù)
15.1 為什么要備份
15.2 定義恢復(fù)需求
15.3 設(shè)計(jì)MySQL 備份方案
15.3.1 在線備份還是離線備份
15.3.2 邏輯備份還是物理備份
15.3.3 備份什么
15.3.4 存儲(chǔ)引擎和一致性
15.4 管理和備份二進(jìn)制日志
15.4.1 二進(jìn)制日志格式
15.4.2 安全地清除老的二進(jìn)制日志
15.5 備份數(shù)據(jù)
15.5.1 生成邏輯備份
15.5.2 文件系統(tǒng)快照
15.6 從備份中恢復(fù)
15.6.1 恢復(fù)物理備份
15.6.2 還原邏輯備份
15.6.3 基于時(shí)間點(diǎn)的恢復(fù)
15.6.4 更高級(jí)的恢復(fù)技術(shù)
15.6.5 InnoDB 崩潰恢復(fù)
15.7 備份和恢復(fù)工具
15.7.1 MySQL Enterprise Backup
15.7.2 Percona XtraBackup .
15.7.3 mylvmbackup
15.7.4 Zmanda Recovery Manager
15.7.5 mydumper
15.7.6 mysqldump.
15.8 備份腳本化
15.9 總結(jié)
第16章 MySQL 用戶工具
16.1 接口工具
16.2 命令行工具集
16.3 SQL 實(shí)用集
16.4 監(jiān)測(cè)工具
16.4.1 開源的監(jiān)控工具
16.4.2 商業(yè)監(jiān)控系統(tǒng)
16.4.3 Innotop 的命令行監(jiān)控
16.5 總結(jié)
附錄A MySQL 分支與變種
附錄B MySQL 服務(wù)器狀態(tài)
附錄C 大文件傳輸
附錄D EXPLAIN
附錄E 鎖的調(diào)試
附錄F 在MySQL 上使用Sphinx
索引