千金良方——MySQL性能優化金字塔法則
  • 推薦3
  • 收藏4
  • 瀏覽1.5K

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

李春 , 羅小波 , 董紅禹 (作者)  張春雨 (責任編輯)

  • 書  號:978-7-121-37520-0
  • 出版日期:2019-11-01
  • 頁  數:728
  • 開  本:16(185*260)
  • 出版狀態:上市銷售
  • 維護人:符隆美
本書一共分為3篇:基礎篇、案例篇和工具篇?!盎A篇”從理論基礎和基本原理層面介紹了MySQL的安裝與配置、升級和體系結構,information_schema、sys_schema、performance_schema和mysql_schema,MySQL復制,MySQL事務,SQL語句優化及架構設計基礎知識?!鞍咐睆挠布拖到y、MySQL架構等方面給出了性能優化的十幾個案例,包括:性能測試的基本優化思路和最需要關注的性能指標解釋、對日常SQL語句執行慢的基本定位、避免x86可用性的一般性方法、節能模式會怎樣影響性能、I/O存儲作為數據庫最重要的依賴是如何影響數據庫性能的、主備復制不一致可能有哪些原因、字符集不一致會造成哪些性能問題、在實際場景中鎖的爭用是怎樣的?!肮ぞ咂苯榻B了在MySQL性能優化過程中需要用到的各種工具,包括:dmidecode、top、dstat等硬件和系統排查工具;FIO、sysbench、HammerDB等壓力測試工具;mysqldump、XtraBackup等備份工具;Percona、innotop、Prometheus等監控工具。
通過本書,讀者可以掌握MySQL 5.7中的新特性,熟練地使用各種性能測試、排查、監控工具與方法,通過性能基準測試篇的學習,可幫助讀者對生產系統的性能、瓶頸了然于心,通過性能基礎優化的學習,可以讓讀者在現有硬件、架構下盡可能地低成本提高數據庫的性能。通過架構優化的學習,可以讓讀者在碰到業務量增長時,能從容地選擇如何進行架構升級等。通過大量豐富的實戰案例,讀者可以熟練掌握數據庫自底層硬件到操作系統,再到數據庫層的整體性能排查與調優的方法論,在無法通過調優解決問題時如何做架構選型與升級改造(例如:分布式改造、準實時同步改善OLAP場景等)。
李春:原阿里巴巴MySQL DBA團隊技術Leader,全程參與阿里數據庫架構從Oracle遷移到MySQL的過程,參與分布式中間件Cobar設計?,F為沃趣科技聯合創始人&首席架構師,負責MySQL、基礎軟件及部分關鍵組件的技術選型、風險評估等。
羅小波:沃趣科技高級數據庫工程師,主要負責MySQL產品的數據庫支撐與售后二線支撐。曾參與版本發布系統、輕量級監控系統、運維管理平臺、數據庫管理平臺的設計與編寫,熟悉MySQL體系結構,Innodb存儲引擎,喜好專研開源技術,多次在公開場合做過線下線上數據庫專題分享,發表過多篇與數據庫相關的研究文章。
董紅禹:沃趣科技MySQL DBA , 為過多家大型企業進行過故障解決、架構設計、性能優化,例如中信證券、浙江農信、陜西農信、郵儲銀行等。規劃并實施了浙江農信互聯網核心金融平臺。
性能問題
這個世界是由問題組成的,理想的狀態和實際狀態之間的差異造成了問題。國家領導解決人民生活幸福的大問題,公司的總經理解決盈利的問題,而本書只想解決MySQL數據庫性能這么一個“小問題”。
從某種程度來說,MySQL數據庫性能優化的問題是一個并行的問題,歸根結底是鎖和資源爭用的問題。舉個例子:假設你要開一個餐飲店,你需要取好店名,到工商局領取開業登記注冊證書,到衛生防疫站申請衛生許可,到物價局進行物價審核,如果要賣酒,則需要到工商部門辦理酒類經營許可證,到稅務局辦理稅務登記,到銀行開戶,還需要找廚師、找洗碗工、找采購人員、找門面、協調店面轉讓、進行店面裝修、做廣告牌,等等。
如果想盡快把餐飲店開起來,就需要同時做更多的事情,就像計算機一樣,并行地去做更多的事情。但是當你真正去做這些事情的時候,會發現:
? 總有一兩件事情耗費的時間特別長,會最大程度地影響餐飲店什么時候能開起來。比如找到合適的店面或者合適的廚師。
? 有些事情是相互依賴的,一件事情必須依賴于另一件事情的完成。比如工商登記就取決于你要準備好店名,店面裝修依賴于門面已經租好了,等等。
? 有些事情特別重要,它決定了這個餐飲店是否能長期經營下去。例如廚師做的菜是否足夠好、足夠快,運營的成本是否足夠低而能產生足夠的利潤支撐餐飲店繼續運營。
其實性能優化要做的就是以下事情:
? 了解基本原理。找到事情的因果關系和依賴關系,讓盡量不相關的事情能并行做起來。
? 要事第一。找到當前最重要、最需要優化的地方,投入時間和精力,不斷去改進它、優化它。
? 切中要害。找到耗費時間最長的地方,想方設法縮短它的時間。
本書的作者嘗試通過上述方法論來找到MySQL性能優化的辦法并呈現給讀者。
數據庫的性能提升
從計算機出現的第一天起,性能作為鞭策者就不斷地促進計算機及系統的演進。從最開始的人工輸入命令等待計算機執行,到利用批處理任務提升利用率,再到通過多進程和多線程并發來進一步提升效率,性能其實一直是計算機工程師想要努力去解決和改善的重要難題。
上面說的都是對已有系統的性能優化,數據庫的性能優化其實可以在做設計之前就開始。
數據庫的性能優化首先是計算機系統的優化。數據庫程序是運行在計算機系統上的應用程序,需要先優化的就是計算機系統。也就是說,讓硬件盡量均衡,操作系統充分發揮硬件的全部性能,而數據庫充分利用操作系統和文件系統提供的便利發揮全部性能,而且避免資源的相互競爭。
數據庫的性能優化其次是SQL語句的優化。上層應用都通過SQL語句與數據庫打交道,一條SQL語句為了獲取數據可以有幾十甚至上百種執行計劃,數據庫會通過優化器選擇更優的SQL執行計劃,但是MySQL在執行計劃上遠遠落后于商業數據庫,甚至在一些方面相比PostgreSQL也差很多,那么怎么寫出正確的SQL語句,避免MySQL選擇錯誤的執行計劃,以及怎樣通過增加索引、設置參數讓MySQL的執行計劃更優,這就是優化SQL語句需要關心的事情。
最后,數據庫的性能優化最有效的是架構的優化。對于讀多寫少的應用程序,可以設計為讀寫分離,把允許延遲的讀請求主動分發到備庫;對于秒殺型的業務,可以先在內存型key-value存儲系統篩選再發往數據庫持久化,避免對數據庫的沖擊;對于匯總、聚合類的應用,可以采用列式存儲引擎或者專門的大數據平臺;對于監控類的應用,可以采用時序數據庫,等等。
以上三種優化思路貫穿本書,這也是本書名為《千金良方:MySQL性能優化金字塔法則》的緣由。
機械思維和大數據思維
看過吳軍博士《智能時代:大數據與智能革命重新定義未來》的人可能會對本書嗤之以鼻,本書的性能優化方法論還是工業革命時代的機械思維,簡而言之,就是尋找因果關系,大膽假設,小心求證?!艾F在都是信息時代了,了解過信息論沒有?知道香農第一定律和第二定律嗎?解決問題需要用大數據思維!”
筆者有兩點理由使用機械思維來介紹數據庫性能優化:
(1)大數據時代需要的數據量大、多緯度和完備性,目前對數據庫的性能優化和性能診斷,筆者掌握的案例和相關信息遠遠達不到大數據的要求。我們可以期待亞馬遜、阿里云或者騰訊云等廠商或者專業的數據庫公司(如Oracle、MariaDB等)來有針對性地做一些大數據數據庫性能優化的嘗試。
(2)大數據的成本很高。目前我們遇到的大部分性能問題其實用因果關系和假設→推導→再假設→再推導的方法就可以解決,不需要用到大數據、人工智能這樣的“大殺器”。
內容介紹
MySQL的火熱程度有目共睹,如果需要了解MySQL的安裝、啟動、配置等基礎知識,市面上相關的書籍已是汗牛充棟。本書則盡量深入細致地介紹MySQL的基本原理,以及性能優化的實際案例。
基本原理很枯燥,就像課堂上老師介紹數學定理和公式推導一樣,有人可能會質疑,小學都在進行素質教育了,你這本書里怎么還有那么多基本原理的介紹?對于工作了兩三年的技術人員來說,在實踐上已經有了比較多的積累,解決過很多問題——可能通過sys schema查詢事務鎖等待解決了系統的并發問題,通過設置ulimit -n 擴大進程文件句柄數解決了MySQL的進程限制問題,通過設計讀寫分離架構擴展了應用的讀性能線性擴展問題。但是作為求知欲強的技術人員,我們急切地希望知其所以然,了解MySQL到底是怎么設計的,以及為什么這樣設計,sys schema到底還有哪些可以幫助我們分析解決問題的存儲過程,Linux系統的資源限制除了ulimit還有哪些,讀寫分離架構適應的場景有哪些,什么時候建議用分庫分表,等等。如果你也跟我們一樣,你應該閱讀本書。
本書一共分為3篇:基礎篇、案例篇和工具篇。
信息論認為消除一件事情的不確定性就是獲取足夠多的信息。我們認為任何優化都可以從了解它的基本原理和設計思路開始?!盎A篇”從理論基礎和基本原理層面介紹了MySQL的安裝與配置、升級和體系結構,information_schema、sys_schema、performance_schema和mysql_schema,MySQL復制,MySQL事務,SQL語句優化及架構設計基礎知識。希望讀者通過對這些內容的學習,能夠深入細致地了解MySQL各方面的基礎知識。
計算機是一種實驗的科學,性能優化是實戰的藝術?!鞍咐睆挠布拖到y、MySQL架構等方面給出了性能優化的十幾個案例,包括:性能測試的基本優化思路和最需要關注的性能指標解釋、對日常SQL語句執行慢的基本定位、避免x86可用性的一般性方法、節能模式會怎樣影響性能、I/O存儲作為數據庫最重要的依賴是如何影響數據庫性能的、主備復制不一致可能有哪些原因、字符集不一致會造成哪些性能問題、在實際場景中鎖的爭用是怎樣的。希望讀者通過這些案例,可以深入細致地理解“基礎篇”中的各種概念,融會貫通,對MySQL有一個全面的、系統的掌握。
“工欲善其事,必先利其器?!蔽覀內粘P枰柚恍┕ぞ邅碜鲂阅軆灮??!肮ぞ咂苯榻B了在MySQL性能優化過程中需要用到的各種工具,包括:dmidecode、top、dstat等硬件和系統排查工具;FIO、sysbench、HammerDB等壓力測試工具;mysqldump、XtraBackup等備份工具;Percona、innotop、Prometheus等監控工具。希望讀者可以借助更多自動化的方式去驗證和評估性能優化解決方案,提升性能。
讀者對象
(1)MySQL初學者。建議按照順序從本書的“基礎篇”開始閱讀?!盎A篇”介紹了從安裝部署、基礎配置到性能診斷等日常工作需要了解的內容。在熟悉了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章。
讀者服務
輕松注冊成為博文視點社區用戶(www.5764402.live),掃碼直達本書頁面。
? 下載資源:本書提供資源文件,均可在 下載資源 處下載。
? 提交勘誤:您對書中內容的修改意見可在 提交勘誤 處提交,若被采納,將獲贈博文視點社區積分(在您購買電子書時,積分可用來抵扣相應金額)。
? 交流互動:在頁面下方 讀者評論 處留下您的疑問或觀點,與我們和其他讀者一同學習交流。
頁面入口:http://www.5764402.live/37520

