-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

千金良方——MySQL性能優化金字塔法則

( 簡體 字)
作者:李春,羅小波,董紅禹類別:1. -> 資料庫 -> MySQL
譯者:
出版社:電子工業出版社千金良方——MySQL性能優化金字塔法則 3dWoo書號: 51974
詢問書籍請說出此書號!

缺書
NT售價: 645

出版日:10/1/2019
頁數:728
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121375200
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

性能問題
這個世界是由問題組成的,理想的狀態和實際狀態之間的差異造成了問題。國家領導解決人民生活幸福的大問題,公司的總經理解決盈利的問題,而本書只想解決MySQL數據庫性能這么一個“小問題”。
從某種程度來說,MySQL數據庫性能優化的問題是一個并行的問題,歸根結底是鎖和資源爭用的問題。舉個例子:假設你要開一個餐飲店,你需要取好店名,到工商局領取開業登記注冊證書,到衛生防疫站申請衛生許可,到物價局進行物價審核,如果要賣酒,則需要到工商部門辦理酒類經營許可證,到稅務局辦理稅務登記,到銀行開戶,還需要找廚師、找洗碗工、找采購人員、找門面、協調店面轉讓、進行店面裝修、做廣告牌,等等。
如果想盡快把餐飲店開起來,就需要同時做更多的事情,就像計算機一樣,并行地去做更多的事情。但是當你真正去做這些事情的時候,會發現:
? 總有一兩件事情耗費的時間特別長,會最大程度地影響餐飲店什么時候能開起來。比如找到合適的店面或者合適的廚師。
? 有些事情是相互依賴的,一件事情必須依賴于另一件事情的完成。比如工商登記就取決于你要準備好店名,店面裝修依賴于門面已經租好了,等等。
? 有些事情特別重要,它決定了這個餐飲店是否能長期經營下去。例如廚師做的菜是否足夠好、足夠快,運營的成本是否足夠低而能產生足夠的利潤支撐餐飲店繼續運營。
其實性能優化要做的就是以下事情:
? 了解基本原理。找到事情的因果關系和依賴關系,讓盡量不相關的事情能并行做起來。
? 要事第一。找到當前最重要、最需要優化的地方,投入時間和精力,不斷去改進它、優化它。
? 切中要害。找到耗費時間最長的地方,想方設法縮短它的時間。
本書的作者嘗試通過上述方法論來找到MySQL性能優化的辦法并呈現給讀者。
數據庫的性能提升
從計算機出現的第一天起,性能作為鞭策者就不斷地促進計算機及系統的演進。從最開始的人工輸入命令等待計算機執行,到利用批處理任務提升利用率,再到通過多進程和多線程并發來進一步提升效率,性能其實一直是計算機工程師想要努力去解決和改善的重要難題。
上面說的都是對已有系統的性能優化,數據庫的性能優化其實可以在做設計之前就開始。
數據庫的性能優化首先是計算機系統的優化。數據庫程序是運行在計算機系統上的應用程序,需要先優化的就是計算機系統。也就是說,讓硬件盡量均衡,操作系統充分發揮硬件的全部性能,而數據庫充分利用操作系統和文件系統提供的便利發揮全部性能,而且避免資源的相互競爭。
數據庫的性能優化其次是SQL語句的優化。上層應用都通過SQL語句與數據庫打交道,一條SQL語句為了獲取數據可以有幾十甚至上百種執行計劃,數據庫會通過優化器選擇更優的SQL執行計劃,但是MySQL在執行計劃上遠遠落后于商業數據庫,甚至在一些方面相比PostgreSQL也差很多,那么怎么寫出正確的SQL語句,避免MySQL選擇錯誤的執行計劃,以及怎樣通過增加索引、設置參數讓MySQL的執行計劃更優,這就是優化SQL語句需要關心的事情。
最后,數據庫的性能優化最有效的是架構的優化。對于讀多寫少的應用程序,可以設計為讀寫分離,把允許延遲的讀請求主動分發到備庫;對于秒殺型的業務,可以先在內存型key-value存儲系統篩選再發往數據庫持久化,避免對數據庫的沖擊;對于匯總、聚合類的應用,可以采用列式存儲引擎或者專門的大數據平臺;對于監控類的應用,可以采用時序數據庫,等等。
以上三種優化思路貫穿本書,這也是本書名為《千金良方:MySQL性能優化金字塔法則》的緣由。
機械思維和大數據思維
看過吳軍博士《智能時代:大數據與智能革命重新定義未來》的人可能會對本書嗤之以鼻,本書的性能優化方法論還是工業革命時代的機械思維,簡而言之,就是尋找因果關系,大膽假設,小心求證。“現在都是信息時代了,了解過信息論沒有?知道香農第一定律和第二定律嗎?解決問題需要用大數據思維!”
筆者有兩點理由使用機械思維來介紹數據庫性能優化:
(1)大數據時代需要的數據量大、多緯度和完備性,目前對數據庫的性能優化和性能診斷,筆者掌握的案例和相關信息遠遠達不到大數據的要求。我們可以期待亞馬遜、阿里云或者騰訊云等廠商或者專業的數據庫公司(如Oracle、MariaDB等)來有針對性地做一些大數據數據庫性能優化的嘗試。
(2)大數據的成本很高。目前我們遇到的大部分性能問題其實用因果關系和假設→推導→再假設→再推導的方法就可以解決,不需要用到大數據、人工智能這樣的“大殺器”。
內容介紹
MySQL的火熱程度有目共睹,如果需要了解MySQL的安裝、啟動、配置等基礎知識,市面上相關的書籍已是汗牛充棟。本書則盡量深入細致地介紹MySQL的基本原理,以及性能優化的實際案例。
基本原理很枯燥,就像課堂上老師介紹數學定理和公式推導一樣,有人可能會質疑,小學都在進行素質教育了,你這本書里怎么還有那么多基本原理的介紹?對于工作了兩三年的技術人員來說,在實踐上已經有了比較多的積累,解決過很多問題——可能通過sys schema查詢事務鎖等待解決了系統的并發問題,通過設置ulimit -n 擴大進程文件句柄數解決了MySQL的進程限制問題,通過設計讀寫分離架構擴展了應用的讀性能線性擴展問題。但是作為求知欲強的技術人員,我們急切地希望知其所以然,了解MySQL到底是怎么設計的,以及為什么這樣設計,sys schema到底還有哪些可以幫助我們分析解決問題的存儲過程,Linux系統的資源限制除了ulimit還有哪些,讀寫分離架構適應的場景有哪些,什么時候建議用分庫分表,等等。如果你也跟我們一樣,你應該閱讀本書。
本書一共分為3篇:基礎篇、案例篇和工具篇。
信息論認為消除一件事情的不確定性就是獲取足夠多的信息。我們認為任何優化都可以從了解它的基本原理和設計思路開始。“基礎篇”從理論基礎和基本原理層面介紹了MySQL的安裝與配置、升級和體系結構,information_schema、sys_schema、performance_schema和mysql_schema,MySQL復制,MySQL事務,SQL語句優化及架構設計基礎知識。希望讀者通過對這些內容的學習,能夠深入細致地了解MySQL各方面的基礎知識。
計算機是一種實驗的科學,性能優化是實戰的藝術。“案例篇”從硬件和系統、MySQL架構等方面給出了性能優化的十幾個案例,包括:性能測試的基本優化思路和最需要關注的性能指標解釋、對日常SQL語句執行慢的基本定位、避免x86可用性的一般性方法、節能模式會怎樣影響性能、I/O存儲作為數據庫最重要的依賴是如何影響數據庫性能的、主備復制不一致可能有哪些原因、字符集不一致會造成哪些性能問題、在實際場景中鎖的爭用是怎樣的。希望讀者通過這些案例,可以深入細致地理解“基礎篇”中的各種概念,融會貫通,對MySQL有一個全面的、系統的掌握。
“工欲善其事,必先利其器。”我們日常需要借助一些工具來做性能優化。“工具篇”介紹了在MySQL性能優化過程中需要用到的各種工具,包括:dmidecode、top、dstat等硬件和系統排查工具;FIO、sysbench、HammerDB等壓力測試工具;mysqldump、XtraBackup等備份工具;Percona、innotop、Prometheus等監控工具。希望讀者可以借助更多自動化的方式去驗證和評估性能優化解決方案,提升性能。
讀者對象
(1)MySQL初學者。建議按照順序從本書的“基礎篇”開始閱讀。“基礎篇”介紹了從安裝部署、基礎配置到性能診斷等日常工作需要了解的內容。在熟悉了MySQL的基本概念和大致原理以后,在閱讀“案例篇”時,對問題的定義和解決方案才能理解得更加透徹。最后在閱讀“工具篇”時,也可以學習到MySQL DBA日常工作所需要工具的使用方法和應用場景。
(2)專門從事MySQL工作1~3年的開發人員和運維人員。對于有一些MySQL開發和運維經驗的人員,建議先跳過“基礎篇”,直接從“案例篇”開始閱讀。在“案例篇”中了解了具體的問題現象、故障處理的過程和方法以后,聯系案例中對應的“基礎篇”和“工具篇”知識進行閱讀,這樣能幫助你把很多知識點串聯起來,由點到面形成更為全面的MySQL知識體系。
(3)資深的MySQL DBA。本書可以作為案頭書,在解決問題時,如果記不清某些概念或者細節比較模糊,則可以拿來參考。
致謝
首先,感謝我的叔叔李巍,從一個貧家子弟到自己創業成立公司,到成為上市公司CEO,再到成立基金公司,他讓我看到一個人的能力可以改變環境,讓更多的人發揮自己的價值,也是他的經歷激勵著我繼續努力。
其次,感謝阿里巴巴平臺,在實際的工作中,這些之前一起奮斗過和現在正在一起奮斗的戰友都給了我極大的幫助,他們是簡朝陽、彭立勛、胡中泉、陳良允、陳棟、張瑞、熊中哲、何登成、梅慶、童家旺、李建輝、羅春、勝通、天羽、蘇普等(排名不分先后)。
再次,感謝沃趣科技技術中心的負責人魏興華,因為他的鼓勵才有了這本書,感謝產品團隊的負責人張文件、MySQL團隊的同事劉云和沈剛幫助校稿,感謝市場部的同事楊雄飛、錢怡晨協調出版相關事宜。還要感謝其他在沃趣團隊工作中一起成長的同學們,人數太多,這里就不一一提及了。
最后,感謝電子工業出版社的符隆美編輯大力配合我們推動圖書的出版事宜。
本書作者
本書由李春、羅小波、董紅禹共同編寫,其中,李春負責編寫第23~33章、第42~44章,羅小波負責編寫第1~18章、第40~41章、第45~51章,董紅禹負責編寫第19~22章、第34~39章。
編者
推薦序1
本書作者李春是阿里巴巴較為早期的DBA之一,羅小波和董紅禹則都是知數堂的優秀校友。有一次我偶然知道了羅小波的經歷,非常令人贊嘆,這么努力的人理應獲得如此成就。
第一次注意到羅小波是因為他的投稿文章“MySQL排序內部原理探秘”,該文章真的是從頭到尾、從上到下全方位解讀了MySQL內部排序的方方面面。再后來,又關注到羅小波推出PFS和sys schema系列連載文章,更是對其靜心深入學習的能力表示欽佩,整個系列文章翔實、細致、到位。另外,董紅禹的功底也非常深厚,他對除MySQL外的其他數據庫也有較多了解。二位同學曾多次被知數堂邀請做公開課分享。
除此之外,我曾感嘆沃趣培養出了不少好工程師,其人才體系肯定有很多可學之處,于是也邀請了李春來知數堂做公開課分享,就是希望能把他們的人才培養機制分享給業界。
拿到本書書稿,我快速瀏覽了“案例篇”的全部內容,發現幾乎都是精華,里面涉及了相當多的經典案例解析,如果能從這些案例中吸收解決問題的思路,那么相信讀者以后若遇到其他問題,基本上都可以解決。
本書既有涉及體系結構、PFS、I_S、統計信息、復制、鎖、InnoDB等基礎知識的鋪墊(其實并不基礎),又有眾多案例詳解,內容豐富、翔實,是難得一見的MySQL性能優化參考書,建議每位DBA以及從事MySQL相關應用開發的讀者都讀一讀。
最后,說一個段子。我曾經開玩笑地說,大家以后要買書的話,記得先看有沒有我給寫的推薦序,如果有的話,那就放心買,如果沒有的話,那就要謹慎點了。本書我是推薦的,所以大家可以放心大膽買。嘿嘿。

