共计 760 个字符,预计需要花费 2 分钟才能阅读完成。
本文关键字:统计表,debug
问题
咱们晓得在 MySQL 中创立一张表时,一些统计表会发生变化,比方:mysql/innodb_index_stats,会多出几行对新表的形容。
那么会变更几张表?这些统计表是如何变动的?
试验
本期咱们用 MySQL 提供的 DBUG 工具来钻研 MySQL 的 SQL 解决流程。
起手先造个实例
这里得略微改一下实例的启动文件 start,将 CUSTOM_MYSQLD 改为 mysqld-debug:
重启一下实例,加上 debug 参数:
咱们来做一两个试验,阐明 DBUG 包的作用:
先设置一个简略的调试规定,咱们设置了两个调试选项:
- d:开启各个调试点的输入
- 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 的技术内容,你们还有什么想晓得的吗?连忙留言通知小编吧!