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儲存引擎
- MySQL 5.5儲存引擎介紹MySql儲存引擎
- InnoDB儲存引擎簡介儲存引擎
- MySQL儲存引擎入門介紹MySql儲存引擎
- Mysql常見儲存引擎介紹MySql儲存引擎
- MySQL InnoDB 儲存引擎探祕MySql儲存引擎
- MySQL儲存引擎簡介及MyISAM和InnoDB的區別MySql儲存引擎
- MyISAM 儲存引擎,Innodb 儲存引擎儲存引擎
- mysql常用儲存引擎(InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE)介紹與如何選擇MySql儲存引擎Hive
- Mysql技術內幕InnoDB儲存引擎讀書筆記--《二》InnoDB儲存引擎MySql儲存引擎筆記
- Innodb儲存引擎儲存引擎
- MySQL·引擎特性·InnoDB事務子系統介紹MySql
- MySQL引擎介紹ISAM,MyISAM,HEAP,InnoDBMySql
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- MySQL儲存引擎MyISAM與InnoDB的優劣MySql儲存引擎
- Mysql innodb儲存引擎的效能最佳化MySql儲存引擎
- [Mysql技術內幕]Innodb儲存引擎MySql儲存引擎
- MySQL InnoDB儲存引擎體系結構MySql儲存引擎
- 《MySQL 效能優化》之 InnoDB 儲存引擎MySql優化儲存引擎
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- MySQL技術內幕:InnoDB儲存引擎MySql儲存引擎
- InnoDB儲存引擎——表儲存引擎
- Mysql核心:INNODB儲存引擎--《十一》Insert BufferMySql儲存引擎
- MySQL核心InnoDB儲存引擎(卷1)筆記MySql儲存引擎筆記
- InnoDB儲存引擎檔案儲存引擎
- innodb索引的統計資訊不存在物理儲存上索引
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- 十八、Mysql儲存引擎並不只有MyISAM、InnoDB——精髓MySql儲存引擎
- MySQL高階10-InnoDB引擎儲存架構MySql架構
- MySQL 5.6 InnoDB儲存引擎體系結構圖MySql儲存引擎
- 《MySQL技術內幕:InnoDB儲存引擎》連載MySql儲存引擎
- memory儲存引擎 /MySQL記憶體表的特性與使用介紹儲存引擎MySql記憶體
- MySQL中InnoDB儲存引擎的實現和執行原理MySql儲存引擎
- 談談MySQL InnoDB儲存引擎事務的ACID特性MySql儲存引擎
- 【轉】Mysql兩種儲存引擎的異同【MyISAM和InnoDB】MySql儲存引擎
- Mysql更換MyISAM儲存引擎為Innodb的操作記錄MySql儲存引擎
- MySQL資料庫MyISAM儲存引擎轉為Innodb的方法MySql資料庫儲存引擎