MySQL InnoDB儲存引擎更新Cardinality統計資訊的策略介紹
在InnoDB儲存引擎中,Cardinality統計資訊的更新發生在兩個操作中:insert和update。
InnoDB儲存引擎內部對更新Cardinality資訊的策略為:持久化(PERSISTENT)與非持久化統計資料(TRANSIENT)。
持久化(PERSISTENT)統計資料,儲存在mysql.innodb_index_stats和mysql.innodb_table_stats中。
非持久化(TRANSIENT)統計資料,儲存在information_schema.statistics和information_schema.tables中。
前者是innodb表後者是memory表,他們受引數innodb_stats_persistent的控制。從MySQL 5.6.6開始,預設情況下,innodb_stats_persistent預設為ON,最佳化器統計資訊會保留在磁碟上。
對於持久化(persistent)統計資料策略:
表中1/10的資料已發生變化時,且設定了innodb_stats_auto_recalc和innodb_stats_persistent,則透過persistent方式更新統計資訊。
兩次申請統計資料收集要超過10S。
在5.6中,引入的一個新引數innodb_stats_auto_recalc用於控制是否進行自動統計資訊計算。當表上的記錄修改超過10%時,就會對統計資訊重新計算;這隻對在建表時開啟了innodb_stats_persistent或者指定了建表選項STATS_PERSISTEND=1生效,取樣page的個數透過引數innodb_stats_persistent_sample_pages來控制(實際讀取的page數會大於該值)。
innodb_stats_auto_recalc 這個引數控制著在表中行的數量改變超過10%的時候,是否重新收集統計資訊。這個收集的動作是非同步的,在執行完大的dml後,可能會過一段時間才重新收集統計資訊,如果想要及時的統計資訊,執行analyze命令去收集。
對於非持久化(transient)統計資料策略:
InnoDB檢測到自上次更新統計資訊以來表的1/16已被修改,透過transient方式更新統計資訊。
stat_modified_counter > 2000000000。
對於非持久化,第一種策略為自上次統計Cardinality資訊後,表中1/16的資料已經發生過變化,這時需要更新Cardinality資訊。第二種情況考慮的是,如果對錶中某一行資料頻繁地進行更新操作,這時表中的資料實際並沒有增加,實際發生變化的還是這一行資料,則第一種更新策略就無法適用這種情況。故在InnoDB儲存引擎內部有一個計數器stat_modified_counter,用來表示發生變化的次數。當stat_modified_counter大於2000000000時,同樣需要更新Cardinality資訊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2156325/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 14.1 InnoDB 儲存引擎介紹儲存引擎
- MySQL InnoDB儲存引擎MySql儲存引擎
- InnoDB儲存引擎簡介儲存引擎
- MySQL儲存引擎入門介紹MySql儲存引擎
- mysql常用儲存引擎(InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE)介紹與如何選擇MySql儲存引擎Hive
- MySQL InnoDB 儲存引擎探祕MySql儲存引擎
- MySQL儲存引擎簡介及MyISAM和InnoDB的區別MySql儲存引擎
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- 《MySQL 效能優化》之 InnoDB 儲存引擎MySql優化儲存引擎
- [Mysql技術內幕]Innodb儲存引擎MySql儲存引擎
- MySQL InnoDB儲存引擎體系結構MySql儲存引擎
- MySQL資料庫儲存引擎簡介MySql資料庫儲存引擎
- 《MySQL 基礎篇》十二:InnoDB 儲存引擎的資料結構MySql儲存引擎資料結構
- MySQL資料庫InnoDB儲存引擎中的鎖機制GVMySql資料庫儲存引擎
- mysql儲存引擎InnoDB詳解,從底層看清InnoDB資料結構MySql儲存引擎資料結構
- 談談MySQL InnoDB儲存引擎事務的ACID特性MySql儲存引擎
- 服務端指南 資料儲存篇 | MySQL(02) 儲存引擎的 InnoDB 與 MyISAM 之爭服務端MySql儲存引擎
- 十八、Mysql儲存引擎並不只有MyISAM、InnoDB——精髓MySql儲存引擎
- MySQL高階10-InnoDB引擎儲存架構MySql架構
- 每日分享-MySQL-2019-08-05-【InnoDB 儲存引擎】MySql儲存引擎
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- MySQL中InnoDB儲存引擎的實現和執行原理MySql儲存引擎
- MySQL三種InnoDB、MyISAM和MEMORY儲存引擎對比MySql儲存引擎
- MySQLInnoDB儲存引擎(一):精談innodb的儲存結構MySql儲存引擎
- innodb儲存引擎鎖的實現(一)儲存引擎
- MySQL 儲存引擎MySql儲存引擎
- MySQL儲存引擎MySql儲存引擎
- MySQL兩種儲存引擎: MyISAM和InnoDB 簡單總結MySql儲存引擎
- MySQL原理 - InnoDB引擎 - 行記錄儲存 - Off-page 列MySql
- InnoDB儲存引擎MVCC實現原理儲存引擎MVC
- 第二章 InnoDB儲存引擎儲存引擎
- 你真的瞭解Innodb儲存引擎?儲存引擎
- 理解mysql的儲存引擎MySql儲存引擎
- 儲存引擎簡介儲存引擎
- MySQL常見的兩種儲存引擎:MyISAM與InnoDB的愛恨情仇MySql儲存引擎
- MySQL中Innodb如何計算索引的統計資訊?MySql索引
- MySQL資料庫操作、儲存引擎MySql資料庫儲存引擎