MYSQL 統計資料

gaopengtttt發表於2015-09-09

統計資料的重要性相信瞭解ORACLE資料庫的都非常清楚,他是生成執行計劃的唯一標準,所以統計資料是否準確直接影響到執行計劃的正確性,
關於MYSQL雖然沒有ORACLE那麼多維度的統計資料(比如直方圖)但是還是有的,
MYSQL 5.6後分為2種統計資料
1、永久化的統計資料
預設的5.6.6後使用時這種方式,影響他的引數有
innodb_stats_persistent_sample_pages 每次取樣的塊數,預設為20
innodb_stats_auto_recalc 是否開啟自動收集,預設為修改量超過10%的資料
innodb_stats_persistent  預設為ON,是否使用永久化的統計資料


永久化的統計資料儲存在innodb_index_stats和innodb_table_stats中,官方文件說
統計資料並非實時的,也就是收集統計資料會滯後幾分鐘,如果想要及時的更新統計
資料需要手動執行ANALYZE TABLE(In some cases, statistics
recalculation may be delayed by a few seconds. If up-to-date statistics are
required immediately after changing significant portions of a table, run ANALYZE
TABLEto initiate a synchronous (foreground) recalculation of statistics)
如果統計資料不準可能需要修改innodb_stats_persistent_sample_pages的值更大,
如果analyze table過慢可以考慮減少innodb_stats_persistent_sample_pages的值更小。
這兩個表為INNODB的表


2、非永久化的統計數
如果設定innodb_stats_persistent為OFF就使用這種方式的統計資料,這種方式的統計
資料在資料庫重啟後就丟失,他的統計資料儲存在STATISTICS,TABLES兩個表中,他們是
MEMORY引擎的表,這種方式受影響的引數
innodb_stats_persistent 設定為OFF
innodb_stats_transient_sample_pages 預設為8,為取樣塊數
innodb_stats_on_metadata 英文描述To have statistics updated when metadata statements such as SHOW TABLE STATUS
                         or SHOW INDEX are run, or when accessing the INFORMATION_SCHEMA.TABLES or 
                         INFORMATION_SCHEMA.STATISTICSt ables, execute the statement SET GLOBAL 
                         innodb_stats_on_metadata=ON
當innodb_stats_persistent設定為ON的時候,預設innodb_stats_on_metadata是OFF的,因為它會影響SHOW TABLE STATUS等的速度




最後我們再來簡單描述一下ORCALE的統計資料收集的策略,ORACLE 10G,11G都是透過自動化的作業來收集,預設的11G周1到周5晚上10點
開始收集統計資料,週末則是早上6點開始,當然這種收集統計資料並不是全部收集,ORACLE會把修改數量超過10%的TABLES記錄到mon_mods_all$
內部表中,然後對這些表進行收集,這樣來保證統計資料能夠儘可能的描述資料的分佈,同時ORACLE會透過謂詞的使用來判定是否收集直方圖,
謂詞的使用記錄在COL_USAGE$內部檢視中,直方圖用於判定資料的傾斜,MYSQL在這方面視乎還沒有。

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

相關文章