innodb_stats_persistent這個參數控制著統計信息是否寫入到磁盤上,否則頻繁計算的統計信息可能導致執行計劃發生改變。 innodb_stats_persistent_sample_pages這個參數控制著采樣的數量,跟Oracle動態采樣參數含義相同。 統計信息存放在 MySQL.innodb_table_stats and mysql.innodb_index_stats兩個表中,通過這2個表上的last_update字段,可以看到最后的統計信息收集的時間。可以使用ALTER TABLE tbl_name STATS_PERSISTENT=0這個語句來進行統計信息的非持久化。 innodb_stats_auto_recalc 這個參數控制著在表中行的數量改變超過10%的時候,是否重新收集統計信息。這個收集的動作是異步的,在執行完大的dml后,可能會過一段時間才重新收集統計信息,如果想要及時的統計信息,執行analyze命令去收集。 如果手工更新了統計信息,使用 FLUSH TABLE tbl_name 命令重新加載表及統計信息。 查看索引的大小,可以在統計信息中看 SELECT SUM(stat_value) pages, index_name, -> SUM(stat_value)*@@innodb_page_size size -> FROM mysql.innodb_index_stats WHERE table_name=’t1’ -> AND stat_name = ‘size’ GROUP BY index_name;
SELECT SUM(stat_value) pages, index_name, -> SUM(stat_value)*@@innodb_page_size size -> FROM mysql.innodb_index_stats WHERE table_name like ‘t1#P%’ -> AND stat_name = ‘size’ GROUP BY index_name;
在下面的情況下考慮修改innodb_stats_persistent_sample_pages采樣數: 1統計信息不夠精確,執行計劃沒有最優化。統計是否準確,可以通過手工統計跟mysql.innodb_index_stats 中的信息對比。 2analzye命令太慢了,可能是采樣太多了 可以看到索引的數量也是跟統計信息收集快慢有關的,及主鍵的構成。
| 
 
 | 
新聞熱點
疑難解答