本書一共分為3篇:基礎篇(上)、案例篇和工具篇(下)。
基礎篇:
從理論基礎和基本原理層面介紹了 MySQL 的安裝與設定、升級和架構,information_schema、sys_schema、performance_schema 和 mysql_schema,MySQL複製、MySQL 交易、SQL 語句最佳化及架構設計基礎知識。
案例篇:
從硬體和系統、MySQL 架構等方面提出了效能最佳化的十幾個案例,包括:效能測試的基本最佳化概念和最需要關注的效能指標解釋、對 SQL 語句執行慢的基本定位、避免 x86 可用性的一般性方法、節能模式會怎樣影響效能、I/O 儲存作為資料庫最重要的依賴是如何影響資料庫效能的、主備複製不一致可能有哪些原因、字元集不一致會造成哪些效能問題、在實際場景中鎖的爭用是怎樣的。
工具篇:
介紹了在 MySQL 效能最佳化過程中需要用到的各種工具,包括:dmidecode、top、dstat 等硬體和系統排查工具;FIO、sysbench、HammerDB 等壓力測試工具;mysqldump、XtraBackup 等備份工具;Percona、innotop、Prometheus 等監控工具。
--------------------------------------------------------------------------------
效能問題:
本書解決 MySQL 資料庫效能問題,某種程度來說,MySQL 資料庫效能最佳化問題是一個平行處理的問題,歸根究柢是鎖和資源爭用的問題。
其實效能最佳化要做的就是下列事情:
•瞭解基本原理。找到事情的因果關係和依賴關係,儘量讓不相關的事情能平行進行。
•要事第一。找到目前最重要、最需要最佳化的地方,投入時間和精力,不斷去改進與最佳化。
•切中要害。找到耗費時間最長的地方,想盡辦法縮短其時間。
機械思維和大數據思維:
本書的效能最佳化方法論還是工業革命時代的機械思維,簡而言之,就是尋找因果關係,大膽假設,小心求證。現在已經是資訊時代,理應瞭解什麼是資訊理論,解決問題需要利用大數據思維!
讀者對象:
(1)MySQL 初學者。
(2)專門從事 MySQL 工作1~3年的開發人員和運維人員。
(3)資深的 MySQL DBA。
作者
李春
原阿里巴巴 MySQL DBA 團隊技術 Leader,全程參與阿里資料庫架構從 Oracle 遷移到 MySQL 的過程,參與分散式中介軟體 Cobar 設計。現為沃趣科技聯合創始人&首席架構師,負責 MySQL、基礎軟體及部分關鍵組件的技術選型、風險評估等。
羅小波
沃趣科技高級資料庫工程師,主要負責 MySQL 產品的資料庫支撐與售後二線支撐。曾參與版本發布系統、輕量級監控系統、運維管理平台、資料庫管理平台的設計與編寫,熟悉 MySQL 體系結構,Innodb 存儲引擎,喜好專研開源技術,多次在公開場合做過線下線上資料庫專題分享,發表過多篇與資料庫相關的研究文章。
董紅禹
沃趣科技 MySQL DBA,為多家大型企業進行過故障解決、架構設計、效能最佳化,例如中信證券、浙江農信、陝西農信、郵儲銀行等。規劃並實施了浙江農信互聯網核心金融平台。
序/導讀
目錄
案例篇
第 23 章 效能測試指標和相關術語
23.1 測試目標分類
23.1.1 已知故障資訊採集
23.1.2 預估壓力評測
23.2 效能測試指標
23.2.1 資料庫效能通用「行話」
23.2.2 測試通用術語
23.2.3 範例
23.3 本章小結
第 24 章 歷史問題診斷和現場故障分析
24.1 故障分析和驗證
24.1.1 歷史問題排查
24.1.2 線上問題分析
24.2 故障複現排查
24.3 本章小結
第 25 章 效能調校金字塔
25.1 硬體和系統調校
25.1.1 硬體最佳化
25.1.2 系統最佳化
25.2 MySQL 調校
25.2.1 參數調校
25.2.2 SQL/索引調校
25.3 架構調校
25.4 本章小結
第 26 章 SQL 語句執行慢真假難辨
26.1 概述
26.2 測試環境
26.3 採集封包
26.3.1 採集應用程式伺服器封包
26.3.2 採集資料庫伺服器封包
26.4 解析封包
26.4.1 使用 wireshark 解析封包
26.4.2 使用 tcpdump 解析封包
26.5 本章小結
第 27 章 如何避免三天兩頭更換硬碟、記憶體、主機板
27.1 概述
27.2 伺服器標準化
27.3 上線前燒機
27.3.1 stress
27.3.2 FIO
27.3.3 資料庫燒機
27.4 本章小結
第 28 章 每隔 45 天的 MySQL 效能低谷
28.1 儲存知識小普及
28.1.1 MySQL 儲存系統要求
28.1.2 儲存系統軟體層
28.1.3 儲存系統硬體層
28.2 每隔 45 天的效能抖動
28.3 影響 I/O 效能的三種 RAID 策略
28.3.1 電池充放電
28.3.2 巡讀
28.3.3 一致性檢查
28.4 本章小結
第 29 章 無法自動釋放 MySQL 連接
29.1 環境組態
29.2 問題現象
29.3 診斷分析
29.4 解決方案
29.5 本章小結
第 30 章 查詢 MySQL 偶爾比較慢
30.1 環境組態
30.2 問題現象
30.3 診斷分析
30.4 選擇 VIP 還是 DNS 存取 MySQL
30.4.1 VIP 之殤
30.4.2 DNS 之痛
30.4.3 VIP 切換還是 DNS 切換
30.5 CPU 節能模式
30.6 本章小結
第 31 章 MySQL 最多只允許 214 個連接
31.1 環境組態
31.2 問題現象
31.3 診斷分析
31.4 解決方案
31.5 MySQL 最大連接數為 214 的原始碼解析
31.6 Linux 資源限制
31.6.1 資源拆分和組合
31.6.2 處理程序資源限制
31.6.3 MySQL 內部資源限制
31.7 本章小結
第 32 章 MySQL 掛起診斷概念
32.1 環境組態
32.2 問題現象
32.3 診斷分析
32.4 掛起時先做什麼
32.5 本章小結
第 33 章 硬體和系統調校
33.1 硬體和系統調校概覽
33.2 CPU
33.3 網路
33.4 其他
33.5 本章小結
第 34 章 並行刪除資料造成鎖死
34.1 問題現象
34.2 如何閱讀鎖死日誌
34.3 資料表結構及操作步驟
34.4 本章小結
第 35 章 刪除不存在的資料造成的鎖死
35.1 問題現象
35.2 問題分析
35.3 問題擴展
35.4 資料表結構及操作步驟
35.5 本章小結
第 36 章 插入意向鎖鎖死
36.1 問題現象
36.2 問題分析
36.3 本章小結
第 37 章 分頁查詢最佳化
37.1 問題現象
37.2 最佳化方案
第 38 章 子查詢最佳化——子查詢轉換為連接
38.1 問題現象
38.2 最佳化方案
第 39 章 子查詢最佳化——使用 delete 刪除資料
39.1 問題現象
39.2 最佳化方案
工具篇
第 40 章 常用的硬體規格查看命令詳解
40.1 通用命令
40.1.1 lshw
40.1.2 dmidecode
40.1.3 dmesg
40.2 CPU 相關命令
40.3 磁碟相關命令
40.3.1 smartctl
40.3.2 lsscsi
40.4 網卡相關命令
40.4.1 lspci
40.4.2 ethtool
40.5 HCA 卡相關命令
第 41 章 常用的系統負載查看命令詳解
41.1 top
41.1.1 命令列選項
41.1.2 互動式命令選項
41.1.3 輸出結果解讀
41.2 dstat
41.2.1 命令列選項
41.2.2 輸出結果解讀
41.3 mpstat
41.3.1 命令列選項
41.3.2 輸出結果解讀
41.4 sar
41.4.1 命令列選項
41.4.2 輸出結果解讀
41.5 vmstat
41.5.1 命令列選項
41.5.2 輸出結果解讀
41.6 iostat
41.6.1 命令列選項
41.6.2 輸出結果解釋
41.7 free
41.7.1 命令列選項
41.7.2 輸出結果解讀
41.8 iotop
41.8.1 命令列選項
41.8.2 互動式命令選項
41.8.3 輸出結果解讀
41.9 iftop
41.9.1 命令列選項
41.9.2 互動式命令選項
41.9.3 輸出結果解讀
41.10 iperf
41.10.1 命令列選項
41.10.2 輸出結果解讀
第 42 章 FIO 儲存效能壓測
42.1 安裝 FIO
42.2 測試I/O 效能
42.2.1 隨機寫
42.2.2 循序寫
42.2.3 隨機讀
42.2.4 循序讀
42.2.5 混合隨機讀寫
42.2.6 FIO 設定檔測試
42.3 參數和結果詳解
42.3.1 關鍵參數解釋
42.3.2 設定檔
42.3.3 結果解析
42.4 FIO 測試建議
42.5 課外閱讀
第 43 章 HammerDB 線上交易處理測試
43.1 安裝和配置 HammerDB
43.1.1 下載安裝檔
43.1.2 安裝 HammerDB
43.1.3 安裝 HammerDB GUI 依賴套件
43.2 測試
43.3 課外閱讀
第 44 章 sysbench 資料庫壓測工具
44.1 安裝 sysbench
44.1.1 yum 安裝
44.1.2 RPM 套件安裝
44.1.3 編譯安裝
44.1.4 驗證安裝是否成功
44.2 測試案例
44.2.1 造數
44.2.2 資料庫讀寫測試
44.2.3 清理
44.3 sysbench 參數詳解
44.3.1 sysbench 命令語法
44.3.2 options
44.3.3 testname
44.3.4 command
44.4 資料庫測試輸出資訊詳解
44.4.1 輸出結果概述
44.4.2 版本及關鍵測試參數輸出
44.4.3 中間統計結果輸出
44.4.4 整體統計結果輸出
44.5 課外閱讀
第 45 章 mysqladmin 和 inno工具詳解
45.1 mysqladmin
45.1.1 命令列選項
45.1.2 實戰示範
45.2 innotop
45.2.1 安裝 innotop
45.2.2 命令列選項
45.2.3 互動式選項
45.2.4 實戰示範
第 46 章 利用 Prometheus + Grafana 建置炫酷的 MySQL 監控平台
46.1 安裝 Prometheus
46.1.1 下載套裝檔
46.1.2 解壓縮套裝檔
46.1.3 啟動 Prometheus
46.2 安裝 Grafana
46.2.1 下載套裝檔
46.2.2 解壓縮套裝檔
46.2.3 啟動 Grafana
46.2.4 在 Grafana 匯入 grafana-dashboards
46.3 監控節點部署
46.3.1 增加主機監控
46.3.2 增加 MySQL 監控
46.3.3 監控 Dashboard 切換
第 47 章 Percona Toolkit 常用工具詳解
47.1 pt-query-digest
47.1.1 命令列選項
47.1.2 實戰展示
47.2 pt-ioprofile
47.2.1 命令列選項
47.2.2 實戰展示
47.3 pt-index-usage
47.3.1 命令列選項
47.3.2 實戰展示
47.4 pt-duplicate-key-checker
47.4.1 命令列選項
47.4.2 實戰展示
47.5 pt-mysql-summary/pt-summary
47.5.1 pt-mysql-summary
47.5.2 pt-summary
47.6 pt-pmp
47.6.1 命令列選項
47.6.2 實戰展示
47.7 pt-stalk
47.7.1 命令列選項
47.7.2 實戰展示
47.8 pt-sift
47.8.1 命令列選項
47.8.2 實戰展示
第 48 章 MySQL 主流備份工具 mysqldump 詳解
48.1 簡介
48.2 原理
48.3 命令列選項
48.3.1 連接選項
48.3.2 檔案選項
48.3.3 DDL 選項
48.3.4 偵錯選項
48.3.5 說明選項
48.3.6 國際化選項——與字元集相關的選項
48.3.7 複製選項
48.3.8 輸出格式化選項
48.3.9 過濾選項
48.3.10 效能選項
48.3.11 交易選項
48.3.12 組合選項
48.4 實戰展示
48.4.1 完全備份與復原
48.4.2 增量備份與復原
48.4.3 建置主備複製架構
48.4.4 複製備援資料庫
48.4.5 指定資料庫、資料表備份與復原
48.4.6 純文字備份與復原
第 49 章 MySQL 主流備份工具 XtraBackup 詳解
49.1 簡介
49.2 原理
49.3 命令列選項
49.4 實戰展示
49.4.1 完全備份與恢復
49.4.2 增量備份與恢復
49.4.3 基於時間點的恢復
49.4.4 建置主備複製架構
49.4.5 複製備援資料庫
第 50 章 MySQL 主流備份工具 mydumper 詳解
50.1 簡介
50.2 原理
50.3 命令列選項
50.3.1 mydumper
50.3.2 myloader
50.4 實戰展示
50.4.1 安裝 mydumper
50.4.2 備份與恢復
第 51 章 MySQL 主流閃回工具詳解
51.1 閃回工具介紹
51.2 binlog2sql
51.2.1 安裝和使用要求
51.2.2 命令列選項
51.2.3 實戰展示
51.2.4 使用限制與注意事項
51.3 MyFlash
51.3.1 安裝 MyFlash
51.3.2 命令列選項
51.3.3 實戰展示