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