关于 innodb_stats_on_metadata 的设置问题

转载 2013年12月01日 21:57:59

这个问题来自冷之同学测试时候碰到的一个“诡异现象”。

 

1、 测试现象       

测试的库有很多数据,但是重启之后,只对一个表的5w条记录作查询。查询条件客户端控制,确保查询范围。innodb_buffer_pool_size设置为35G。

现象1:查询性能会出现大幅度抖动;

现象2:介入追查后发现,Innodb_buffer_pool_pages_free = 0

 

         其中bp剩余量这个是最直观异常的,因为访问的5w行记录撑死也不可能把35G内存吃光的。在QA同学确认没有别人在使用这个库的情况下。

 

2、过程和原因

         其实几乎确定还是有别的查询在访问的。所以打开general_log。 发现除了QA同学压的语句外,这个Server上还有一些监控语句。

         其中一个语句如下

select constraint_schema,table_name,constraint_name,constraint_type from information_schema.table_constraints where table_schema not in ('information_schema', 'mysql', 'test');  

         这个语句访问了表 information_schema.table_constraints.

跟踪发现这个语句触发了读盘操作。原因是需要访问引擎的info()接口,而InnoDB此时又“顺手”做了更新索引统计的操作dict_update_statistics。

更新索引统计的基本流程是随机读取部分demo行。所以这个操作实际上是访问了这个Server里面的所有表,因此不只是访问5w行

而且由于别的表事先没有被访问,就会导致读盘操作,也包括BP的LRU更新。

 

3、哪些表会触发

         不只是上面提到的table_constraints,information_schema库下的一下几个表,访问时候都会触发这个“顺手”操作。

information_schema.TABLES

information_schema.STATISTICS

information_schema.PARTITIONS

information_schema.KEY_COLUMN_USAGE

information_schema.TABLE_CONSTRAINTS

information_schema.REFERENTIAL_CONSTRAINTS

         其实还有 show table status ,也会触发这个操作,只是只处理单表,所以影响没那么明显。

 

4、修改

头痛医头的方法是把这些监控去掉。但实际上像TABLES、TABLE_CONSTRAINTS这些表,都是静态数据,访问时不作索引统计也没关系的。

另外一个方法就是把innodb_stats_on_metadata设置成off,这样上述说到的这些表访问都不会触发索引统计。

         实际上这个动态统计的功能已经不推荐了,官方已经在6.0以后增加参数控制DML期间也不作动态统计了。因此这个参数配置成off更合理些(默认是on).

 

    之前有一篇文章也与此相关

from: http://dinglin.iteye.com/blog/1575840

相关文章推荐

MYSQL innodb_table_stats表不存在的解决方法

MySQL innodb_table_stats表不存在的解决方法 [日期:2015-05-14] 来源:Linux社区  作者:壹頁書 [字体:大 中 小] ...

On NTFS there is metadata (data which "lives above" your data).

On NTFS there is metadata (data which "lives above" your data).Metadata are special files that the N...

Hive On Spark报错:Failed to execute spark task, org.apache.hadoop.hive.ql.metadata.HiveException

解决Hive On Spark报错:Failed to execute spark task, org.apache.hadoop.hive.ql.metadata.HiveException,关键是...

关于Flex中的MetaData中的Event的使用问题

在Flex开发中会经常遇到用自定义事件来解决一些消息的传递问题,现在来介绍一种元标签Event的使用方法,一种使用是在自定义一个as组件时,需要监听一个自定义事件tryLogin,当在外部mxml中引...

解释Eclipse下Tomcat项目部署路径问题(.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps)

配置eclipse的开发环境,配置jdk的安装路径和tomcat安装路径。在eclipse下建立Dynamic Web Project工程zhgy,在使用eclipse中new一个tomcat,通过启...

MySQL Innodb锁解决并发问题

  • 2017-04-21 10:44
  • 784KB
  • 下载

MySQL Innodb锁解决并发问题

  • 2017-04-18 15:20
  • 751KB
  • 下载

How Logs Work On MySQL With InnoDB Tables

这篇帖子个人感觉写得非常棒,不转不行 In this article I will describe how logs work with MySQL and InnoDB. Very litt...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)