MySQL 5.5 統計資訊收集

feelpurple發表於2017-12-15
對於大表來說,需要手動新增 ANALYZE TABLE 表名 的定時收集任務。

在 MySQL 中,查詢最佳化器基於統計資訊來選擇合適的執行計劃。
統計資訊的主要部分如下:
① cardinality,表中非重複行的條目
② 表的總行數
③ 索引

對於表的資料,透過主鍵索引來代表;
對於索引的條目,透過第二索引來代表

下面的操作會導致  InnoDB 來對錶中的每個索引進行隨機取樣資料頁:
① ANALYZE TABLE 語句
② SHOW TABLE STATUS 語句
③ 資料庫重啟後,對錶的第一次訪問

innodb_stats_on_metadata 引數設定成 ON,則資料庫會將統計資訊儲存到系統表中
>show global variables like 'innodb_stats_on_metadata';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_stats_on_metadata | ON    |
+--------------------------+-------+
1 row in set (0.00 sec)

對於空值的處理,可以透過 innodb_stats_method 引數來配置
>show global variables like 'innodb_stats_method';
+---------------------+-------------+
| Variable_name       | Value       |
+---------------------+-------------+
| innodb_stats_method | nulls_equal |
+---------------------+-------------+
1 row in set (0.00 sec)

其他的統計資訊,可以在 INFORMATION_SCHEMA、PERFORMANCE_SCHEMA 庫下的表來獲取

為了提供統計資訊收集時的取樣精度,可以調整 innodb_stats_sample_pages 引數
這個引數的預設值是 8,對於大表來說,這個預設值是不夠的,需要增大

>show global variables like 'innodb_stats_sample_pages';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| innodb_stats_sample_pages | 8     |
+---------------------------+-------+
1 row in set (0.00 sec)

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

相關文章