关于debug:第16问创建一张表时MySQL-的统计表是如何变化的

20次阅读

共计 760 个字符,预计需要花费 2 分钟才能阅读完成。

本文关键字:统计表,debug

问题

​咱们晓得在 MySQL 中创立一张表时,一些统计表会发生变化,比方:mysql/innodb_index_stats,会多出几行对新表的形容。

那么会变更几张表?这些统计表是如何变动的?

试验

本期咱们用 MySQL 提供的 DBUG 工具来钻研 MySQL 的 SQL 解决流程。

起手先造个实例

这里得略微改一下实例的启动文件 start,将 CUSTOM_MYSQLD 改为 mysqld-debug:

重启一下实例,加上 debug 参数:

咱们来做一两个试验,阐明 DBUG 包的作用:
先设置一个简略的调试规定,咱们设置了两个调试选项:

  1. d:开启各个调试点的输入
  2. O,/tmp/mysqld.trace:将调试后果输入到指定文件


而后咱们创立了一张表,来看一下调试的输入后果:

能够看到 create table 的过程中,MySQL 的一些细节操作,比方分配内存 alloc_root 等

这样看还不够直观,咱们减少一些信息:

来看看成果:

能够看到输入变成了调用树的模式,当初就能够分辨出 alloc_root 调配的内存,是为了解析 SQL 时用的(mysql_parse)

咱们再减少一些有用的信息:

能够看到后果中减少了文件名和行号:

当初咱们能够在输入中找一下统计表相干的信息:

能够看到 MySQL 在这里十分机智,间接执行了一个内置的存储过程来更新统计表。

沿着 que_eval_sql,能够找到其余相似的统计表,比方上面这些:

本次试验中,咱们借助了 MySQL 的 DBUG 包,来让 MySQL 将处理过程裸露进去。MySQL 中相似的技术还有不少,比方 performance_schema,OPTIMIZER_TRACE 等等。

这些技术将 MySQL 的不同方向的信息裸露进去,不便大家了解其中机制。

对于 MySQL 的技术内容,你们还有什么想晓得的吗?连忙留言通知小编吧!

正文完
 0