ITPub博客

首页 > 数据库 > > show engine innodb status操作解析之一

show engine innodb status操作解析之一

作者:xuexiaogang 时间:2019-07-18 10:50:17 0 删除 编辑

众所周知 在 MySQL 中使用 innodb 的话, show engine innodb status 这个命令必知必会。

今天来讲一讲这个的一些知识点。

 

我们先建立 3 个表。

                                             

表很简单。

写一段存储过程。

BEGIN

DECLARE v int;

SET v = 0;

loop_label: LOOP

insert into t1 (id,name) values (v,'a');

SET v = v + 1;

IF v>=1000000 THEN

LEAVE loop_label;

END IF;

end loop;

END

 

每个表插入100万数据。三个表3个存储过程。对应的地方自己改改。

数据库重启一下。这个 insert , update , delete , read 就

 

我们模拟一下。

 

可以看到 insert 和 update 以后通过 show engine innodb status  配合管道插入和更新都有 1 条。

接下来是一个 count 。 Count 多少读多少。所以 read 上升。读多少条,增加多少。

同样如果通过索引访问。那么就增加的即索引条目。这样 read 就很少增加。

但是如果 where 条件没有用到索引。执行了全表,那么 read 还是增加的。

所以索引很重要。

再做一个实验。执行这句 select 。

就是一个分组聚合。注意是多个表进行关联。

这个时候不仅读增加,居然 insert 还有 100 万的增加。这说明多表关联的时候,在一些聚合的场景下,会对系统增加额外的负荷。应该避免。

继续深入。如果多表关联,用到索引或者说返回数据较少。(因为有时候即使用的索引返回数据也很多)那么是不会产生额外的 insert 的。

对比一下。这个文件在几次操作后变大了。从 12M 到 76M 。这就是额外 insert 造成的。

 

这是原表的大小。说明表越大,返回数据越多,那么 tmp 文件就越大。越容易带来问题。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/637517/viewspace-3154253/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 我的2019DTCC
请登录后发表评论 登录
全部评论
OracleACE/PostgreSQLACE/阿里云MVP/腾讯云TVP/墨天轮 MVP/TiDBMVA/数盟会华东区长老/OpenTenBase社区委和技术委委员/架构师技术同盟名人堂成员上海地区理事会成员/if社区联合发起人/《DBA实战手记》作者/公众号:四海内皆兄弟

注册时间:2013-07-01

  • 博文量
    422
  • 访问量
    953117