葉金榮




推薦序2
小學課本告訴我們,蒸汽機是瓦特看到水壺被水蒸氣頂起來以后冥思苦想發明出來的。但實際情況其實是,17世紀末期,托馬斯?紐克曼(Thomas Newcomen)發明了體積龐大的“蒸汽機”,利用蒸汽的力量把煤礦里的水抽出來,避免了礦井透水、積水的問題。1765年,詹姆士?瓦特(James Watt)發明了分離式冷凝器,改進了紐克曼蒸汽機,使得蒸汽機的效率提升了4倍。當然,紐克曼蒸汽機也不是憑空出現的,紐克曼蒸汽機是基于Thomas Savery發明的Savery蒸汽泵的,繼續往前追溯,可以追溯到公元1世紀古希臘力學家希羅(Heron of Alexandria)發明的汽轉球。
我并不否認瓦特的貢獻,正是有了他對蒸汽機做功效率的改變,才提升了煤炭、鋼鐵的產量,促進了輪船、火車的產生,才有了工業革命。我這里想說的是人們很早就發現了蒸汽做功的理論,但是把它利用起來,把它真正用于我們的生產生活中來提高生產效率的過程是曲折而漫長的,理論和原理的發明是耀眼的明星,工程化實踐和持續不斷的改進卻像星光傳到我們的眼睛一樣,需要經過漫長的過程,凝聚著很多“無名”科學家和工程師的努力與心血。
MySQL之父Monty(Michael Widenius)在1981年寫了MySQL的第一行代碼以后,在開源的幫助下MySQL成長為目前最流行的開源數據庫,同樣其也凝聚了非常多的開發者、DBA、工程師的心血。2009年,在MySQL被Oracle收購以后,47歲的Monty開發了MariaDB分支,到現在MariaDB也已經10年了,他仍然親自參與寫代碼,并且負責大部分代碼的Review工作,我作為MariaDB基金會的中國成員在跟Monty一起Review代碼時,經常會嘆服老爺子對全局的把控能力和對細節的嚴謹態度。2016年當Monty在阿里巴巴交流分享時,我問Monty:“你怎么看阿里巴巴在MySQL方面的能力以及貢獻?”他說:“你貢獻的多源復制和閃回功能,對MariaDB很有用,因此我覺得你和你的團隊是很有能力的,也希望能獲得更多的來自各大廠商和社區的貢獻。”
MySQL之所以能成為現在最流行的開源數據庫,它跟它的開放性、包容性是分不開的。它的入門門檻低到用一條命令就能把MySQL安裝起來,你能在程序開發的入門資料中很容易就找到MySQL的配套使用教程,你可以不用付任何費用就能在自己的環境中部署起來對外承載業務。我之前提交的代碼補足了MySQL在某些方面的功能,是對它的貢獻;蘇普驗證測試時發現MySQL 5.6的半同步Bug匯報給社區,是對它的貢獻;李春他們撰寫MySQL書籍,也是對它的貢獻。我和阿里巴巴的其他同事翻譯《高性能MySQL》時就體會到了出版一本書的艱辛,所以看到《千金良方:MySQL性能優化金字塔法則》這本沉甸甸的書時,完全能感受到三位作者在寫書時的痛苦與艱辛。
MySQL從5.5版本開始引入performance_schema,從5.6版本開始把默認值設置為on,我個人認為從5.7版本(對應MariaDB 10.1)開始它才真正成熟起來。從某種程度上說,performance_schema的引入對MySQL來說可以類比于瓦特發明分離式冷凝器改進蒸汽機,使得開發人員或者DBA對MySQL的性能損耗能準確定位到源碼層級,對MySQL的管控也可以更加精細化。這本書是我了解到的第一本體系化介紹performance_schema的書,對MySQL性能優化有興趣的讀者可以參閱。
另外,本書“案例篇”也是我見過的相對比較系統化介紹性能優化方面的內容,從服務器、操作系統、MySQL、SQL和鎖方面整體梳理了MySQL性能優化的方方面面,相關案例都具有代表性,很值得參考和驗證,也希望讀者能參考案例來驗證和測試,并舉一反三,結合自己環境的實際場景構建起性能改進的方法論。
蒸汽機的改進不是一蹴而就的,性能的改進也是貫穿整個MySQL發展史的,就像瓦特改進蒸汽機引發了工業革命一樣,我希望本書的出版能進一步促進大家對MySQL/MariaDB性能優化的關注,能為最流行的開源數據庫MySQL/MariaDB大廈添磚加瓦。