編者

目錄

基 礎 篇
第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種異?,F象 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

本書勘誤

印次
  • 頁碼:76  •  行數:9  •  印次: 1

    76頁,UPDATE setupconsumers SET ENABLED =’NO’ WHERE NAME =’events waits_current’;語句中的”NO”修改為”YES”

    xiaoboluo768 提交于 2019/11/4 15:51:45
    符隆美 確認于 2019/11/18 10:12:48
  • 頁碼:261  •  行數:4  •  印次: 1

    正文第4行,

    last_committed=9
    應為
    last_committed=8

    嚴少安 提交于 2020/2/15 14:22:20
    張春雨 確認于 2020/3/23 14:00:54
  • 頁碼:332  •  行數:1  •  印次: 1

    tcpdump -s 0 -w /tmp/client_3306.pcap —host 10.10.30.161 and port 3306應該修改為
    tcpdump -s 0 -w /tmp/client_3306.pcap — host 10.10.30.161 and port 3306
    —和host之間應該有一個空格,—表示該字符后面沒有參數了,host 后面跟IP地址表示監聽發往或者從該IP發出的package。

    李春 提交于 2019/11/6 10:59:11
    符隆美 確認于 2019/11/18 10:12:36
  • 頁碼:471  •  行數:13  •  印次: 1

    這里用8個線程對/data2/test1文件做持續時間為60s、隊列深度為1、塊大小為4k的direct異步順序讀(libaio)壓力測試,該測試命名為bw_read。輸出結果不按4個job分別展示,而是按照 group 匯總。這樣就可以得到在該壓力下該文件系統的順序讀帶寬

    應該修改為

    這里用8個線程對/data2/test1文件做持續時間為60s、隊列深度為1、塊大小為1m的direct異步順序讀(libaio)壓力測試,該測試命名為bw_read。輸出結果不按8個job分別展示,而是按照 group 匯總。這樣就可以得到在該壓力下該文件系統的順序讀帶寬

    李春 提交于 2019/11/14 17:49:34
    符隆美 確認于 2019/11/18 10:10:58
  • 頁碼:471  •  行數:24  •  印次: 1

    這里用8個線程對/data2/test1文件做持續時間為60s、隊列深度為1、塊大小為16k的direct異步混合隨機讀寫(libaio)壓力測試,讀寫比為7∶3,該測試命名為iops_randrw。輸出結果不按4個job分別展示,而是按照 group 匯總。這樣就可以得到在該壓力下該文件系統的混合隨機讀寫IOPS。

    修改成

    這里用8個線程對/data2/test1文件做持續時間為60s、隊列深度為1、塊大小為16k的direct異步混合隨機讀寫(libaio)壓力測試,讀寫比為7∶3,該測試命名為iops_randrw。輸出結果不按8個job分別展示,而是按照 group 匯總。這樣就可以得到在該壓力下該文件系統的混合隨機讀寫IOPS。

    李春 提交于 2019/11/14 17:57:01
    符隆美 確認于 2019/11/18 10:10:09

