GreatSQL統計信息相關知識點

来源:https://www.cnblogs.com/greatsql/p/18154394
-Advertisement-
Play Games

相關知識點: INNODB_STATS_PERSIST=ON或用STATS_PERSIST=1定義單個表時,優化器統計信息將持久化到磁碟。預設情況下,innodb_stats_persistent是啟用的。 持久統計信息存儲在mysql.innodb_table_stats和mysql.innodb ...


相關知識點:

INNODB_STATS_PERSIST=ON或用STATS_PERSIST=1定義單個表時,優化器統計信息將持久化到磁碟。預設情況下,innodb_stats_persistent是啟用的。

持久統計信息存儲在mysql.innodb_table_statsmysql.innodb_index_stats表中。

預設情況下啟用的innodb_stats_auto_recalc變數控制當表中超過10%的行發生更改時是否自動計算統計信息。可以通過在創建或更改表時指定STATS_AUTO_RECALC子句來為單個表配置自動統計數據重新計算。

由於在後臺進行的自動統計數據重新計算的非同步性質,即使啟用了innodb_stats_auto_recalc,在運行影響表10%以上的DML操作後,也不會立即重新計算統計數據。在某些情況下,統計數據的重新計算可能會延遲幾秒鐘。如果立即需要最新的統計數據,運行ANALYZE TABLE以啟動統計數據的同步(前臺)重新計算。

如果禁用innodb_stats_auto_recalc則可以通過在對索引列進行大量更改後執行ANALYZE TABLE語句來確保優化器統計信息的準確性。

INNODB_STATS_PERSIST=OFF或使用STATS_PERSIST=0創建或更改單個表時,優化器統計信息不會持久化到磁碟。相反,統計信息存儲在記憶體中,當伺服器關閉時會丟失。統計數據也會通過某些操作和在某些條件下定期更新。

當向現有表中添加索引時,或者當添加或刪除列時,無論innodb_stats_auto_recalc的值如何,都會計算索引統計信息並將其添加到innodb_index_stats表中。

影響統計信息的五個參數

  • innodb_stats_persistent:指定InnoDB索引統計信息是否持久化到磁碟,預設打開。

  • innodb_stats_persistent_sample_pages:估計索引列的基數和其他統計信息(如由分析表計算的統計信息)時要採樣的索引頁數。增加該值可以提高索引統計信息的準確性,但為innodb_stats_persistent_sample_pages設置較高的值可能會導致分析表執行時間過長。

  • innodb_stats_auto_recalc:使InnoDB在表中的數據發生重大變化後自動重新計算持久統計信息。閾值為表中行數的10%,預設打開。

  • innodb_stats_include_delete_marked:計算持久優化器統計信息時InnoDB是否包括已標記刪除的記錄,預設關閉。

  • innodb_stats_transient_sample_pages:估計索引列的基數和其他統計信息(如由分析表計算的統計信息)時要採樣的索引頁數。預設值為8。增加該值可以提高索引統計信息的準確性,從而改進查詢執行計劃,但代價是在打開InnoDB表或重新計算統計信息時會增加I/O。該參數僅適用於為表禁用innodb_stats_persistent的情況,如果啟用了INNODB_STATS_PERSIST則應用INNODB_STATS_PERSIST_SAMPLE_PAGES代替innodb_stats_sample_pages

總結:

1、非持久化統計信息在以下情況會被自動更新:

  1. 執行ANALYZE TABLE
  2. innodb_stats_on_metadata=ON情況下,執SHOW TABLE STATUS, SHOW INDEX, 查詢INFORMATION_SCHEMA下的TABLES, STATISTICS
  3. 啟用--auto-rehash功能情況下,使用mysql client登錄
  4. 表第一次被打開
  5. 距上一次更新統計信息,表1/16的數據被修改

非持久化統計信息的缺點顯而易見,資料庫重啟後如果大量表開始更新統計信息,會對實例造成很大影響,所以目前都會使用持久化統計信息。