彭立勛




推薦序3
我先說一個笑話。這個笑話是我從萬維鋼的專欄里看到的。
三個邏輯學家走進酒吧,酒保問他們,三位都喝啤酒嗎?
第一個邏輯學家說,我不知道。
第二個邏輯學家說,我不知道。
第三個邏輯學家說,是的。
這個笑話有點冷,需要用一點邏輯才能欣賞。要想否定“三人都喝啤酒”,只要有一個人知道自己不喝就行了。前兩個邏輯學家說不知道,就說明他們自己是想喝的,只是不知道別人喝不喝。而第三個人一看前兩個人都說不知道,那就說明這兩個人肯定都是要喝的,而他自己也想喝啤酒,所以他就可以判斷三人都想喝啤酒。
他們的回答有點怪,但是非常準確。
為什么要講這個故事呢?因為我的這三位同事李春、羅小波、董紅禹在我頭腦里的畫像都是非常認真和講究邏輯的人。這種認真和嚴謹,你在書中的每一頁都能感受到。相信通過這本書的系統性訓練,你也能感受到這種思維方式的美,最終也能獲得這種思維方式。“授人以魚,不如授之以漁。”具備優秀的思維能力才是在未來可以遷移的能力,如果只是學習一些命令,則很快會過時,思維能力和學習能力的提升才是不會變的東西。
說回到這本書。
對這本書的起心動念,我是有功勞的,所以李春邀請我來寫序,也就很痛快地答應了。
一年前我們在想,我們有著業界一流的MySQL團隊,為什么不能將這些知識和經驗以一種更容易傳播的方式貢獻給大家呢?
沿著這個思路,想到了兩種載體,一種是產品,這也是沃趣一直在做的,未來也會一直持續做;一種是書籍,書籍其實也是一種產品,因為它也是標準化的、極容易復制的。因此,團隊中在MySQL技術上頗有追求和建樹的幾個人碰頭一聊,大家一拍即合。
起心動念容易,甚至一度讓我們很興奮,但是落地難,尤其是在做了管理者帶了團隊之后,更能意識到這一點,提建議(起心動念)是沒有成本的,但是具體做這件事、落地這件事的人是需要忍受寂寞、付出巨大努力的。
我在他們的寫作群里,見證了寫書過程中的所有艱辛。好在一年的時間,堅持下來了,成果就是各位手里拿到的這本書。
學知識,如果說有捷徑,那就是選擇幾本靠譜的、高質量的書籍,站在巨人的肩膀上,這是高起點和借勢。
這本書可以讓你體驗到原有知識從破碎到重建的過程,只有能打破你現有認知的書籍才是好書籍,打破之后,如果你能夠重建起基于新認知的知識大廈,你就重生了。對于認知是如此,對于心智、對于各種成長莫不如此。格物致知,相信通過努力學習這本書,會帶給你底層認知的提升。
在這里也要恭喜我的幾位同事:李春、羅小波、董紅禹,寫書是大多數技術人員的夢想,人類從一開始就追求不朽,立言是一種極好的方式,儒家講立德、立功、立言,寫書就是立言的最好方式。此外,道家通過修煉達到肉身不死來實現不朽,佛教通過覺悟實現不朽,這兩種方式不是我輩可以企及的。說了這么多,其實是想呼吁更多的人加入寫書的隊伍,授人玫瑰,手留余香。
最后,分享我很喜歡的一句話,“你的樣子里,有你愛過的人,走過的路,看過的風景,讀過的書”。相信通過對這本書的學習,一定可以讓你的氣質變得不一樣!

