一套「MySQL性能优化金字塔法则」
咱今天的主題就是一套[MySQL性能優化金字塔法則],畢竟“好好學習,天天向上”“今天不學習,明天變垃圾呀”...
主題一:MySQL性能優化金字塔法則
這一套學習法則一共分為3篇:基礎篇、案例篇、工具篇
注:整套法則雖分為3篇,但總共卻有51章節(792頁)的內容,篇幅有限,這邊就不巨詳細的解說了,大致過一遍,后續還有MySQL相關的高頻面試解析+手寫筆記+自繪架構腦圖要討論一番。不論是哪一個,都可分享給感興趣認可的你,文末有領取方式!1.1 基礎篇
基礎篇的內容設計,旨在為大家普及一些在性能優化過程中可能使用到的MySQL基礎知識。為了方便大家對MySQL的體系結構和組件有一個整體認識:
- 首先,完整介紹MySQL的安裝、升級和整個體系組成結構,并介紹在MySQL運行過程中所有后臺線程的作用;
- 其次,由于在性能優化過程中需要依賴與表/索引相關的統計信息、事務鎖和表級鎖相關信息、在語句執行過程中的一些等待事件信息等,我們用14個章節重點介紹MySQL的4個系統庫:information_schema、mysql、performance_schema、sys,通過這些系統庫中記錄的MySQL的狀態和性能數據,讀者可以更精確地定位問題的根源,甚至定位到源碼的某一行;
- 最后,除在MySQL復制、事務和SQL優化章節介紹MySQL自身的優化基礎以外,還通過讀寫擴展的架構優化,拋磚引玉,希望引起讀者對架構優化的思考。
第1章 MySQL初始化安裝、簡單安全加固
第2章 MySQL常用的兩種升級方法
第3章 MySQL體系結構
第4章 performance_schema初相識
第5章 performance_schema配置詳解
第6章 performance_schema應用示例薈萃
第7章 sys系統庫初相識
第8章 sys系統庫配置表
第9章 sys系統庫應用示例薈萃
第10章 information_schema初相識
第11章 information_schema應用示例薈萃
第12章 mysql系統庫之權限系統表
第13章 mysql系統庫之訪問權限控制系統
第14章 mysql系統庫之統計信息表
第15章 mysql系統庫之復制信息表
第16章 mysql系統庫之日志記錄表
第17章 mysql系統庫應用示例薈萃
第18章 復制技術的演進
第19章 事務概念基礎
第20章 InnoDB鎖
第21章 SQL優化
第22章 MySQL讀寫擴展
1.2 案例篇
“案例篇”從硬件和系統、MySQL架構等方面給出了性能優化的十幾個案例,包括:性能測試的基本優化思路和最需要關注的性能指標解釋、對日常SQL語句執行慢的基本定位、避免x86可用性的一般性方法、節能模式會怎樣影響性能、I/O存儲作為數據庫最重要的依賴是如何影響數據庫性能的、主備復制不一致可能有哪些原因、字符集不一致會造成哪些性能問題、在實際場景中鎖的爭用是怎樣的。
MySQL性能優化金字塔法則——案例篇包含以下23-39這17個章節內容:第23章 性能測試指標和相關術語
第24章 歷史問題診斷和現場故障分析
第25章 性能調優金字塔
第26章 SQL語句執行慢真假難辨
第27章 如何避免三天兩頭換硬盤、內存、主板
第28章 每隔45天的MySQL性能低谷
第29章 MySQL連接無法自動釋放
第30章 查詢MySQL偶爾比較慢
第31章 MySQL最多只允許214個連接
第32章 MySQL掛起診斷思路
第33章 硬件和系統調優
第34章 并發刪除數據造成死鎖
第35章 刪除不存在的數據造成死鎖
第36章 插入意向鎖死鎖
第37章 分頁查詢優化
第38章 子查詢優化——子查詢轉換為連接
第39章 子查詢優化——使用delete刪除數據
1.3 工具篇
“工具篇”介紹了在MySQL性能優化過程中需要用到的各種工具,包括:dmidecode、top、dstat等硬件和系統排查工具;FIO、sysbench、HammerDB等壓力測試工具;mysqldump、XtraBackup等備份工具;Percona、innotop、Prometheus等監控工具
MySQL性能優化金字塔法則——工具篇包含以下40-51這12個章節內容:第40章 硬件規格常用查看命令詳解
第41章 系統負載常用查看命令詳解
第42章 FIO存儲性能壓測
第43章 HammerDB在線事務處理測試
第44章 sysbench數據庫壓測工具
第45章 mysqladmin和innotop工具詳解
第46章 利用Prometheus+Grafana搭建炫酷的MySQL監控平臺
第47章 Percona Toolkit常用工具詳解
第48章 MySQL主流備份工具之mysqldump詳解
第49章 MySQL主流備份工具之XtraBackup詳解
第50章 MySQL主流備份工具之mydumper詳解
第51章 MySQL主流閃回工具詳解
主題二:阿里P8MySQL面試題:基礎+索引+鎖+日志+調優(附答案)
2.1 基礎篇
- 1.說一下 MySQL 執行一條查詢語句的內部執行過程?
- 2.MySQL 提示“不存在此列”是執行到哪個節點報出的?
- 3.MySQL 查詢緩存的功能有何優缺點?
- 4.如何關閉 MySQL 的查詢緩存功能?
- 5.MySQL 的常用引擎都有哪些?
- 6.MySQL 可以針對表級別設置數據庫引擎嗎?怎么設置?
- 7.常用的存儲引擎 InnoDB 和 MyISAM 有什么區別?
- 8.InnoDB 有哪些特性?
- 9.一張自增表中有三條數據,刪除了兩條數據之后重啟數據庫,再新增一條數據,此時這條數據的 ID 是幾?
- 10.MySQL 中什么情況會導致自增主鍵不能連續?
- 11.InnoDB 中自增主鍵能不能被持久化?
- 12.什么是獨立表空間和共享表空間?它們的區別是什么?
- 13.如何設置獨立表空間?
- 14.如何進行表空間收縮?
- 15.說一下重建表的執行流程?
- 16.表的結構信息存在哪里?
- 17.什么是覆蓋索引?
- 18.如果把一個 InnoDB 表的主鍵刪掉,是不是就沒有主鍵,就沒辦法進行回表查詢了?
- 19.執行一個 update 語句以后,我再去執行 hexdump 命令直接查看 ibd 文件內容,為什么沒有看到數據有改變呢?
- 20.內存表和臨時表有什么區別?
- 21.并發事務會帶來哪些問題?
- 22.什么是臟讀和幻讀?
- 23.為什么會出現幻讀?幻讀會帶來什么問題?
- 24.如何避免幻讀?
- 25.如何查看 MySQL 的空閑連接?
- 26.MySQL 中的字符串類型都有哪些?
- 27.VARCHAR 和 CHAR 的區別是什么?分別適用的場景有哪些?
- 28.MySQL 存儲金額應該使用哪種數據類型?為什么?
- 29.limit 3,2 的含義是什么?
- 30.now() 和 current_date() 有什么區別?
- 31.如何去重計算總條數?
- 32.lastinsertid() 函數功能是什么?有什么特點?
- 33.刪除表的數據有幾種方式?它們有什么區別?
- 34.MySQL 中支持幾種模糊查詢?它們有什么區別?
- 35.MySQL 支持枚舉嗎?如何實現?它的用途是什么?
- 36.count(column) 和 count(*) 有什么區別?
- 37.以下關于 count 說法正確的是?
- 38.為什么 InnoDB 不把總條數記錄下來,查詢的時候直接返回呢?
- 39.能否使用 show table status 中的表行數作為表的總行數直接使用?為什么?
- 40.以下哪個 SQL 的查詢性能最高?
- 41.InnoDB 和 MyISAM 執行 select count(*) from t,哪個效率更高?為什么?
- 42.在 MySQL 中有對 count(*) 做優化嗎?做了哪些優化?
- 43.在 InnoDB 引擎中 count(*)、count(1)、count(主鍵)、count(字段) 哪個性能最高?
- 44.MySQL 中內連接、左連接、右連接有什么區別?
- 45.什么是視圖?如何創建視圖?
- 46.視圖有哪些優點?
- 47.MySQL 中“視圖”的概念有幾個?分別代表什么含義?
- 48.使用 delete 誤刪數據怎么找回?
- 49.Flashback 恢復數據的原理是什么?
2.2 索引篇
- 1.什么是索引?
- 2.索引分別有哪些優點和缺點?
- 3.以下 SQL 有什么問題?該如何優化?
- 4.為什么 MySQL 官方建議使用自增主鍵作為表的主鍵?
- 5.自增主鍵有哪些優缺點?
- 6.索引有幾種類型?分別如何創建?
- 7.主索引和唯一索引有什么區別?
- 8.在 InnDB 中主鍵索引為什么比普通索引的查詢性能高?
- 9.什么叫回表查詢?
- 10.如何查詢一張表的所有索引?
- 11.MySQL 最多可以創建多少個索引列?
- 12.以下 like 查詢會使用索引的是哪一個選項?為什么?
- 13.如何讓 like %abc 走索引查詢?
- 14.MySQL 聯合索引應該注意什么?
- 15.聯合索引的作用是什么?
- 16.什么是最左匹配原則?它的生效原則有哪些?
- 17.列值為 NULL 時,查詢會使用到索引嗎?
- 18.以下語句會走索引么?
- 19.能否給手機號的前 6 位創建索引?如何創建?
- 20.什么是前綴索引?
- 21.為什么要用前綴索引?
- 22.什么情況下適合使用前綴索引?
- 23.什么是頁?
- 24.索引的常見存儲算法有哪些?
- 25.InnoDB 為什么要使用 B+ 樹,而不是 B 樹、Hash、紅黑樹或二叉樹?
- 26.為什么 InnoDB 要使用 B+ 樹來存儲索引?
- 27.唯一索引和普通索引哪個性能更好?
- 28.優化器選擇查詢索引的影響因素有哪些?
- 29.MySQL 是如何判斷索引掃描行數的多少?
- 30.MySQL 是如何得到索引基數的?它準確嗎?
- 31.MySQL 如何指定查詢的索引?
- 32.在 MySQL 中指定了查詢索引,為什么沒有生效?
- 33.以下 or 查詢有什么問題嗎?該如何優化?
- 34.以下查詢要如何優化?
- 35.MySQL 會錯選索引嗎?
- 36.如何解決 MySQL 錯選索引的問題?
- 37.如何優化身份證的索引?
2.3 鎖篇
- 1.什么是鎖?MySQL 中提供了幾類鎖?
- 2.什么是死鎖?
- 3.常見的死鎖案例有哪些?
- 4.如何處理死鎖?
- 5.如何查看死鎖?
- 6.如何避免死鎖?
- 7.InnoDB 默認是如何對待死鎖的?
- 8.如何開啟死鎖檢測?
- 9.什么是全局鎖?它的應用場景有哪些?
- 10.什么是共享鎖?
- 11.什么是排它鎖?
- 12.使用全局鎖會導致什么問題?
- 13.如何處理邏輯備份時,整個數據庫不能插入的情況?
- 14.如何設置數據庫為全局只讀鎖?
- 15.除了 FTWRL 可以設置數據庫只讀外,還有什么別的方法?
- 16.FTWRL 和 set global readonly=true 有什么區別?
- 17.如何實現表鎖?
- 18.悲觀鎖和樂觀鎖有什么區別?
- 19.樂觀鎖有什么優點和缺點?
- 20.InnoDB 存儲引擎有幾種鎖算法?
- 21.InnoDB 如何實現行鎖?
- 22.優化鎖方面你有什么建議?
2.4 日志篇
- 1.MySQL 有哪些重要的日志文件?
- 2.redo log 和 binlog 有什么區別?
- 3.什么是 crash-safe?
- 4.什么是臟頁和干凈頁?
- 5.什么情況下會引發 MySQL 刷臟頁(flush)的操作?
- 6.MySQL 刷臟頁的速度很慢可能是什么原因?
- 7.如何控制 MySQL 只刷新當前臟頁?
- 8.MySQL 的 WAL 技術是解決什么問題的?
- 9.為什么有時候會感覺 MySQL 偶爾卡一下?
- 10.redo log 和 binlog 是怎么關聯的?
- 11.MySQL 怎么知道 binlog 是完整的?
- 12.MySQL 中可不可以只要 binlog,不要 redo log?
- 13.MySQL 中可不可以只要 redo log,不要 binlog?
- 14.為什么 binlog cache 是每個線程自己維護的,而 redo log buffer 是全局共用的?
- 15.事務執行期間,還未提交,如果發生 crash,redo log 丟失,會導致主備不一致呢?
- 16.在 MySQL 中用什么機制來優化隨機讀/寫磁盤對 IO 的消耗?
- 17.以下說法錯誤的是?
- 18.以下說法正確的是?
- 19.有沒有辦法把 MySQL 的數據恢復到過去某個指定的時間節點?怎么恢復?
- 20.MySQL命令和內置函數篇
- 21.如何用命令行方式連接 MySQL 數據庫?
- 22.關于命令 mysql -h 127.0.0.1 -uroot -P 3307 -p3307 以下說法錯誤的是?
- 23.如何創建用戶?并給用戶授權?
- 24.如何修改 MySQL 密碼?
- 25.如何使用 SQL 創建數據庫,并設置數據庫的編碼格式?
- 26.如何修改數據庫、表的編碼格式?
- 27.如何使用 SQL 創建表?
- 28.在 MySQL 命令行中如何查看表結構信息?
- 29.如何使用 SQL 查看已知表的建表腳本?
- 30.如何使用 SQL 語句更新表結構?
- 31.MySQL 有哪些刪除方式?有什么區別?
- 32.如何開啟和關閉 MySQL 服務?
- 33.如何查詢當前 MySQL 安裝的版本號?
- 34.如何查看某張表的存儲引擎?
- 35.如何查看當前數據庫增刪改查的執行次數統計?
- 36.如何查詢線程連接數?
- 37.如何查看 MySQL 的最大連接數?能不能修改?怎么修改?
- 38.CHAR_LENGTH 和 LENGTH 有什么區別?
- 39.UNION 和 UNION ALL 的用途是什么?有什么區別?
- 40.以下關于 WHERE 和 HAVING 說法正確的是?
- 41.空值和 NULL 的區別是什么?
- 42.MySQL 的常用函數有哪些?
2.5 優化篇
- 1.MySQL 性能指標都有哪些?如何得到這些指標?
- 2.什么是慢查詢?
- 3.如何開啟慢查詢日志?
- 4.如何定位慢查詢?
- 5.MySQL 的優化手段都有哪些?
- 6.MySQL 常見讀寫分離方案有哪些?
- 7.介紹一下 Sharding-JDBC 的功能和執行流程?
- 8.什么是 MySQL 多實例?如何配置 MySQL 多實例?
- 9.怎樣保證確保備庫無延遲?
問題太多,答案解析也有64頁,不過已整理~
主題三:MySQL王者晉級之路
分為7篇:青銅-白銀-黃金-鉑金-鉆石-星耀-王者
最后:個人理解:手繪MySQL架構知識體系圖
?
以上就是小編所要給大家分享的全部MySQL真香筆記:
- MySQL性能優化金字塔法則
- 阿里P8MySQL面試解析:基礎+索引+鎖+日志+調優
- MySQL王者晉級之路
- 手繪MySQL架構知識體系圖
如果你也正在學習,那就不廢話了,如果需要可以找小編
還請多多關注free領取方式:轉發+轉發(轉發支持一下)
總結
以上是生活随笔為你收集整理的一套「MySQL性能优化金字塔法则」的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android精准计步器
- 下一篇: ASP.NET Zero--5.配置权限