對innodb 統計信息的控制可以通過如下幾個常用的variables 來實現
1、innodb_stats_persistent:
這個參數控制著innodb的統計信息是否持久化到磁盤,先說明一下持久化到磁盤是什么意思;通常來說統計信息只保存在內存中,也就是說如果mysql服務一重啟那么之前
所有的統計信息都沒有了,這個情況下mysql就要重新收集&計算了;如果統計信息持久化到磁盤了,那么就可以直接從磁盤中讀取;
為了真正的可以達到紅統計信息持久化到磁盤光是innodb_stats_persistent=on是做不到的;innodb_stats_persistent=on 只是說明了打開了mysql把表的統計
信息持久化到磁盤的能力,但是這個能力用不用不是由表自己說了算;在create table 語句中指定STATS_PERSISTENT=1這個時候表就支持持久化工能了。
create table t(x int,y int) STATS_PERSISTENT=1;
?
2、由1中的描述可知 innodb的表可以分成兩大類、一類是支持持久化的表,一類是不支持持久化的表;它們各自的統計信息的收集方式又可以通過不同的變量來控制
?
3、innodb_stats_persistent_sample_pages 持久化統計信息的采樣頁
?
4、innodb_stats_transient_sample_pages 非持久化統計信息的采樣頁
?
5、innodb_stats_auto_recalc 變更超過10%的時候要不要自動收集統計信息
?
6、innodb_stats_on_metadata 執行show table status | information_schema.tables 時是否自動收集統計信息
?