魏興華
內容簡介:

本書一共分為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等監控工具。
目錄:

基 礎 篇
第1章 MYSQL初始化安裝、簡單安全加固 3
1.1 背景 3
1.2 初始化安裝 3
1.2.1 下載二進制安裝文件 3
1.2.2 創建MYSQL用戶 3
1.2.3 創建程序、數據存放目錄 4
1.2.4 解壓縮二進制安裝文件并設置目錄權限 4
1.2.5 軟鏈接程序路徑,并設置MYSQL命令環境變量 5
1.2.6 配置MY.CNF文件參數 5
1.2.7 初始化MYSQL 6
1.2.8 啟動MYSQL 7
1.3 簡單安全加固 8
1.3.1 登錄MYSQL 8
1.3.2 刪除非ROOT或非LOCALHOST的用戶并修改ROOT密碼 9
1.3.3 刪除TEST庫,清理MYSQL.DB表 10
1.4 創建用戶、庫、表、數據 12
1.4.1 創建管理用戶并授權 12
1.4.2 創建庫、表、程序賬號 13
1.4.3 插入數據 14
1.5 MYSQL參數模板 16
第2章 MYSQL常用的兩種升級方法 21
2.1 背景 21
2.2 MYSQL 5.5.54的安裝 21
2.3 升級MYSQL 5.5.54到MYSQL 5.6.35 21
2.3.1 使用MYSQL_UPGRADE直接升級數據字典庫 21
2.3.2 使用MYSQLDUMP邏輯備份數據 30
2.4 升級注意事項 38
第3章 MYSQL體系結構 41
3.1 快速安裝MYSQL 41
3.2 數據目錄結構 43
3.3 MYSQL SERVER體系結構 46
3.4 MYSQL中的存儲引擎 48
3.5 INNODB存儲引擎體系結構 48
3.6 INNODB存儲引擎后臺線程 52
3.7 MYSQL前臺線程 54
第4章 PERFORMANCE_SCHEMA初相識 56
4.1 什么是PERFORMANCE_SCHEMA 56
4.2 PERFORMANCE_SCHEMA使用快速入門 57
4.2.1 檢查當前數據庫版本是否支持 57
4.2.2 啟用PERFORMANCE_SCHEMA 58
4.2.3 PERFORMANCE_SCHEMA表的分類 59
4.2.4 PERFORMANCE_SCHEMA簡單配置與使用 62
第5章 PERFORMANCE_SCHEMA配置詳解 66
5.1 編譯時配置 66
5.2 啟動時配置 67
5.2.1 啟動選項 67
5.2.2 SYSTEM VARIABLES 69
5.3 運行時配置 71
5.3.1 PERFORMANCE_TIMERS表 71
5.3.2 SETUP_TIMERS表 72
5.3.3 SETUP_CONSUMERS表 73
5.3.4 SETUP_INSTRUMENTS表 76
5.3.5 SETUP_ACTORS表 82
5.3.6 SETUP_OBJECTS表 85
5.3.7 THREADS表 87
第6章 PERFORMANCE_SCHEMA應用示例薈萃 93
6.1 利用等待事件排查MYSQL性能問題 93
6.2 鎖問題排查 97
6.2.1 找出誰持有全局讀鎖 97
6.2.2 找出誰持有MDL鎖 100
6.2.3 找出誰持有表級鎖 104
6.2.4 找出誰持有行級鎖 107
6.3 查看最近的SQL語句執行信息 112
6.3.1 查看最近的TOP SQL語句 112
6.3.2 查看最近執行失敗的SQL語句 114
6.4 查看SQL語句執行階段和進度信息 117
6.4.1 查看SQL語句執行階段信息 117
6.4.2 查看SQL語句執行進度信息 120
6.5 查看最近的事務執行信息 121
6.6 查看多線程復制報錯詳情 123
第7章 SYS系統庫初相識 126
7.1 SYS系統庫使用基礎環境 126
7.2 SYS系統庫初體驗 127
7.3 SYS系統庫的進度報告功能 129
第8章 SYS系統庫配置表 132
8.1 SYS_CONFIG表 132
8.2 SYS_CONFIG_INSERT_SET_USER觸發器 136
8.3 SYS_CONFIG_UPDATE_SET_USER觸發器 136
第9章 SYS系統庫應用示例薈萃 138
9.1 查看慢SQL語句慢在哪里 138
9.2 查看是否有事務鎖等待 140
9.3 查看是否有MDL鎖等待 141
9.4 查看INNODB緩沖池中的熱點數據有哪些 143
9.5 查看冗余索引 144
9.6 查看未使用的索引 145
9.7 查詢表的增、刪、改、查數據量和I/O耗時統計信息 145
9.8 查看MYSQL磁盤文件產生的磁盤流量與讀寫比例 146
9.9 查看哪些語句使用了全表掃描 147
9.10 查看哪些語句使用了文件排序 148
9.11 查看哪些語句使用了臨時表 149
第10章 INFORMATION_SCHEMA初相識 151
10.1 什么是INFORMATION_SCHEMA 151
10.2 INFORMATION_SCHEMA組成對象 153
10.2.1 SERVER層的統計信息字典表 153
10.2.2 SERVER層的表級別對象字典表 154
10.2.3 SERVER層的混雜信息字典表 155
10.2.4 INNODB層的系統字典表 156
10.2.5 INNODB層的鎖、事務、統計信息字典表 157
10.2.6 INNODB層的全文索引字典表 158
10.2.7 INNODB層的壓縮相關字典表 160
第11章 INFORMATION_SCHEMA應用示例薈萃 161
11.1 使用SERVER層的字典表查詢相關的元數據信息 161
11.1.1 查看數據庫中是否使用了外鍵 161
11.1.2 查看INNODB表空間文件信息 162
11.1.3 查看索引的統計信息 165
11.1.4 查看表的字段相關信息 166
11.1.5 查看數據庫中是否使用了存儲程序 167
11.1.6 查看數據庫中的分區表信息 168
11.1.7 查看數據庫中的觸發器 169
11.1.8 查看數據庫中的計劃任務 170
11.1.9 查看客戶端會話的狀態信息 172
11.2 使用INNODB層的字典表查詢相關的元數據信息 173
11.2.1 查看索引列的信息 173
11.2.2 查看表的字段相關信息 175
11.2.3 查看事務鎖等待信息 176
11.2.4 查看INNODB緩沖池中的熱點數據有哪些 176
第12章 MYSQL系統庫之權限系統表 177
12.1 USER 177
12.2 DB 179
12.3 TABLES_PRIV 180
12.4 COLUMNS_PRIV 181
12.5 PROCS_PRIV 182
12.6 PROXIES_PRIV 182
第13章 MYSQL系統庫之訪問權限控制系統 184
13.1 訪問權限控制系統概述 184
13.2 MYSQL提供了哪些權限 185
13.3 MYSQL賬號命名規則 191
13.4 MYSQL賬號訪問控制兩階段 192
13.4.1 第一階段(賬號和密碼認證) 192
13.4.2 第二階段(權限檢查) 196
13.5 權限變更的影響 197
13.6 MYSQL常見連接問題 198
第14章 MYSQL系統庫之統計信息表 200
14.1 統計信息概述 200
14.2 統計信息表詳解 203
14.2.1 INNODB_TABLE_STATS 203
14.2.2 INNODB_INDEX_STATS 204
第15章 MYSQL系統庫之復制信息表 206
15.1 復制信息表概述 206
15.2 復制信息表詳解 207
15.2.1 SLAVE_MASTER_INFO 207
15.2.2 SLAVE_RELAY_LOG_INFO 209
15.2.3 SLAVE_WORKER_INFO 211
15.2.4 GTID_EXECUTED 215
15.2.5 NDB_BINLOG_INDEX 217
第16章 MYSQL系統庫之日志記錄表 218
16.1 日志信息概述 218
16.2 日志表詳解 220
16.2.1 GENERAL_LOG 220
16.2.2 SLOW_LOG 223
第17章 MYSQL系統庫應用示例薈萃 228
17.1 查看用戶不同作用域的權限 228
17.1.1 查看全局權限 228
17.1.2 查看庫級別權限 230
17.1.3 查看表級別權限 232
17.1.4 查看字段級別權限 234
17.2 查看統計信息 236
17.2.1 查看表統計信息 236
17.2.2 查看索引統計信息 236
17.3 查看SQL日志信息 237
第18章 復制技術的演進 245
18.1 復制格式概述 245
18.2 基于數據安全的復制技術演進 246
18.2.1 異步復制 246
18.2.2 半同步復制 247
18.2.3 增強半同步復制 249
18.2.4 組復制 250
18.2.5 GTID復制 253
18.3 基于復制效率的復制技術演進 255
18.3.1 單線程復制 255
18.3.2 DATABASE 并行復制 256
18.3.3 LOGICAL_CLOCK 并行復制 258
18.3.4 WRITESET并行復制 260
第19章 事務概念基礎 263
19.1 4種事務隔離級別和3種異常現象 263
19.1.1 標準的事務隔離級別 263
19.1.2 調整事務隔離級別 264
19.2 從事務提交談起 265
19.2.1 事務管理 265
19.2.2 數據庫中的文件 266
19.2.3 WAL日志先寫 266
19.3 MYSQL中的REDO日志 267
19.3.1 REDO日志落盤時間點 267
19.3.2 REDO日志格式 267
19.3.3 相關參數及概念 269
19.3.4 CHECKPOINT概念 269
19.3.5 REDO日志的設置 271
19.3.6  REDO日志與BINLOG協調工作 273
19.4 MVCC介紹 274
19.4.1 MVCC原理 274
19.4.2 具體代碼 276
第20章 INNODB鎖 280
20.1 INNODB鎖概述 280
20.1.1 INNODB鎖分類 280
20.1.2 行鎖 280
20.1.3 表鎖 281
20.1.4 鎖模式對應的含義 282
20.2 加鎖驗證 282
20.2.1 REPEATABLE-READ隔離級別+表無顯式主鍵和索引 283
20.2.2 REPEATABLE-READ隔離級別+表有顯式主鍵但無索引 286
20.2.3 REPEATABLE-READ隔離級別+表無顯式主鍵但有索引 288
20.2.4 REPEATABLE-READ隔離級別+表有顯示主鍵和索引 291
20.2.5 READ-COMMITTED隔離級別+表無顯式主鍵和索引 293
20.2.6 READ-COMMITTED隔離級別+表有顯式主鍵無索引 295
20.2.7 READ-COMMITTED隔離級別+表無顯式主鍵有索引 295
20.2.8 READ-COMMITTED隔離級別+表有顯式主鍵和索引 296
第21章 SQL優化 299
21.1 SQL優化基礎概念 299
21.2 MYSQL中的JOIN算法 303
21.3 MYSQL中的優化特性 305
第22章 MYSQL讀寫擴展 308
22.1 分布式架構概述 308
22.2 分庫分表兩種方式 309
22.2.1 中間件方式 309
22.2.2 客戶端方式 309
22.2.3 客戶端方式與中間件方式不同 310
22.2.4 分庫與分表 310
22.3 中間件工作方式及原理 310
22.4 架構設計及業務場景 312
22.4.1 讀寫擴展案例 312
22.5 關于中間件的一些限制解釋 314
22.5.1 跨庫查詢、復雜的SQL語句支持 314
22.5.2 分布式事務 314
案 例 篇
第23章 性能測試指標和相關術語 317
23.1 測試目標分類 317
23.1.1 已知故障信息采集 317
23.1.2 預估壓力評測 317
23.2 性能測試指標 318
23.2.1 數據庫性能通用“切口” 318
23.2.2 測試通用術語 319
23.2.3 示例 320
23.3 本章小結 321
第24章 歷史問題診斷和現場故障分析 322
24.1 故障分析和驗證 322
24.1.1 歷史問題排查 322
24.1.2 在線問題分析 323
24.2 故障復現排查 323
24.3 本章小結 325
第25章 性能調優金字塔 326
25.1 硬件和系統調優 327
25.1.1 硬件優化 327
25.1.2 系統優化 327
25.2 MYSQL調優 328
25.2.1 參數調優 328
25.2.2 SQL/索引調優 329
25.3 架構調優 329
25.4 本章小結 329
第26章 SQL語句執行慢真假難辨 330
26.1 概述 330
26.2 測試環境 331
26.3 采集數據包 331
26.3.1 采集應用服務器數據包 331
26.3.2 采集數據庫服務器數據包 332
26.4 解析數據包 333
26.4.1 使用WIRESHARK解析數據包 333
26.4.2 使用TCPDUMP解析數據包 335
26.5 本章小結 337
第27章 如何避免三天兩頭換硬盤、內存、主板 338
27.1 概述 338
27.2 服務器標準化 338
27.3 上線前烤機 339
27.3.1 STRESS 339
27.3.2 FIO 341
27.3.3 數據庫烤機 341
27.4 本章小結 341
第28章 每隔45天的MYSQL性能低谷 342
28.1 存儲知識小普及 342
28.1.1 MYSQL存儲系統要求 342
28.1.2 存儲系統軟件層 343
28.1.3 存儲系統硬件層 343
28.2 每隔45天的性能抖動 344
28.3 影響I/O性能的三種RAID策略 348
28.3.1 電池充放電 348
28.3.2 巡讀 354
28.3.3 一致性檢查 356
28.4 本章小結 358

