MySQL InnoDB什麼時候更新索引的統計信息?

来源:https://www.cnblogs.com/kerrycode/archive/2023/09/28/17735459.html
-Advertisement-
Play Games

MySQL InnoDB的索引統計信息在什麼時候更新呢? 或者說什麼事件會觸發InnoDB索引的統計信息更新呢?下麵結合參考資料When Does InnoDB Update the Index Statistics? (Doc ID 1463718.1)[1]簡單總結梳理一下(文中大部分知識點來自 ...


MySQL InnoDB的索引統計信息在什麼時候更新呢? 或者說什麼事件會觸發InnoDB索引的統計信息更新呢?下麵結合參考資料When Does InnoDB Update the Index Statistics? (Doc ID 1463718.1)[1]簡單總結梳理一下(文中大部分知識點來自參考資料)。

1: ANALYZE TABLE命令

ANALYZE TABLE命令會顯式強制更新表的索引統計信息。例子:

ANALYZE TABLE <TABLE_NAME>;

2:OPTIMIZE TABLE命令

對InnoDB的表執行OPTIMIZE TABLE命令時, OPTIMIZE TABLE重新組織表的數據和關聯索引數據的物理存儲,以減少存儲空間並提高訪問表時的I/O效率。通俗點理解就是碎片整理。它會重建表並執行ANALYZE TABLE命令,因此索引的統計信息也會被更新。

3:元數據查看觸發

如果您開啟了瞬態統計信息(transient statistics)並且innodb_stats_on_metadata參數為ON(MySQL 5.5及更早版本中的預設值,但在MySQL 5.6及更高版本中不是預設值)的話,那麼InnoDB會在以下情況下更新索引的統計信息:

查詢元數據信息的SQL語句:

  • SHOW TABLE STATUS
  • SHOW INDEX

或者當你訪問INFORMATION_SCHEMA下一些表時也會觸發統計信息更新,例如:

  • TABLES
  • STATISTICS。

其實實際環境中,這種條件很少觸發索引更新統計信息,因為它的條件一般很難滿足,正常情況下,這些參數都不會這樣設置。

另外這裡補充一下transient statistics的知識:

關於瞬態統計信息(transient statistics), 其實transient statistics也叫non-persistent optimizer statistics,翻譯成非持久統計信息,它是當innodb_stats_persistent=OFF 或使用 STATS_PERSISTENT=0時,創建或更改單個表時,優化程式統計信息不會保存到磁碟。相反,統計信息存儲在記憶體中,併在伺服器關閉時丟失。統計信息也會通過某些操作和特定條件下定期更新。

4 統計信息自動更新

對於使用瞬態統計信息的表,統計信息是在首次打開表時計算的。這包括FLUSH TABLE和FLUSH TABLES WITH READ LOCK。

此外,當表的有大量數據發生變化時,InnoDB還將觸發重新計算索引統計信息。邏輯取決於使用的是持久統計信息還是瞬態統計信息:

  • 持久統計信息:為表啟用 STATS_AUTO_RECALC(預設情況下設置為預設啟用的 innodb_stats_auto_recalc 值)時,當 1/10 (10%) 行發生更改時,索引統計信息將更新,限製為每次更新之間必須至少經過 10 秒。

  • 瞬態統計信息:自上次更新統計信息以來,表中至少 1/16 (6.25%) 的行已被修改。

另外,關於transient statistics,其實有些版本還是有一些Bug的,例如Bug #98546 Transient indexes statistics are updated in foreground causing performance issue

參考資料

[1]

1: https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=342584987828510&id=1463718.1&_afrWindowMode=0&_adf.ctrl-state=5hdz2z4vn_4,

掃描上面二維碼關註我 如果你真心覺得文章寫得不錯,而且對你有所幫助,那就不妨幫忙“推薦"一下,您的“推薦”和”打賞“將是我最大的寫作動力! 本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接.
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • https://www.codenong.com/cs106719464/ WinForm中的UI假死其實是個老生常談的問題了,但最近還是很多人問我該如何解決,所以今天就來說明一下如何解決UI假死的問題。實驗程式界面如下圖所示: 方法一:async + await + Task 首先看下麵一段代碼: ...
  • C# BeginInvoke實現非同步編程-CSDN博客 https://blog.csdn.net/Nire_Yeyu/article/details/133203267 C# BeginInvoke實現非同步編程BeginInvoke實現非同步編程的三種模式: 1.等待模式在發起了非同步方法以及做了一些 ...
  • 模擬.NET實際應用場景,綜合應用三個主要知識點:一是使用dnSpy反編譯第三庫及調試,二是使用Lib.Harmony庫實現第三庫攔截、偽造,三是實現同一個庫支持多版本同時引用。 ...
  • 問題現象: 使用伺服器管理器打開本地安全策略,或使用win+R快捷鍵,輸入gpedit.msc打開系統組策略時,出現報錯:無法打開此電腦上的組策略對象。你可能沒有相應的許可權。 解決方法: 1、使用win+E快捷鍵打開資源管理器,點擊”查看“,勾選”隱藏的項目“,因為C:\Windows\Syste ...
  • 一、介紹說明 Linux系統是一個多用戶多任務的操作系統,任何一個要使用系統資源的用戶,都必須首先向系統管理員申請一個賬號,然後以這個賬號的身份進入系統。 用戶的賬號一方面可以幫助系統管理員對使用系統的用戶進行跟蹤,並控制他們對系統資源的訪問;另一方面也可以幫助用戶組織文件,併為用戶提供安全性保護。 ...
  • PostgreSQL 在開源資料庫世界中一直是一個標誌性的存在。經過35年的嚴格開發,它以其可靠性、強大的功能和性能而自豪。DB-engines 的突出顯示,其市場份額的增長證明瞭其適應性強的數據模型和滿足各種用例需求的多樣化擴展 考慮到PG突出的地位,甲骨文將推出基於 PostgreSQL 14. ...
  • 在資料庫代理層中,寫節點的資料庫連接是一種很重要和稀缺的資源,提升其利用率是一個提升資料庫整體性能的重要手段。資料庫連接占用過高會大幅增加資料庫的資源負擔,降低資料庫的處理能力。通過延遲啟動的事務,可以減少不必要的連接占用時長,提升資料庫連接利用率。 ...
  • SQL改寫是資料庫產品中使用比較頻繁的一個技術,在大多數產品中的調用頻率也非常高,通常對性能的需求需要接近對應資料庫產品的上限。例如在天翼雲關係型資料庫中的Mysql語法相容組件,其性能測試標準需要達到接近30萬TPS,也意味著SQL改寫環節的性能標準需要支持至少每秒30萬次以上,否則會成為系統的性... ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...