高性能MySQL(第3版)pdf

圖書網
圖書網
圖書網
10905
文章
1658
評論
2019年6月19日12:21:55 6 347
摘要

◎ 學習MySQL新特性,包括存儲引擎、分區數據庫、觸發器和視圖
◎ 實現復制的改進、高可用和集群
◎ 獲得在云端運行MySQL的高性能
◎ 優化高級查詢特性,如全文索引
◎ 從現代的多核CPU和固態硬盤中獲益
◎ 探索備份和恢復的策略,包括新的在線備份工具

高性能MySQL(第3版) 內容簡介

《高性能MySQL(第3版)》是MySQL 領域的經典之作,擁有廣泛的影響力。第3 版更新了大量的內容,不但涵蓋了MySQL5.5版本的新特性,也講述了關于固態盤、高可擴展性設計和云計算環境下的數據庫相關的新內容,原有的基準測試和性能優化部分也做了大量的擴展和補充。全書共分為16章和6 個附錄,內容涵蓋MySQL架構和歷史,基準測試和性能剖析,數據庫軟硬件性能優化,復制、備份和恢復,高可用與高可擴展性,以及云端的MySQL和MySQL相關工具等方面的內容。每一章都是相對獨立的主題,讀者可以有選擇性地單獨閱讀。

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

高性能MySQL(第3版) 目錄

前言

第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

索引

高性能MySQL(第3版) 精彩文摘

第一個趨勢,采用了InnoDB plugin的版本,在高并發的時候性能明顯更好,可以說InnoDB plugin的擴展性更好。這是可以預期的結果,舊的版本在高并發時確實存在問題。第二個趨勢,新的版本在單線程的時候性能比舊版本更差。一開始可能無法理解為什么會這樣,仔細想想就能明白,這是一個非常簡單的只讀測試。新版本的SQL語法更復雜,針對復雜查詢增加了很多特性和改進,這對于簡單查詢可能帶來了更多的開銷。舊版本的代碼簡單,對于簡單的查詢反而會更有利。原計劃做一個更復雜的不同并發條件下的讀寫混合場景的測試(類似TPC—C),但要在不同版本間做到可比較基本是不可能的。一般來說,新版本在復雜場景時性能有更多的優化,尤其是高并發和大數據集的情況下。

那么該如何選擇版本呢?這更多地取決于業務需求而不是技術需求。理想情況下當然是版本越新越好,當然也可以選擇等到第一個bug修復版本以后再采用新的大版本。如果應用還沒有上線,也可以采用即將發布的新版本,以盡可能地延遲應用上線后的升級操作。

1.7 MySQL的開發模式

MySQL的開發過程和發布模型在不同的階段有很大的變化,但目前已經基本穩定下來。在Oracle定期發布的新里程碑開發版本中,會包含即將在下一個GA版本發布的新特性。這樣做是為了測試和獲得反饋,請不要在生產環境使用此版本,雖然Oracle宣稱每個里程碑版本的質量都是可靠的,并隨時可以正式發布(到目前為止也沒有任何理由去推翻這個說法)。Oracle也會定期發布實驗室預覽版,主要包含一些特定的需要評估的特性,這些特性并不保證會在下一個正式版本中包括進去。最終,Oracle會將穩定的特性打包發布一個新的GA版本。

MySQL依然遵循GPL開源協議,全部的源代碼(除了一些商業版本的插件)都會開放給社區。Oracle似乎也理解,為社區和付費用戶提供不同的版本并非明智之舉。MySQLAB曾經嘗試過不同版本的策略,結果導致付費用戶變成了“睜眼瞎”,無法從社區的測試和反饋中獲得好處。不同版本的策略并不受企業用戶的歡迎,所以后來被Sun廢除了。現在Oracle為付費用戶單獨提供了一些服務器插件,而MySQL本身還是遵循開源模式。盡管對于私有的服務器插件的發布有一些抱怨,但這只是少數的聲音,并且慢慢地在平息。

圖書網:高性能MySQL(第3版)pdf

繼續閱讀

說出你想要的,我們幫你找→→→社區

  • 我的微信
  • 掃一掃加好友
  • weinxin
  • 微信公眾號
  • 掃一掃關注
  • weinxin
重新定義Spring Cloud實戰pdf 數據庫

重新定義Spring Cloud實戰pdf

重新定義Spring Cloud實戰 作者:許進,葉志遠,鐘尊發,蔡波斯,方志明,郭芳碧,朱德明 重新定義Spring Cloud實戰 出版社:機械工業出版社 重新定義Spring Cloud實戰 內...
SSM企業級框架實戰pdf 數據庫

SSM企業級框架實戰pdf

SSM企業級框架實戰 作者:肖睿,丁慧潔,張寧彬 SSM企業級框架實戰 出版社:中國水利水電出版社 SSM企業級框架實戰 內容簡介 框架(Framework)的本質為某種應用的半成品,即把不同應用程序...
自己動手做大數據系統pdf 數據庫

自己動手做大數據系統pdf

適讀人群 :?對大數據感興趣的院校師生。?對大數據有一定的基礎,還想進一步熟悉整個生態系統的大數據愛好者。 我們為什么需要自己動手做大數據系統?本書從OpenStack云平臺搭建、...
MySQL王者晉級之路pdf 數據庫

MySQL王者晉級之路pdf

適讀人群 :本書適合熟悉Linux系統且想提升MySQL水平的讀者。 資深數據庫專家十年沉淀 詳細解析MySQL數據庫體系結構 技術問答,助力面試
匿名

發表評論

匿名網友 填寫信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

評論:6   其中:訪客  6   博主  0
    • Z Z 9

      很不錯

      • 一土幺小 一土幺小 9

        學習,加油

        • 古代碼農 古代碼農 9

          贊??

          • lfish lfish 9

            真的好

            • 熊天 熊天 9

              不錯

              • 熊天 熊天 9

                很不錯