第29章 MYSQL連接無法自動釋放 359
29.1 環境配置 359
29.2 問題現象 359
29.3 診斷分析 359
29.4 解決方案 362
29.5 本章小結 362
第30章 查詢MYSQL偶爾比較慢 363
30.1 環境配置 363
30.2 問題現象 363
30.3 診斷分析 363
30.4 選擇VIP還是DNS訪問MYSQL 364
30.4.1 VIP之殤 364
30.4.2 DNS之痛 365
30.4.3 VIP切換還是DNS切換 365
30.5 CPU節能模式 365
30.6 本章小結 366
第31章 MYSQL最多只允許214個連接 367
31.1 環境配置 367
31.2 故障現象 367
31.3 故障分析 367
31.4 解決方案 370
31.5 MYSQL最大連接數為214的源碼解析 370
31.6 LINUX資源限制 371
31.6.1 資源拆分和組合 371
31.6.2 進程資源限制 372
31.6.3 MYSQL內部資源限制 374
31.7 本章小結 374
第32章 MYSQL掛起診斷思路 375
32.1 環境配置 375
32.2 問題現象 375
32.3 診斷分析 376
32.4 掛起時先做什么 377
32.5 總結 377
第33章 硬件和系統調優 378
33.1 硬件和系統調優概覽 378
33.1.1 I/O:MYSQL 80%的性能瓶頸所在 378
33.2 CPU 384
33.3 網絡 384
33.4 其他 385
33.5 總結 386
第34章 并發刪除數據造成死鎖 387
34.1 現象描述 387
34.2 如何閱讀死鎖日志 388
34.3 表結構及操作步驟 390
34.4 總結 390
第35章 刪除不存在的數據造成死鎖 391
35.1 現象描述 391
35.2 問題分析 392
35.3 問題擴展 392
35.4 表結構及操作步驟 393
35.5 總結 393
第36章 插入意向鎖死鎖 394
36.1 現象描述 394
36.2 問題分析 395
36.3 總結 397
第37章 分頁查詢優化 398
37.1 現象描述 398
37.2 優化方案 398
第38章 子查詢優化——子查詢轉換為連接 400
38.1 現象描述 400
38.2 優化方案 401