讀者評論

  • 這本書更多適合DBA,奈何我一個開發人員買了,看得云里霧里(可能是水平實在不夠吧)。PS:50包郵出此書。

    justdingqh發表于 2020/3/13 15:36:00
  • 第47頁, 倒數第 8 行:
    在連接者組件層創建連接, 分配線程, 并驗證 ….
    應該是 連接池 組件吧

    ouer1994發表于 2019/11/25 11:38:21
    • 謝謝您的反饋,我們會在重印時修改。

      符隆美發表于 2019/11/25 14:00:30

圖書類別

相關博文

  • 解讀MySQL性能調優“金字塔”

    解讀MySQL性能調優“金字塔”

    管理員賬號 2019-10-22

    計算機是一種實驗的科學 性能優化是實戰的藝術 蒸汽機的改進不是一蹴而就的,MySQL性能的改進也是貫穿整個MySQL發展史的。MySQL之父Monty在1981年寫了MySQL的第一行代碼以后,在開源的幫助下MySQL成長為目...

    管理員賬號 2019-10-22
    189 0 0 0

相關圖書

數據分析與量化投資——基于SAS的應用

林煜恩 (作者)

本書基于SAS EG平臺下,采用項目管理的過程流方式來介紹數據分析以及量化投資策略方法,書中提供了作者撰寫的autoexec命令文件,可讓SAS在運行時,就自帶...

 