2、持久化統計信息在以下情況會被自動更新:

  1. INNODB_STATS_AUTO_RECALC=ON的情況下,表中10%的數據被修改

  2. 增加新的索引

3、統計信息不准確的處理

我們查看執行計劃,發現未使用正確的索引,如果是innodb_index_stats中統計信息差別較大引起,可通過以下方式處理:

  1. 手動更新統計信息,註意執行過程中會加讀鎖:

ANALYZETABLE TABLE_NAME;

  1. 如果更新後統計信息仍不准確,可考慮增加表採樣的數據頁,兩種方式可以修改:

​ a. 全局變數INNODB_STATS_PERSISTENT_SAMPLE_PAGES預設為20;

​ b. 單個表可以指定該表的採樣:

ALTER TABLE TABLE_NAME STATS_SAMPLE_PAGES=40;

​ 經測試,此處STATS_SAMPLE_PAGES的最大值是65535,超出會報錯。

​ c. 手動更新innodb_table_statsinnodb_index_stats表統計信息(修改這兩個表不會產生binlog),然後使用FLUSH TABLE tbl_name語句載入更新後的統計信息。


Enjoy GreatSQL

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Lab2: system calls 預備知識 執行一次系統調用的流程: USER MODE step1:系統調用聲明 user/user.h:系統調用函數(如 int fork(void)) step2:ecall 進入內核態 user/usys.S(該文件由 user/usys.pl 生成,後續 ...
  • 18.鏈表只能一個接著一個遍歷,不允許通過隨機訪問 7.鏈表的地址是連續的,通過內部的指針來進行訪問 //假設該鏈表只給出了頭指針 head。在不改變鏈表的前提下,請設計一個儘可能高效的演算法, //查找鏈表中倒數第k(k為正整數)個位置上的結點。若查找成功,演算法輸出該結點的 data值,並返回 1; ...
  • 轉載自天地風雷水火山澤 目的 因為我們的數倉數據源是Kafka,離線數倉需要用Flume採集Kafka中的數據到HDFS中。 在實際項目中,我們不可能一直在Xshell中啟動Flume任務,一是因為項目的Flume任務很多,二是一旦Xshell頁面關閉Flume任務就會停止,這樣非常不方便,因此必須 ...
  • 本文分享自華為雲社區《對接HiveMetaStore,擁抱開源大數據》,作者:睡覺是大事。 1. 前言 適用版本:9.1.0及以上 在大數據融合分析時代,面對海量的數據以及各種複雜的查詢,性能是我們使用一款數據處理引擎最重要的考量。而GaussDB(DWS)服務有著強大的計算引擎,其計算性能優於MR ...
  • 近日,以“Data+AI,構建新質生產力”為主題的袋鼠雲春季發佈會圓滿落幕,大會帶來了一系列“+AI”的數字化產品與最新行業沉澱,旨在將數據與AI緊密結合,打破傳統的生產力邊界,賦能企業實現更高質量、更高效率的數字化發展。會上,袋鼠雲業務總經理申杭帶來了以“指標+AI:邁向智能化,讓指標應用更高效” ...
  • 本文介紹基於Microsoft SQL Server軟體,實現資料庫創建、分離、附加、刪除與備份的方法。 目錄1 互動式創建資料庫2 Transact-SQL指定參數創建資料庫3 互動式分離資料庫testbase14 使用系統存儲過程分離資料庫testbase25 資料庫文件備份:分離資料庫再複製其 ...
  • 今天我們就從GaussDB SQL引擎入手,瞭解一下GaussDB SQL 查詢語句的執行過程,包括GaussDB SQL引擎原理和關鍵技術點。 ...
  • 由福州軟體園科技創新發展公司和華為技術有限公司聯合主辦的HCDG城市行福州站——“企業創新新引擎”資料庫專項賦能會在福州軟體園成功舉辦。 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...