MySQL 8查詢性能優化 ( 簡體 字) |
作者:[澳] 杰斯帕·威斯堡·克羅(Jesper Wisborg Krogh) 著 史躍東 楊欣 殷海英 譯 | 類別:1. -> 資料庫 -> MySQL |
譯者: |
出版社:清華大學出版社 | 3dWoo書號: 55186 詢問書籍請說出此書號!【缺書】 NT售價: 790 元 |
出版日:8/1/2021 |
頁數:559 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787302583912 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:MySQL性能優化是一個非常大的主題,人們通常需要花費數年時間才能掌握。《MySQL 8查詢性能優化》的篇幅就證明了這一點,即使只專注與查詢相關的優化主題,篇幅顯然就不小了。一般而言,沒有什么簡單方法可以輕松地提升性能,恰恰相反,要找到相關的解決方法,你不僅需要了解MySQL內部各部分之間的關系,還需要了解相關技術棧其他部分的內容。如果你覺得單單在性能優化方面就很難入門,那么第一步你就跨不過去。但是,請不要對性能優化感到失望,與其他技巧一樣,也可以通過實踐逐步成為性能優化高手。 撰寫《MySQL 8查詢性能優化》的目的在于,使你能在MySQL性能優化方面登堂入室,從而熟練掌握如何提升在MySQL實例上運行的那些查詢的性能。如前所述,這沒有什么簡單秘方,最佳辦法就是學習并了解性能優化過程中涉及的各個組件。這也是《MySQL 8查詢性能優化》的主要內容,當然,我們也提供了如何找到相關信息,以及如何執行一些常見任務的示例。另外,《MySQL 8查詢性能優化》的內容僅限于對MySQL本身的探討,因此關于操作系統、文件系統以及硬件級別的內容,就相對有限了。 眾所周知,MySQL以對各種存儲引擎的支持而聞名。但除了對內部臨時表相關的探討外,《MySQL 8查詢性能優化》只介紹InnoDB存儲引擎。而對于MySQL的版本,則只考慮MySQL 8。也就是說,《MySQL 8查詢性能優化》中的大部分討論內容雖然也適用于舊版本的MySQL,但通常也只是為了說明MySQL 8中的新特性與舊版本的不同之處罷了。 《MySQL 8查詢性能優化》面向的讀者 《MySQL 8查詢性能優化》是為那些具有豐富的MySQL數據庫使用經驗,并希望將知識擴展到查詢性能優化領域的開發人員和數據庫管理員而編寫的。當然,在閱讀《MySQL 8查詢性能優化》之前,你不需要具備性能優化的相關經驗。 在撰寫《MySQL 8查詢性能優化》的過程中,作者嘗試添加了盡可能多的示例代碼及其輸出結果。當然,有些示例很短,有些則很長。但無論哪種情況,作者都希望讀者能夠跟上并重現這些示例的結果。同時請記住,由于實際環境的差異(當然,這種差異和索引統計信息一樣明確),示例結果可能會取決于在示例之前,相關的表和數據的獲取方式。換句話說,即使讀者完成了所有工作,得到的結果仍然可能與《MySQL 8查詢性能優化》中的結果不同。尤其是涉及索引統計信息以及與計時等相關的數字時。 讀者可掃封底的二維碼,下載《MySQL 8查詢性能優化》的示例代碼。 《MySQL 8查詢性能優化》結構 《MySQL 8查詢性能優化》分為6部分,共計27章。在撰寫《MySQL 8查詢性能優化》時,作者試圖讓每章的內容都保持相對獨立,以便讀者將《MySQL 8查詢性能優化》用作參考書。當然,這樣做的缺點之一是有時會重復出現某些內容。例如第18章介紹了鎖的理論方面的一些知識,以及如何對鎖進行監控;而第22章則提供鎖爭用的一些示例。因此,第22章很自然會借鑒第18章中的部分信息,因此出現了一些內容上的重復。這是一個有意識的行為,作者希望各位讀者在閱讀《MySQL 8查詢性能優化》的過程中可以減少翻頁的次數,盡快找到所需內容。 在閱讀過程中,《MySQL 8查詢性能優化》的6部分將引導你逐步完成性能優化主題的相關探討。我們先從一些基本的背景知識開始,然后給出面向問題的解決方案。第Ⅰ部分將探討相關的方法論、基準以及測試數據。第Ⅱ部分重點介紹各種信息來源,如performance庫等。第Ⅲ部分介紹《MySQL 8查詢性能優化》將用到的各種工具,如MySQL shell。第Ⅳ部分則提供后面兩部分將用到的理論知識。第Ⅴ部分側重分析查詢、事務以及鎖。第Ⅵ部分則探討如何通過配置、查詢優化、復制以及緩存等技術來提升性能。某些情況下,有些內容的編排可能較特殊,例如,所有關于復制的內容都包含在單獨一章中(即第26章)。 第Ⅰ部分 入門 第Ⅰ部分介紹MySQL查詢性能優化的相關概念,包括一些高級注意事項等。其中一些并非MySQL所獨有(不過也是在MySQL上下文中進行探討的)。第Ⅰ部分包含4章。 第1章“MySQL性能優化”——該章涵蓋MySQL性能優化的一些高級概念,例如考慮整個堆棧和查詢生命周期的重要性等。 第2章“查詢優化方法論”——以有效方式解決性能問題至關重要。該章介紹有效工作的方法論,并強調積極工作的重要性。 第3章“使用Sysbench進行基準測試”——通常,我們需要使用基準測試來檢驗更改效果。該章將簡要介紹基準測試,并專門探討Sysbench工具,也包括如何創建自定義基準測試等內容。 第4章 “測試數據”——列出《MySQL 8查詢性能優化》主要使用的一些標準測試數據庫。 第Ⅱ部分 信息來源 MySQL會通過一些信息來源提供有關性能的信息。在該部分,將介紹performance庫、sys庫、information庫以及SHOW語句。雖然在該部分中使用這些信息來源的例子相對較少,但在《MySQL 8查詢性能優化》其他部分,則廣泛使用了這四個信息來源。如果你對這些信息來源還不太熟悉,我們強烈建議你詳細閱讀該部分中的各個章節。此外,該部分還包含慢查詢日志的相關內容。第Ⅱ部分共包含5章。 第5章“performance庫”——顧名思義,MySQL中與性能相關的信息的主要來源是performance庫。該章介紹相關的術語、基本概念、組織方式以及配置信息。 第6章“sys庫”——通過存儲過程和函數中的預定義視圖和工具,sys庫提供了各種報告信息。該章對sys庫各種可用的特性進行了概述。 第7章“information庫”——如果想獲得關于MySQL和數據庫的元數據信息,就需要查看information庫。該庫還包含用于性能優化的重要信息,例如關于索引、索引統計以及直方圖等信息。該章將概述sys庫中可用的視圖。 第8章“SHOW 語句”——這是獲取信息的最古老方法,可通過它獲得從執行查詢到庫的各級別信息。該章將SHOW語句與information庫和performance庫相關聯,并在某種程度上更詳細地介紹SHOW語句。而SHOW語句的某些內容,在information庫和performance庫中是沒有對應內容的。 第9章“慢查詢日志”——查找慢查詢的傳統方法,就是將其記錄到慢查詢日志中。該章將介紹如何配置慢查詢日志,如何讀取日志事件,以及如何使用mysqldump這一實用工具對事件進行聚合等。 第Ⅲ部分 工具 MySQL提供一些在執行日常任務以及特定任務時非常有用的工具。該部分涵蓋與監控和簡單查詢執行相關的三種工具。《MySQL 8查詢性能優化》將Oracle專用的MySQL監控解決方案作為監控示例。即使你當前正在使用其他監控解決方案,也建議你研究一下這個示例。因為這些不同的解決方案之間往往有一些重疊之處。此外,《MySQL 8查詢性能優化》其余部分也廣泛使用了這三種工具。該部分包含3章。 第10章“MySQL Enterprise Monitor”——監控是保證數據庫穩定運行且性能良好的最重要內容之一。該章將介紹MySQL Enterprise Monitor(MEM),并說明如何安裝試用版本,以及如何進行導航和使用圖形化用戶界面等。 第11章“MySQL Workbench”——MySQL通過MySQL Workbench為用戶提供圖形化界面。該章將介紹如何安裝和使用這一工具。在《MySQL 8查詢性能優化》中,MySQL Workbench對創建查詢執行計劃的可視化圖形(稱為Visual Explain,可視化解釋)至關重要。 第12章“MySQL shell”——Oracle為MySQL推出的最新工具之一就是MySQL shell。它是第二代的命令行客戶端,支持在SQL、Python以及JavaScript模式下執行代碼。該章將使你快速了解這一工具,并介紹該工具對外部代碼模塊的支持,分析該工具的報告基礎結構,以及如何創建自定義模塊、報告和插件等。 第Ⅳ部分 方案考量與查詢優化器 在該部分中,介紹內容的節奏稍有改變。重點從與方案、查詢優化器和鎖相關的主題,逐步轉移到性能優化的主題上。該部分包含6章。 第13章“數據類型”——在關系數據庫中,每列都有各自的數據類型。數據類型定義了各列能夠存儲的值,兩個值進行比較時所遵循的規則,以及數據的存儲方式等。該章介紹MySQL中可用的各種數據類型,并提供應該使用何種數據類型的指導信息。 第14章“索引”——索引用于查找數據。而良好的索引可以極大地提升查詢的性能。該章介紹索引的概念、關于索引的注意事項、索引類型以及索引的特性等。此外,介紹了InnoDB如何使用索引,以及應該使用何種索引策略等。 第15章“索引統計信息”——當優化器需要確定索引的有用程度以及與索引值上的條件相匹配的行數時,就需要關于索引中的數據的相關信息,即索引統計信息。該章介紹索引統計信息在MySQL中的工作方式,以及如何對其進行配置、監控和更新。 第16章“直方圖”——如果希望優化器知道給定列中值出現的頻率,則需要創建直方圖。這是MySQL 8中新添加的特性。該章將介紹如何使用直方圖,其內部結構如何,以及如何查詢直方圖的元數據和統計信息等。 第17章“查詢優化器”——在執行查詢時,優化器會決定查詢的執行方式。該章將介紹優化器要完成的任務、使用的聯接算法、聯接優化、優化器相關配置以及資源組等內容。 第18章“鎖原理與監控”——最容易給人帶來挫敗感的問題之一就是鎖爭用。該章首先說明數據庫為何需要鎖、鎖的訪問級別以及鎖的類型(粒度);然后介紹在無法獲得鎖時,如何減少鎖爭用,以及可在何處找到鎖相關的信息。 第Ⅴ部分 查詢分析 有了第Ⅳ部分的信息,現在就可對查詢進行分析了。這包括如何查找查詢,從而進行下一步的分析,然后使用EXPLAIN或performance庫分析等。當你有兩個或者兩個以上的查詢來爭用相同的鎖時,還需要考慮事務是如何工作的,并對鎖爭用問題進行調查。該部分包含4章。 第19章“查找待優化的查詢”——無論是將其作為日常運維的一部分,還是在緊急狀況下,你都需要查找那些需要分析和優化的查詢。該章將介紹如何使用performance庫、sys庫、MySQL Workbench、監控解決方案以及慢查詢日志等工具來查找那些值得研究的查詢。 第20章“分析查詢”——有了候選查詢后,就需要分析為何執行速度慢或給系統造成如此大的影響。這里用到的主要工具是EXPLAIN,該命令可提供有關優化器選擇的查詢計劃的相關信息。如何使用EXPLAIN生成和理解查詢(包括示例)計劃是該章的重點。也可使用優化器跟蹤程序來獲取有關優化器如何選擇某一查詢的更多信息。分析查詢的另一種方法是使用performance庫和sys庫將查詢分解為較小的部分。 第21章“事務”——InnoDB將所有執行操作視作事務,并且事務是一個極為重要的概念。正確使用事務可以確保原子性、一致性和隔離性。但是,事務也可能導致嚴重的性能和鎖爭用問題。該章探討事務為何成為問題,以及如何分析事務。 第22章“診斷鎖爭用”——該章介紹了四種鎖爭用的場景(刷新鎖、元數據鎖、記錄鎖以及死鎖),并探討這四種鎖的癥狀、形成原因、重建場景的方式、調查、解決方案以及預防方式等。 第Ⅵ部分 提升查詢性能 現在,你已經找到有問題的查詢,并對其進行分析,包括事務情況,以了解表現不佳的原因。但是,你應該如何改善查詢呢?該部分介紹其他章節未涵蓋的重要配置選項,以及如何改變查詢計劃、改變方案等,同時包含批量加載、復制以及緩存等相關知識。該部分包含5章。 第23章“配置”——MySQL在執行查詢時需要系統資源。該章將介紹配置這些資源的最佳實踐,以及其他討論中未曾介紹的一些重要配置選項。同時對InnoDB中的數據生命周期做了概述,將其作為探討InnoDB配置的背景知識。 第24章“改變查詢計劃”——盡管優化器通常在找到最佳查詢執行計劃方面表現不錯,但你依然需要不時為其提供幫助。例如,可能是因為沒有索引,或現有索引無法使用等,導致全表掃描的出現。你可能還想提高索引的使用率,或者可能需要重寫某個復雜條件甚至整個查詢等。該章將仔細介紹這些內容,同時說明了如何使用SKIP LOCKED子句來實現隊列系統。 第25章“DDL與批量數據加載”——在執行方案更改,或將大數據集加載到系統中時, MySQL需要完成大量工作。該章將探討如何提升這類任務的性能,包括使用MySQL shell的并行數據加載特性等。該章也包含關于數據加載注意事項的內容,這通常也適用于數據修改操作。此外,我們也顯示了順序插入和隨機插入之間的不同之處。在完成此探討后,我們就知道選擇主鍵對性能來說意味著什么。 第26章“復制”——在實例之間進行數據復制是MySQL的一項頗為流行的特性。從性能的角度看,復制包含兩方面的內容:首先,你需要確保復制操作性能良好,此外,可通過復制來提升系統性能。該章探討這兩方面的內容,介紹用于監控復制的performance庫表。 第27章“緩存”——提升查詢性能的終極方法是根本不執行查詢,或至少避免執行某部分查詢。該章將探討如何使用緩存表來降低查詢的復雜性,以及如何使用Memcached、MySQL InnoDB Memcached插件和ProxySQL來避免查詢的完全執行。 下載示例代碼和彩色圖片 《MySQL 8查詢性能優化》正文中,有些地方會提到圖中標記、箭頭或區域的顏色。《MySQL 8查詢性能優化》是黑白印刷,無法顯示彩色。讀者可在實際界面中查看確切的顏色。另外,可掃描封底二維碼,下載示例代碼和彩色圖片。 |
內容簡介:● 監控性能,找出效果不佳的查詢 ● 選取要優化的查詢,**限度地提高收益 ● 使用EXPLAIN ANALYZE和Visual Explain等工具來分析查詢 ● 借助多種策略改進慢查詢 ● 正確使用索引和直方圖,創建快速的執行計劃 ● 了解并分析鎖,從而解決爭用問題,提升系統吞吐量 |
目錄:第Ⅰ部分入門 第1章MySQL性能優化2 1.1通盤考慮2 1.2監控3 1.3查詢的生命周期4 1.4本章小結5 第2章查詢優化方法論6 2.1綜述6 2.2核實問題7 2.3確定原因8 2.4確定解決方案8 2.5實施解決方案8 2.6主動工作10 2.7本章小結11 第3章使用Sysbench進行基準測試12 3.1最佳實踐12 3.2標準TPC基準測試14 3.3通用的基準測試工具14 3.4安裝Sysbench15 3.5執行基準測試20 3.6創建自定義基準測試25 3.6.1自定義腳本概述25 3.6.2定義選項27 3.6.3run命令27 3.6.4prepare命令29 3.6.5cleanup命令31 3.6.6注冊命令31 3.7本章小結32 第4章測試數據34 4.1下載示例數據庫34 4.2world數據庫35 4.2.1方案35 4.2.2安裝36 4.3world_x數據庫36 4.3.1方案36 4.3.2安裝36 4.4sakila數據庫37 4.4.1方案37 4.4.2安裝40 4.5employees數據庫41 4.5.1方案41 4.5.2安裝43 4.6其他數據庫44 4.7本章小結44 第Ⅱ部分信息來源 第5章performance庫46 5.1術語46 5.2線程47 5.3instrument50 5.4消費者51 5.5事件53 5.5.1事件類型53 5.5.2事件范圍53 5.5.3事件嵌套54 5.5.4事件屬性55 5.6Actor與對象56 5.7摘要56 5.8表類型57 5.9動態配置58 5.10本章小結59 第6章sys庫61 6.1sys庫配置62 6.2格式化函數64 6.3視圖65 6.4輔助函數與過程66 6.5本章小結67 第7章information庫68 7.1何為information庫68 7.2權限69 7.3視圖69 7.3.1系統信息69 7.3.2方案信息70 7.3.3性能信息74 7.3.4權限信息77 7.4索引統計數據緩存78 7.5本章小結79 第8章SHOW語句80 8.1與information庫的關系81 8.2與performance庫的關系82 8.3引擎狀態83 8.4復制與二進制日志84 8.4.1列出二進制日志84 8.4.2查看日志事件84 8.4.3顯示連接的副本87 8.5其他語句88 8.6本章小結90 第9章慢查詢日志92 9.1配置93 9.2日志事件95 9.3匯總96 9.4本章小結98 第Ⅲ部分工具 第10章MySQLEnterpriseMonitor100 10.1概述100 10.2安裝102 10.2.1下載102 10.2.2安裝104 10.3啟動和停止ServiceManager109 10.3.1在MicrosoftWindows中啟動和停止ServiceManager109 10.3.2在Linux中啟動和停止ServiceManager110 10.4添加MySQL實例111 10.5圖形管理界面113 10.5.1通用導航113 10.5.2建議器114 10.5.3時序圖116 10.5.4查詢分析器117 10.6本章小結118 第11章MySQLWorkbench119 11.1安裝120 11.1.1MicrosoftWindows120 11.1.2EnterpriseLinux7124 11.1.3Debian和Ubuntu127 11.2創建連接129 11.3使用MySQLWorkbench130 11.3.1概要130 11.3.2配置131 11.3.3安全設置133 11.3.4重新格式化查詢133 11.4EER圖134 11.5本章小結135 第12章MySQLshell136 12.1概要136 12.1.1安裝MySQLshell137 12.1.2調用MySQLshell137 12.1.3創建連接137 12.1.4語言模式139 12.1.5內建幫助140 12.1.6內建全局對象141 12.2提示符141 12.2.1內置提示符141 12.2.2自定義提示符143 12.2.3Powerline和Awesome字體145 12.3使用外部模塊146 12.4報表基礎架構148 12.4.1報表信息和幫助148 12.4.2執行報表149 12.4.3添加自己的報表151 12.5插件155 12.6本章小結161 第Ⅳ部分方案考量與查詢優化器 第13章數據類型164 13.1為何是數據類型164 13.1.1數據驗證165 13.1.2文檔166 13.1.3優化存儲166 13.1.4性能167 13.1.5正確排序167 13.2MySQL的數據類型167 13.2.1數值類型168 13.2.2日期和時間類型169 13.2.3字符串與二進制類型169 13.2.4JSON數據類型171 13.2.5空間數據類型172 13.2.6混合數據類型173 13.3性能174 13.4應該選擇何種數據類型174 13.5本章小結176 第14章索引177 14.1什么是索引177 14.2索引的概念178 14.2.1鍵與索引178 14.2.2唯一索引178 14.2.3主鍵179 14.2.4二級索引180 14.2.5簇聚索引180 14.2.6覆蓋索引180 14.3索引的限制181 14.4SQL語法181 14.4.1創建帶有索引的表182 14.4.2添加索引182 14.4.3移除索引183 14.5索引的缺點是什么?184 14.5.1存儲184 14.5.2更新索引185 14.5.3優化器185 14.6索引類型186 14.6.1B-tree索引186 14.6.2全文索引188 14.6.3空間索引189 14.6.4多值索引190 14.6.5哈希索引193 14.7索引的特性195 14.7.1函數索引196 14.7.2前綴索引196 14.7.3不可見索引197 14.7.4降序索引198 14.7.5分區與索引198 14.7.6自生成索引200 14.8InnoDB與索引200 14.8.1簇聚索引201 14.8.2二級索引201 14.8.3建議201 14.8.4最佳用例201 14.9索引策略202 14.9.1何時添加或者移除索引?202 14.9.2主鍵的選擇203 14.9.3添加二級索引203 14.9.4多列索引204 14.9.5覆蓋索引205 14.10本章小結205 第15章索引統計信息206 15.1何為索引統計信息?206 15.2InnoDB與索引統計信息207 15.2.1統計信息是如何被收集的?207 15.2.2頁采樣208 15.2.3事務隔離級別209 15.2.4配置統計信息類型209 15.3持久索引統計信息209 15.3.1配置210 15.3.2索引統計信息表211 15.4臨時索引統計信息214 15.5監控215 15.5.1information庫中的STATISTICS視圖215 15.5.2SHOWINDEX語句217 15.5.3information庫中的INNODB_TABLESTATS視圖219 15.5.4information庫中的TABLES視圖及SHOWTABLESTATUS語句220 15.6更新統計信息223 15.6.1自動更新223 15.6.2ANALYZETABLE語句224 15.6.3mysqlcheck程序225 15.7本章小結227 第16章直方圖229 16.1何為直方圖?229 16.2何時應該添加直方圖信息?230 16.3直方圖內部信息231 16.3.1bucket231 16.3.2累積頻率232 16.3.3直方圖類型234 16.4直方圖的添加與維護236 16.4.1直方圖的創建與更新236 16.4.2采樣237 16.4.3刪除直方圖238 16.5查看直方圖數據238 16.6直方圖報告示例239 16.6.1列出所有直方圖240 16.6.2列出一個直方圖的所有信息240 16.6.3列出一個單值直方圖的桶信息241 16.6.4列出一個等高直方圖的桶信息243 16.7查詢示例244 16.8本章小結247 第17章查詢優化器248 17.1轉換249 17.2基于成本的優化249 17.2.1基礎:單表SELECT操作250 17.2.2表聯接順序251 17.2.3默認過濾效果251 17.2.4查詢成本252 17.3聯接算法254 17.3.1嵌套循環254 17.3.2塊嵌套循環257 17.3.3哈希聯接260 17.4聯接優化263 17.4.1索引合并263 17.4.2多范圍讀(MRR)269 17.4.3批量key訪問(BKA)270 17.4.4其他優化271 17.5配置優化器274 17.5.1引擎成本275 17.5.2服務器成本275 17.5.3優化器開關277 17.5.4優化器提示278 17.5.5索引提示281 17.5.6配置選項282 17.6資源組282 17.6.1獲取資源組相關信息283 17.6.2管理資源組283 17.6.3分配資源組285 17.6.4性能考量286 17.7本章小結287 第18章鎖原理與監控288 18.1為何會需要鎖?288 18.2鎖訪問級別289 18.3鎖粒度289 18.3.1用戶級別鎖289 18.3.2刷新鎖291 18.3.3元數據鎖292 18.3.4顯式表鎖295 18.3.5隱式表鎖295 18.3.6記錄鎖297 18.3.7gap鎖、next-key鎖以及預測鎖299 18.3.8插入意向鎖300 18.3.9自增鎖302 18.3.10備份鎖302 18.3.11日志鎖304 18.4獲取鎖失敗304 18.4.1元數據鎖和備份鎖等待超時305 18.4.2InnoDB鎖等待超時305 18.4.3死鎖306 18.5減少鎖相關的問題309 18.5.1事務大小與期限309 18.5.2索引309 18.5.3記錄訪問順序310 18.5.4事務隔離級別310 18.5.5搶占鎖312 18.6監控鎖313 18.6.1performance庫313 18.6.2sys庫314 18.6.3狀態計數器與InnoDB指標314 18.6.4InnoDB鎖監控與死鎖日志315 18.7本章小結318 第Ⅴ部分查詢分析 第19章查找待優化的查詢320 19.1performance庫321 19.1.1語句事件表321 19.1.2prepared語句的匯總325 19.1.3表的I/O匯總327 19.1.4文件I/O匯總信息332 19.1.5錯誤匯總表334 19.2sys庫335 19.2.1語句視圖335 19.2.2表I/O視圖337 19.2.3文件I/O視圖338 19.2.4語句性能分析器340 19.3MySQLWorkbench343 19.3.1性能報告344 19.3.2客戶端連接報告346 19.4MySQLEnterpriseMonitor346 19.4.1查詢分析器346 19.4.2時間序列圖349 19.4.3即席查詢報告350 19.5慢查詢日志352 19.6本章小結352 第20章分析查詢354 20.1EXPLAIN用法355 20.1.1顯式查詢的用法355 20.1.2EXPLAINANALYZE355 20.1.3連接的用法356 20.2EXPLAIN格式357 20.2.1傳統格式358 20.2.2JSON格式359 20.2.3樹狀格式362 20.2.4VisualExplain364 20.3EXPLAIN輸出368 20.3.1EXPLAIN字段368 20.3.2選擇類型371 20.3.3訪問類型372 20.3.4Extra信息376 20.4EXPLAIN示例377 20.4.1單表,全表掃描378 20.4.2單表,索引訪問379 20.4.3兩張表和覆蓋索引380 20.4.4多列索引381 20.4.5兩張表并帶有子查詢和排序382 20.5優化器跟蹤384 20.6performance庫事件分析387 20.6.1檢查存儲過程387 20.6.2分析階段事件391 20.6.3使用sys.ps_trace_thread()過程進行分析393 20.6.4使用ps_trace_statement_digest()過程進行分析396 20.7本章小結400 第21章事務401 21.1事務的影響401 21.1.1鎖402 21.1.2undo日志402 21.2INNODB_TRX403 21.3InnoDB監視器406 21.4INNODB_METRICS和sys.metrics407 21.5performance庫事務410 21.5.1事務事件及其語句410 21.5.2事務匯總表416 21.6本章小結417 第22章診斷鎖爭用418 22.1刷新鎖419 22.1.1癥狀419 22.1.2原因419 22.1.3構建420 22.1.4調研420 22.1.5解決方案423 22.1.6預防423 22.2元數據鎖和方案鎖424 22.2.1癥狀424 22.2.2原因424 22.2.3構建424 22.2.4調研425 22.2.5解決方案431 22.2.6預防431 22.3記錄鎖432 22.3.1癥狀432 22.3.2原因434 22.3.3構建435 22.3.4調研435 22.3.5解決方案436 22.3.6預防437 22.4死鎖437 22.4.1癥狀437 22.4.2原因438 22.4.3構建438 22.4.4調研439 22.4.5解決方案444 22.4.6預防444 22.5本章小結445 第Ⅵ部分提升查詢性能 第23章配置448 23.1最佳實踐448 23.2InnoDB綜述451 23.3InnoDB緩沖池452 23.3.1緩沖池大小453 23.3.2緩沖池實例455 23.3.3轉儲緩沖池455 23.3.4舊塊子列表455 23.3.5刷新頁457 23.4重做日志458 23.4.1日志緩沖區459 23.4.2日志文件459 23.5并行查詢執行461 23.6查詢緩沖區462 23.7內部臨時表463 23.8本章小結465 第24章改變查詢計劃466 24.1測試數據466 24.2出現過多全表掃描的癥狀467 24.3錯誤查詢468 24.4未使用索引470 24.4.1不在多列索引的靠左位置471 24.4.2數據類型不匹配473 24.4.3函數依賴476 24.5改善索引的使用情況478 24.5.1添加覆蓋索引479 24.5.2錯誤索引480 24.5.3重寫復雜索引條件487 24.6重寫復雜查詢488 24.6.1公共表表達式(CTE)489 24.6.2窗口函數493 24.6.3使用聯接來重寫子查詢494 24.6.4將查詢拆分為多個部分495 24.7隊列系統:SKIPLOCKED496 24.8多個OR或者IN條件498 24.9本章小結502 第25章DDL與批量數據加載504 25.1方案更改505 25.1.1算法505 25.1.2其他考量506 25.1.3刪除或者截斷表506 25.2數據加載的一般性考量507 25.3以主鍵順序插入516 25.3.1自增長主鍵516 25.3.2插入已有數據517 25.3.3UUID主鍵518 25.4InnoDB緩沖池與二級索引519 25.5配置521 25.6事務與加載方式522 25.7MySQLshell并行數據加載522 25.8本章小結524 第26章復制526 26.1復制概述527 26.2監控528 26.2.1連接表529 26.2.2applier表531 26.2.3日志狀態533 26.2.4組復制表534 26.3連接534 26.3.1復制事件534 26.3.2網絡535 26.3.3維護源信息536 26.3.4寫入中繼日志536 26.4applier線程536 26.4.1并行applier537 26.4.2主鍵538 26.4.3放寬數據安全538 26.4.4復制過濾器539 26.5將工作負載卸載到副本540 26.5.1讀操作的橫向擴展540 26.5.2任務分離540 26.6本章小結541 第27章緩存542 27.1緩存,無處不在542 27.2MySQL中的緩存543 27.2.1緩存表543 27.2.2直方圖統計信息545 27.3Memcached546 27.3.1獨立服務器模式下的Memcached547 27.3.2MySQLInnoDBMemcached插件549 27.4ProxySQL552 27.5緩存技巧558 27.6本章小結559 |
序: |