【高并发高性能高可用之海量数据MySQL实战】-提纲目录-不断更新中...
1:引言
你是否遇到以下問題?
1:查詢優化中不要select *,要用in,不能用or,為什么?
2:數據量大之后分庫分表,那拆分規則是什么?怎么處理后續問題?
3:數據庫掛了怎么處理?萬能重啟之法,然后聽天由命?
4:先拆分還是先做集群,主從復制如何處理主庫從庫數據不一致?
你該如何解決的?
遇事不決量子力學?東一槍西一炮?
2:概述
????????本人在開課吧學習的數據庫相關的課程已告一段落。?
????????從今天開始將基于最新的MySQL 8.0版本對MySQL從架構,存儲引擎,事務管理,索引實現原理,各種鎖機制原理全方位,多角度進行刨析。
????????以解決實戰生產問題為目的,對MySQL性能,優化,分庫分表,故障處理等等進行講解。
????????既是對課程筆記的整理,也是自己對學習成果的復盤。
3:課程主體
【高并發高性能高可用之海量數據MySQL實戰-1】-MySQL 8.0安裝:操作系統:CentOS 7,MySQL:8.0。
【高并發高性能高可用之海量數據MySQL實戰-2】-MySQL文件結構:MySQL是通過文件系統對數據和索引進行存儲的。MySQL從物理結構上可以分為日志文件和數據索引文件。
【高并發高性能高可用之海量數據MySQL實戰-3】-MySQL邏輯架構圖:邏輯結構分為Server層與存儲引擎層。
【高并發高性能高可用之海量數據MySQL實戰-4】-InnoDB存儲引擎之磁盤結構:InnoDB的主要的磁盤文件主要分為三大塊:一是表空間,二是雙寫緩沖區,三是重做日志,數據字典表空間。
【高并發高性能高可用之海量數據MySQL實戰-5】-InnoDB存儲引擎之內存結構:內存結構:包括緩沖池(buffer pool),修改緩存區(change buffer),自適應hash,Log Buffer重做日志緩沖。
【高并發高性能高可用之海量數據MySQL實戰-6】-MySQL自適應哈希索引:哈希(hash)是一種非常快的查找方法,在一般情況下這種查找的時間復雜度為O(1),即一般僅需要一次查找就能定位數據。InnoDB存儲引擎會監控對表上各索引頁的查詢。如果觀察到建立哈希索引可以帶來速度提升,則建立哈希索引,稱之為自適應哈希索引(Adaptive Hash Index,AHI) 。
【高并發高性能高可用之海量數據MySQL實戰-7】-內存數據落盤:WAL要求數據的變更寫入到磁盤前,首先必須將內存中的日志寫入到磁盤;當一個事務提交時,所有產生的日志都必須刷新到磁盤上。
【高并發高性能高可用之海量數據MySQL實戰-8】-InnoDB的事務隔離機制:事務是數據庫最為重要的機制之一,凡是使用過數據庫的人,都了解數據庫的事務機制,也對ACID四個基本特性如數家珍。但是聊起事務或者ACID的底層實現原理,往往言之不詳,不明所以。在MySQL中的事務是由存儲引擎實現的,而且支持事務的存儲引擎不多,我們主要講解InnoDB存儲引擎中的事務。
【高并發高性能高可用之海量數據MySQL實戰-9】-事務并發控制解決方案LBCC與MVCC:兩個事務針對同一數據都發生修改操作時,會存在丟失更新問題。什么是LBCC,什么是MVCC,該如何選擇?
【高并發高性能高可用之海量數據MySQL實戰-10】-InnoDB中MVCC的實現原理解讀:MVCC是用于數據庫提供并發訪問控制的并發控制技術。MVCC最大的好處,讀不加鎖,讀寫不沖突。在讀多寫少的OLTP應用中,讀寫不沖突是非常重要的,極大的增加了系統的并發性能,這也是為什么現階段,幾乎所有的RDBMS,都支持了MVCC。MVCC 在mysql 中的實現依賴的是 undo log 與 read view 。
【高并發高性能高可用之海量數據MySQL實戰-11】-基于 MVCC 實現事務的隔離級別:mvcc 只支持 RC 和 RR 兩種事務隔離級別。READ COMMITTED,讀已提交,每次讀取數據前都生成一個ReadView。REPEATABLE READ,可重復讀,在事務開始后第一次讀取數據時生成一個ReadView。
【高并發高性能高可用之海量數據MySQL實戰-12】-MVCC下的讀操作:在MVCC并發控制中,讀操作可以分成兩類:快照讀 (snapshot read)與當前讀 (current read)。快照讀:讀取的是記錄的可見版本 (有可能是歷史版本),不用加鎖。當前讀:讀取的是記錄的最新版本,并且當前讀返回的記錄,都會加上鎖,保證其他事務不會再并發修改這條記錄。
【高并發高性能高可用之海量數據MySQL實戰-13】-事務回滾和數據恢復:事務的隔離性由多版本控制機制和鎖實現,而原子性,持久性和一致性主要是通過redo log、undo log和Force Log at Commit機制機制來完成的。redo log用于在崩潰時恢復數據,undo log用于對事務的影響進行撤銷,也可以用于多版本控制。而Force Log at Commit機制保證事務提交后redo log日志都已經持久化。
【高并發高性能高可用之海量數據MySQL實戰-14】-MySQL索引-二叉查找樹-紅黑樹-B樹-B+樹:檢索效率:可以提高數據檢索的效率,降低數據庫的IO成本,類似于書的目錄。快速排序:通過索引列對數據進行排序,降低數據排序的成本,降低了CPU的消耗。被索引的列會自動進行排序,包括【單列索引】和【組合索引】,只是組合索引的排序要復雜一些。如果按照索引列的順序進行排序,對應order by語句來說,效率就會提高很多。
【高并發高性能高可用之海量數據MySQL實戰-15】-MySQL索引實現:主要是對MyISAM索引與InnoDB索引進行拆解。
【高并發高性能高可用之海量數據MySQL實戰-16】-MySQL索引創建原則:哪些情況需要創建索引,?頻繁出現在where 條件字段,order排序,group by分組字段;select 頻繁查詢的列,考慮是否需要創建聯合索引(覆蓋索引,不回表);?多表join關聯查詢,on字段兩邊的字段都要創建索引。
【高并發高性能高可用之海量數據MySQL實戰-17】-MySQL索引優化失效分析實戰:對10種不同使用場景中索引失效進行拆解分析。
【高并發高性能高可用之海量數據MySQL實戰-18】-MySQL全局鎖|表級鎖|行鎖:數據庫為多用戶共享的,當出現并發訪問的時候,需要使用鎖來控制資源的訪問。根據加鎖的范圍,MySQL里面的鎖大致可以分成全局鎖、表級鎖和行鎖三類。
【高并發高性能高可用之海量數據MySQL實戰-19】-MySQL鎖原理分析實戰:按照鎖的粒度來說,MySQL主要包含三種類型(級別)的鎖定機制:全局鎖:鎖的是整個database。由MySQL的SQL layer層實現的表級鎖:鎖的是某個table。由MySQL的SQL layer層實現的。行級鎖:鎖的是某行數據,也可能鎖定行之間的間隙。由某些存儲引擎實現,比如InnoDB。按照鎖的功能來說分為:共享鎖和排他鎖。
【高并發高性能高可用之海量數據MySQL實戰-20】-MySQL行鎖分析實戰:在介紹完一些背景知識之后,接下來將選擇幾個有代表性的例子,來詳細分析MySQL的加鎖處理。當然,還是從最簡單的例子說起。經常有朋友發給我一個SQL,然后問我,這個SQL加什么鎖?就如同下面兩條簡單的SQL,他們加什么鎖?
【高并發高性能高可用之海量數據MySQL實戰-21】-一條復雜SQL的加鎖實戰分析:一條SQL語句會加什么鎖?假定在Repeatable Read隔離級別下會走什么索引。在詳細分析這條SQL的加鎖情況前,還需要有一個知識儲備,那就是一個SQL中的where條件如何拆分? ?
【高并發高性能高可用之海量數據MySQL實戰-22】-MySQL死鎖原理與分析:深入理解MySQL如何加鎖,有兩個比較重要的作用:可以根據MySQL的加鎖規則,寫出不會發生死鎖的SQL;可以根據MySQL的加鎖規則,定位出線上產生死鎖的原因。
【高并發高性能高可用之海量數據MySQL實戰-23】-MySQL性能優化之慢查詢日志:數據庫查詢快慢是影響項目性能的一大因素,對于數據庫,我們除了要優化 SQL,更重要的是得先找到需要優化的SQL。MySQL數據庫有一個“慢查詢日志”功能,用來記錄查詢時間超過某個設定值的SQL語句,這將極大程度幫助我們快速定位到癥結所在,以便對癥下藥。
【高并發高性能高可用之海量數據MySQL實戰-24】-MySQL性能優化之查看執行計劃:MySQL 提供了一個 EXPLAIN 命令, 它可以對 SELECT 語句的執行計劃進行分析, 并輸出 SELECT 執行的詳細信息, 以供開發人員針對性優化.使用explain這個命令來查看一個這些SQL語句的執行計劃,查看該SQL語句有沒有使用上了索引,有沒有做全表掃描,這都可以通過explain命令來查看。
【高并發高性能高可用之海量數據MySQL實戰-25】-MySQL性能優化之Query Profiler分析語句:Query Profiler是MySQL自帶的一種query診斷分析工具,通過它可以分析出一條SQL語句的硬件性能瓶頸在什么地方。通常我們是使用的explain,以及slow query log都無法做到精確分析,但是QueryProfiler卻可以定位出一條SQL語句執行的各種資源消耗情況,比如CPU,IO等,以及該SQL執行所耗費的時間等。不過該工具只有在MySQL 5.0.37以及以上版本中才有實現。
【高并發高性能高可用之海量數據MySQL實戰-26】-MySQL性能優化之索引及SQL語句優化:表記錄很少不需創建索引 , 一個表的索引個數不能過多,頻繁更新的字段不建議作為索引,區分度低的字段,不建議建索引,在InnoDB存儲引擎中,主鍵索引建議使用自增的長整型,避免使用很長的字段,不建議用無序的值作為索引, 盡量創建組合索引,而不是單列索引。
【高并發高性能高可用之海量數據MySQL實戰-27】-MySQL服務器層面優化:將數據保存在內存中,保證從內存讀取數據。設置足夠大的innodb_buffer_pool_size ,將數據讀取到內存中。
4:寄語
????????再緊張的裁員氛圍,也不該影響你學習的心態。不要本末倒置,技術永遠不會落后,只要你還在學習的道路上,沒有后退。
5:參考
開課吧-在線職業教育
總結
以上是生活随笔為你收集整理的【高并发高性能高可用之海量数据MySQL实战】-提纲目录-不断更新中...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第十四题: 以下代码的输出结果是?
- 下一篇: 设计模式 之 抽象工厂模式