第39章 子查詢優化——使用DELETE刪除數據 403
39.1 現象描述 403
39.2 優化方案 403
工 具 篇
第40章 硬件規格常用查看命令詳解 407
40.1 通用命令 407
40.1.1 LSHW 407
40.1.2 DMIDECODE 414
40.1.3 DMESG 419
40.2 CPU相關命令 420
40.3 磁盤相關命令 422
40.3.1 SMARTCTL 422
40.3.2 LSSCSI 424
40.4 網卡相關命令 426
40.4.1 LSPCI 426
40.4.2 ETHTOOL 428
40.5 HCA卡相關命令 430
第41章 系統負載常用查看命令詳解 433
41.1 TOP 433
41.1.1 命令行選項 433
41.1.2 交互式命令選項 434
41.1.3 輸出結果解讀 434
41.2 DSTAT 436
41.2.1 命令行選項 436
41.2.2 輸出結果解讀 438
41.3 MPSTAT 442
41.3.1 命令行選項 443
41.3.2 輸出結果解讀 443
41.4 SAR 444
41.4.1 命令行選項 444
41.4.2 輸出結果解讀 446
41.5 VMSTAT 453
41.5.1 命令行選項 453
41.5.2 輸出結果解讀 453
41.6 IOSTAT 455
41.6.1 命令行選項 455
41.6.2 輸出結果解釋 456
41.7 FREE 458
41.7.1 命令行選項 459
41.7.2 輸出結果解讀 459
41.8 IOTOP 460
41.8.1 命令行選項 461
41.8.2 交互式命令選項 461
41.8.3 輸出結果解讀 461
41.9 IFTOP 463
41.9.1 命令行選項 463
41.9.2 交互式命令選項 463
41.9.3 輸出結果解讀 464
41.10 IPERF 465
41.10.1 命令行選項 466
41.10.2 輸出結果解讀 467
第42章 FIO存儲性能壓測 469
42.1 安裝FIO 469
42.2 測試I/O性能 470
42.2.1 隨機寫 470
42.2.2 順序寫 470
42.2.3 隨機讀 471
42.2.4 順序讀 471
42.2.5 混合隨機讀寫 471
42.2.6 FIO配置文件測試 471
42.3 參數和結果詳解 472
42.3.1 關鍵參數解釋 472
42.3.2 配置文件 473
42.3.3 結果解析 475
42.4 FIO測試建議 476
42.5 課外閱讀 476
第43章 HAMMERDB在線事務處理測試 477
43.1 安裝和配置HAMMERDB 477
43.1.1 下載安裝包 477
43.1.2 安裝HAMMERDB 477
43.1.3 安裝HAMMERDB GUI依賴包 478
43.2 測試 481
43.3 課外閱讀 492
第44章 SYSBENCH數據庫壓測工具 493
44.1 安裝SYSBENCH 493
44.1.1 YUM安裝 493
44.1.2 RPM包安裝 493
44.1.3 編譯安裝 494
44.1.4 驗證安裝是否成功 494
44.2 測試案例 494
44.2.1 造數 495
44.2.2 數據庫讀寫測試 495
44.2.3 清理 496
44.3 SYSBENCH 參數詳解 496
44.3.1 SYSBENCH命令語法 496
44.3.2 OPTIONS 496
44.3.3 TESTNAME 500
44.3.4 COMMAND 502
44.4 數據庫測試輸出信息詳解 502
44.4.1 輸出結果概述 503
44.4.2 版本及關鍵測試參數輸出 504
44.4.3 中間統計結果輸出 504
44.4.4 整體統計結果輸出 504
44.5 課外閱讀 505
第45章 MYSQLADMIN和INNOTOP工具詳解 506
45.1 MYSQLADMIN 506
45.1.1 命令行選項 506
45.1.2 實戰演示 511
45.2 INNOTOP 513
45.2.1 安裝INNOTOP 513
45.2.2 命令行選項 514
45.2.3 交互式選項 515
45.2.4 實戰演示 516
第46章 利用PROMETHEUS+GRAFANA 搭建炫酷的MYSQL監控平臺 524
46.1 安裝PROMETHEUS 525
46.1.1 下載程序包 525
46.1.2 解壓縮程序包 526
46.1.3 啟動PROMETHEUS 527
46.2 安裝GRAFANA 529
46.2.1 下載程序包 529
46.2.2 解壓縮程序包 530
46.2.3 啟動GRAFANA 530
46.2.4 在GRAFANA中導入GRAFANA-DASHBOARDS 531
46.3 監控節點部署 534
46.3.1 添加主機監控 534
46.3.2 添加MYSQL監控 535
46.3.3 監控DASHBOARD切換 536
第47章 PERCONA TOOLKIT常用工具詳解 538
47.1 PT-QUERY-DIGEST 538
47.1.1 命令行選項 538
47.1.2 實戰演示 550
47.2 PT-IOPROFILE 558
47.2.1 命令行選項 558
47.2.2 實戰演示 559
47.3 PT-INDEX-USAGE 560
47.3.1 命令行選項 561
47.3.2 實戰演示 563
47.4 PT-DUPLICATE-KEY-CHECKER 566
47.4.1 命令行選項 567
47.4.2 實戰演示 568
47.5 PT-MYSQL-SUMMARY/PT-SUMMARY 571
47.5.1 PT-MYSQL-SUMMARY 571
47.5.2 PT-SUMMARY 578
47.6 PT-PMP 584
47.6.1 命令行選項 585
47.6.2 實戰演示 585
47.7 PT-STALK 587
47.7.1 命令行選項 588
47.7.2 實戰演示 591
47.8 PT-SIFT 594
47.8.1 命令行選項 595
47.8.2 實戰演示 595
第48章 MYSQL主流備份工具之MYSQLDUMP詳解 598
48.1 簡介 598
48.2 原理 599
48.3 命令行選項 601
48.3.1 連接選項 601
48.3.2 文件選項 602
48.3.3 DDL選項 603
48.3.4 調試選項 604
48.3.5 幫助選項 604
48.3.6 國際化選項——與字符集相關的選項 604
48.3.7 復制選項 605
48.3.8 輸出格式化選項 607
48.3.9 過濾選項 609
48.3.10 性能選項 612
48.3.11 事務選項 612
48.3.12 組合選項 614
48.4 實戰演示 614
48.4.1 完全備份與恢復 614
48.4.2 增量備份與恢復 616
48.4.3 搭建主從復制架構 616
48.4.4 克隆從庫 618
48.4.5 指定庫表備份與恢復 619
48.4.6 純文本備份與恢復 621
第49章 MYSQL主流備份工具之XTRABACKUP詳解 624
49.1 簡介 624
49.2 原理 624
49.3 命令行選項 633
49.4 實戰演示 644
49.4.1 完全備份與恢復 644
49.4.2 增量備份與恢復 645
49.4.3 基于時間點的恢復 649
49.4.4 搭建主從復制架構 657
49.4.5 克隆從庫 659
第50章 MYSQL主流備份工具之MYDUMPER詳解 662
50.1 簡介 662
50.2 原理 662
50.3 命令行選項 664
50.3.1 MYDUMPER 664
50.3.2 MYLOADER 666
50.4 實戰演示 667
50.4.1 安裝MYDUMPER 667
50.4.2 備份與恢復 669
第51章 MYSQL主流閃回工具詳解 675
51.1 閃回工具科普 675
51.2 BINLOG2SQL 676
51.2.1 安裝和使用要求 676
51.2.2 命令行選項 677
51.2.3 實戰演示 678
51.2.4 使用限制與注意事項 690
51.3 MYFLASH 690
51.3.1 安裝MYFLASH 691
51.3.2 命令行選項 691
51.3.3 實戰演示 692
序: