MySQL统计信息相关参数

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命令太慢了,可能是采样太多了
可以看到索引的数量也是跟统计信息收集快慢有关的,及主键的构成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值