DBA 手記——Oracle 數據安全的警示與原則

蓋國強 (作者)

本書以數據安全為主線將眾多災難挽救過程串聯在一起,不僅對各個案例的發生過程進行了詳細描述,更為讀者提供了具體的規避法則。其間穿插介紹了很多新鮮的技術細節和恢復方...

¥99.00

收獲,不止Oracle(第2版)

梁敬彬 (作者)

在這本書里,讀者將會跟隨作者一同對Oracle數據庫的相關知識進行梳理,最終共同提煉出必須最先掌握的那部分知識,無論你是數據庫開發、管理、優化、設計人員,還是從...

¥99.00

MySQL王者晉級之路

張甦 (作者)

目前大部分軟件開發平臺都基于Linux,很多互聯網公司都把MySQL作為后端數據存儲的數據庫。如果把MySQL比喻成數據庫界的一條巨龍,則本書涵蓋的所有知識點就...

¥79.00

高性能SQL調優精要與案例解析

閆書清 (作者)

本書共分為兩篇,基礎篇(第1 章~第10 章)介紹了SQL 調優應該具備和掌握的理論和方法,<br>實踐篇(第11 章)精選并深入解析了10 個現實中的實際案例...

¥69.00

Effective SQL:編寫高質量SQL語句的61條有效方法(英文版)

John L. Viescas; Douglas J. Steele;Ben G. Clothier (作者) (譯者)

本書全面系統地介紹了SQL語言各方面的基礎知識以及一些高級特性,包括SQL數據語言、SQL方案語言、數據集操作、子查詢以及內建函數與條件邏輯等內容。書中每個章節...

 
kof雅典娜赚钱方法中文 微乐白城麻将下载 国外博客网站 意甲球队实力排名 四川博雅麻将 刘伯温6374cm刘伯温+开奖1 通达信股票软件 熊猫麻将官方版在哪下 捕鱼欢乐炸 新股市大盘分析 幸运农场数字版