InnoDB中的统计数据
我们前边学习查询成本的时候经常用到一些统计数据,比如通过SHOW TABLE STATUS可以看到关于表的统计数据,通过SHOW INDEX可以看到关于索引的统计数据,那么这些统计数据是怎么来的呢?它们是以什么方式收集的呢?
统计数据存储方式
InnoDB提供了两种存储统计数据的方式:永久性的统计数据,这种统计数据存储在磁盘上,也就是服务器重启之后这些统计数据还在。
非永久性的统计数据,这种统计数据存储在内存中,当服务器关闭时这些这些统计数据就都被清除掉了,等到服务器重启之后,在某些适当的场景下才会重新收集这些统计数据。
MySQL给我们提供了系统变量innodb_stats_persistent来控制到底采用哪种方式去存储统计数据。在MySQL 5.6.6之前,innodb_stats_persistent的值默认是OFF,也就是说InnoDB的统计数据默认是存储到内存的,之后的版本中innodb_stats_persistent的值默认是ON,也就是统计数据默认被存储到磁盘中。
SHOW VARIABLES LIKE 'innodb_stats_persistent';

不过最近的MySQL版本都基本不用基于内存的非永久性统计数据了,所以我们也就不深入研究。
不过InnoDB默认是以表为单位来收集和存储统计数据的,也就是说我们可以把某些表的统计数据(以及该表的索引统计数据)存储在磁盘上,把另一些表的统计数据存储在内存中。怎么做到的呢?我们可以在创建和修改表的时候通过指定STATS_PERSISTENT属性来指明该表的统计数据存储方式:
CREATE TABLE 表名 (...) Engine=InnoDB, STATS_PERSISTENT = (1|0);
ALTER TABLE 表名 Engine=InnoDB, STATS_PERSISTENT = (1|0);当STATS_PERSISTENT=1时,表明我们想把该表的统计数据永久的存储到磁盘上,当
STATS_PERSISTENT=0时,表明我们想把该表的统计数据临时的存储到内存中。如果我们在创建表时未指定STATS_PERSISTENT属性,那默认采用系统变量innodb_stats_persistent的值作为该属性的值
InnoDB存储统计数据有两种方式:永久性和非永久性。永久性数据在磁盘上,服务器重启后依然存在;非永久性数据存储在内存中,服务器关闭后丢失。MySQL的innodb_stats_persistent系统变量控制存储方式,默认在MySQL5.6.6后为ON。可通过创建和修改表时设定STATS_PERSISTENT属性来指定表的统计信息存储位置,如STATS_PERSISTENT=1表示磁盘存储,0表示内存存储。
2万+

被折叠的 条评论
为什么被折叠?



