MySQL索引統計資訊更新相關的引數

不一樣的天空w發表於2019-07-23

https://www.cnblogs.com/tangshiguang/p/6741037.html


MySQL統計資訊相關的引數:

  1. innodb_stats_on_metadata(是否自動更新統計資訊),MySQL 5.7中預設為關閉狀態

     僅在統計資訊配置為非持久化的時候生效。
    也就是說在innodb_stats_persistent 配置為OFF的時
,非持久化儲存統計資訊的手,innodb_stats_on_metadata的設定才生效。
    當innodb_stats_on_metadata設定為ON的時候,
    InnoDB在執show table status 或者訪問INFORMATION_SCHEMA.TABLES 或者INFORMATION_SCHEMA.STATISTICS 系統表的時候,更新費持久化統計資訊 (類似於ANALYZE TABLE)

    某個索引的統計資訊更新時間參考mysql.innodb_index_stats這個系統表
    select * from mysql .innodb_index_stats  where table_name = 'teststatistics';

  2. innodb_stats_auto_recalc

    是否 自動觸發 更新統計資訊,僅影響持久化儲存的統計資訊的表, 閾值是變化的資料超過錶行數的10%。
    也就是說,一個表索引統計資訊是持久化儲存的,並且表中資料變化了超過10%,
     如果innodb_stats_auto_recalc為ON,就會自動更新統計資訊,否則不更新。

  3. innodb_stats_persistent(非持久化統計資訊開關), MySQL 5.7中預設為開啟 ,持久化儲存統計資訊

     該選項設定為ON時候,統計資訊會持久化儲存到磁碟中,而不是存在在記憶體中
    相反,如果是非持久化儲存的(存在記憶體中),相應的統計資訊會隨著伺服器的關閉而丟失。

  4. innodb_stats_persistent_sample_pages ( 持久化 更新統計資訊時候索引頁的取樣頁數

     預設是20個page ,如果設定的過高,那麼在更新統計資訊的時候,會增加ANALYZE TABLE的執行時間。

  5. innodb_stats_transient_sample_pages( 臨時性 更新統計資訊時候索引頁的取樣頁數

    預設值是8 innodb_stats_persistent設定為disable的情況下innodb_stats_transient_sample_pages才生效
    也就是非持久化儲存過索引統計資訊的時候,innodb_stats_transient_sample_pages為更新統計資訊的取樣頁數

  6. innodb_stats_sample_pages

     已棄用 . 已用innodb_stats_transient_sample_pages 替代。


======重新收集統計資訊=======

1.分析和儲存表的關鍵字分佈

analyze table table_name;

analyze 用於收集最佳化器的統計資訊、和tuning相關;對 myisam、BOB、innodb起作用。

注意:(經過實踐操作 在MySQL5.5版本下執行sql:analyze table table_name 會馬上返回一個ok狀態,但是後端

仍然會出現鎖表等情況)。

2.檢查表(檢視),檢查一個或者多個表是否有錯誤

check table table_name;

對myisam(關鍵字統計資料被更新)和innodb都有作用,對於myisam來說,需要check和repair(由於myisam表

可能 損壞)。

3.定期最佳化表(對空間碎片進行整理合併,消除由於刪除或者更新造成的空間浪費)

optimize table table_name;

對myisam,bob和innodb表起作用,但是該操作會引起鎖表。

optimize 可以回收空間,整理碎片,提高IO 之處 innodb、myisam、archive;如若是replication環境,可以加 no_wri

te_to_binlog。

optimize local table table_name;


====小結:====

在MySQL實際生產環境中,對於一些經常性DML操作的表,是需要定期在業務低峰期執行optimize來收縮表空間,對於最佳化慢sql和壓縮磁碟都有較大的好處。

analyze 和optimize都是會鎖表的,(當然是因為業務生產中基本選擇了innodb的前提下)注意在業務高峰期切忌操作。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2651482/,如需轉載,請註明出處,否則將追究法律責任。

相關文章