前言
和其他數據庫系統相比,MySQL有點與衆不同,它的架構可以在多種不同場景中應用併發揮好的作用,但同時也會帶來一點選擇上的困難。MySQL並不完美,卻足夠靈活,能夠適應高要求的環境,例如Web類應用。同時,MySQL既可以嵌入到應用程序中,也可以支持數據倉庫、內容索引和部署軟件、高可用的冗餘系統、在線事務處理系統(OLTP)等各種應用類型。
成爲一名架構師幾乎是所有程序員的夢想,然而在這大數據時代,少了MySQL數據庫的架構系統,也是不會有前途的~~~
今天, 小編就帶來一篇高性能MySQL的祕籍,希望能幫到大家更好地學習。
全書共分爲16章和6個附錄,內容涵蓋MySQL架構和歷史,基準測試和性能剖析,數據庫軟硬件性能優化,複製、備份和恢復、高可用與高可擴展性,以及雲端的MySQL和MySQL相關工具等方面的內容。
第一部分:概述
第一章:MySQL的架構和歷史
- MySQL邏輯架構
- 併發控制
- 事務
- 多版本併發控制
- MySQL的存儲引擎
- MySQL時間線(Timeline)
- MySQL的開發模式
第1章是非常基礎的一章,在更深入地學習之前建議先熟悉一下這部分內容。在有效地使用MySQL之前應當理解它是如何組織的。本章解釋了 MySQL的架構及其存儲引擎的關鍵設計。如果讀者還不太熟悉關於數據庫和事務的基礎知識,本章也可以帶來一點幫助。如果之前已經對其他關係數據庫如Oracle比較熟悉,本章也可以幫助讀者瞭解MySQL的入門知識。本章還包括了一點MySQL的歷史背景:MySQL ffi着時間的演進、最近的公司所有權更替,以及我們認爲比較重要的內容。
第二部分:打造堅實的基礎
第二章:MySQL基準測試
- 爲什麼需要基準測試
- 基準測試的策略
- 基準測試方法
- 基準測試工具
- 基準測試案例
第2章討論了基準測試的基礎,例如服務器可以處理的工作負載的類型、處理特定任務的速度等。基準測試是一項至關重要的技能,可用手評估服務器在不同負莪下的表現,但也要明白在什麼情況下基準測試不能發揮作用。
第三章:服務器性能剖析
- 性能優化簡介
- 對應用程序進行性能剖析
- 剖析MySQL查詢
- 診斷間歇性問題
- 其他剖析工具
第3章介紹了我們常用於故障診斷和服務器性能問題分析的一種面向響應時間的方法。該方法已經被證明可以解決我們曾碰到過的一些極爲竦手的問題.當然也可以選擇修改我們所使用的方法(實際上我們的方法也是從Cary Millsap的方法修改而來的),但無論如何,至少不能沒有方法胡亂猜測。
第四章:Schema與數據類型優化
- 選擇優化的數據類型
- MySQL schema設計中的陷阱
- 範式和反範式
- 緩存表和彙總表
- 加快ALTER TABLE操作的速度
第4章涵蓋了不同數據類型的細節差別以及表設計的原則。良好的schema設計原則是普遍適用的,但MySQL有它自己的實現細節要注意。概括來說,儘可能保持任何東西小而簡單總是好的。MySQL喜歡簡單,需要使用數據庫的人應該也同樣會喜歡簡單的原則。
第五章:創建高性能的索引
- 索引基礎
- 索引的優點
- 高性能的索引策略
- 索案例學習
- 維護索引和表
第5章則展開討論了索引,這是數據庫的物理設計。對於索引的深入理解和利用是高效使用MySQL的基礎,相信這一章會經常需要回頭翻看。通過本章可以看到,索引是一個非常複雜的話題! MySQL和存儲引擎訪問數據的方式,加上索引的特性,使得索引成爲一個影響數據訪問的有力而靈活的工作(無論數據是在磁盤中還是在內存中)。
第六章:查詢性能優化
- 爲什麼查詢速度會慢
- 慢查詢基礎:優化數據訪問
- 重構查詢的方式
- 查詢執行的基礎
- MySQL查詢優化器的侷限性
- 查詢優化器的提示(hint)
- 優化特定類型的查詢
- 案例學習
第6章則包含了分析MySQL的查詢是如何執行的,以及如何利用查詢優化器的話題。該章也包含了大量常見類型查詢的例子,演示了MySQL是如何做好工作的,以及如何改寫查詢以利用MySQL的特性。
第七章:MySQL高級特性
- 分區表
- 視圖
- 外鍵約束
- 在MySQL內部存儲代碼
- 遊標
- 綁定變量
- 用戶自定義函數
- 插件
- 字符集和校對
- 全文素引
- 分佈式(XA)事務
- 查詢緩存
第7章則在MySQL基礎知識之外介紹了MySQL的高級特性是如何工作的。這章的內容包括分區、存儲引擎、觸發器,以及字符集。MySQL中這些特性的實現可能不同於其他數據庫,可能之前讀者並不清楚這些不同,因此理解它們對於性能可能會帶來新的收益。
第三部分:配置應用程序
第八章:優化服務器設置
- MySQL配置的工作原理
- 什麼不該做
- 創建MySQL配置文件
- 配置內存使用
- 配置MySQL的I/O行爲
- 配置MySQL併發
- 基於工作負載的配置
- 完成基本配置
- 安全和穩定的設置
- 高級InnoDB設置
第8章介紹瞭如何配置MySQL,以便更好地利用硬件,達到更好的可靠性和魯棒性。在閱讀完這一章節之後,你應該有了一個比默認設置好得多的服務器配置。服務器應該更快更穩定了,並且除非運行出現了罕見的狀況,都應該沒有必要再去做優化配置的工作了。
第九章:操作系統和硬件優化
- 什麼限制了MySQL的性能
- 如何爲MySQL選擇CPU
- 平衡內存和磁盤資源
- 固態存儲
- 爲備庫選擇硬件
- RAID性能優化
- SAN和NAS
- 使用多磁盤卷
- 網絡配置
- 選擇操作系統
- 選擇文件系統
- 選擇磁盤隊列調度策略
- 線程
- 內存交換區
- 操作系統狀態
第9章解釋瞭如何讓操作系統和硬件工作得更好。另外也深入討論了固態硬盤,爲高可擴展性應用發揮更好的性能提供了硬件配置的建議。爲MySQL選擇和配置硬件,以及根據硬件配置MySQL,並不是什麼神祕的藝術。通常,對於大部分目標需要的都是相同的技巧和知識。當然,也需要知道一些MySQL特有的特點。
第四部分:作爲基礎設施組件的MySQL
第十章:複製
- 複製概述
- 配置複製
- 複製的原理
- 複製拓撲
- 複製和容量規劃
- 複製管理和維護
- 複製的問題和解決方案
- 複製有多快
- MySQL複製的高級特性
- 其他複製技術
第10章討論了MySQL的殺手級特性:能夠設置多個服務器從一臺主服務器同步數據。不幸的是,複製可能也是MySQL給很多用戶帶來困擾的一個特性。但實際上不應該發生這樣的情況,本章將告訴你如何讓複製運行得更好。
第十一章:可擴展的MySQL
- 什麼是可擴展性
- 擴展MySQL
- 負裁均衡
第11章討論了什麼是可擴展性(這和性能不是一回事),應用和系統爲什麼會無法擴展,該怎麼改善擴展性。如果能夠正確地處理,MySQL的可擴展性是足以應付任何需求的。
第十二章:高可用性
- 什麼是高可用性
- 導致宕機的原因
- 如何實現高可用性
- 避免單點失效
- 故障轉移和故障恢復
第12章講述的是和可擴展性相關但又完全不同的主題:如何保障MySQL穩定而正確地持續運行。可以通過減少宕機來獲得高可用性,這需要從以下兩個方面來思考:增加兩次故障之間的正常運行時間(MTBF), 或者減少從故障中恢復的時間(MTTR)。
第十三章:雲端的MySQL
- 雲的優點、缺點和相關誤解
- MySQL在雲端的經濟價值
- 雲中的MySQL的可擴展性和高可用性
- 四種基礎資源
- MySQL在雲主機上的性能
- MySQL數據庫即服務(DBaaS)
第13章將告訴你當MySQL在雲計算環境中運行時會有什麼不同的事情發生。在雲端使用MySQL至少有兩種主流的方法:在雲服務器上安裝MySQL,或者使用DBaaS服務。MySQL能夠在雲主機.上運行得很好,但云環境中的限制常常會導致更早需要進行數據拆分。並且儘管雲服務器看起來和你的物理硬件很相似,但可能性能和服務質量要更低。
第十四章:應用層優化
- 常見問題
- Web服務器問題
- 緩存
- 拓展MySQL
- MySQL的替代品
第14章解釋了什麼是全方位的優化(ul-stack optimization),就是從前端到後端的整體優化,從用戶體驗開始直到數據庫。即使是世界上設計最好、最具可擴展性的架構,如果停電會導致徹底崩潰,無法抵禦惡意攻擊,解決不了應用的bug和程序員的錯誤,以及其他一些災難場景,那就不是什麼好的架構。
第十五章:備份與恢復
- 爲什麼要備份
- 定義恢復需求
- 設計MySQL備份方案
- 管理和備份二進制日誌
- 備份數據
- 從備份中恢復
- 備份和恢復工具
- 備份腳本化
第15章討論了MySQL數據庫各種備份與恢復的場景。這些策略可以幫助讀者減少在各種不可抗的硬件失效時的宕機時間,保證在各種災難下的數據最終可恢復。
第十六章:MySQL用戶工具
- 接口工具
- 命令行工具集
- SQL實用集
- 監測工具
第16章探索了一些可以幫助用戶更有效地管理和監控MySQL服務器的工具,有些是開源的,也有些是商業的。好的工具對管理MySQL至關重要。推薦使用一些已經可用、廣泛測試過、流行的工具。
書籤介紹
後記
最後,希望關於MySQL內部原理的知識能夠幫助大家解決本篇沒有覆蓋到的一些情況。更希望朋友們能培養髮現新問題的洞察力,能學習和實踐合理的方式來設計、維護和診斷基於MySQL的系統。
想要獲取文中PDF文檔的朋友,請關注小編,並私信回覆【學習】即可得到免費領取方式哦~~~
感覺小編整理得不錯的話,請多多點贊評論分享,你們的支持就是小編最大的動力!!!