
show create table底层流程跟踪
导语
SHOW CREATE TABLE语句用于为指定表/视图显示创建的语句,本文将简要描述如何在MySQL源码里跟踪和学习此类语句的执行流程。(注:使用版本为Percona-Server-8.0.25-15)
步骤
准备工作
编译调试版本的 mysql server 程序,创建数据库实例后建立一张示例表:
断点设置
在如下函数/方法中设置断点(gdb):
代码跟踪与阅读
通过断点查看上下文代码,通过打印变量信息等手段,可大致了解show create table t1的执行流程,以下列出几个执行中较关键的位置,并对源码内容做注解说明:
● 断点位置1:Sql_cmd_show_create_table::execute_inner(THD *) sql_show.cc:408
代码上下文:
● 断点位置2:mysqld_show_create(THD *, TABLE_LIST *) sql_show.cc:1206
代码上下文:
● 断点位置3: store_create_info(THD *, ...) sql_show.cc:1885
代码上下文:
store_create_info() 是一个比较'大支'的代码(600+行), 其原理本质上就是遍历和指定表相关的所有属性,并逐个将对应的创建信息塞入到事先预分配的String buffer里。
因为表的属性信息是在调用store_create_info前实时获取的,所以如果在我们创建原始表后对表属性和结构做了变更,在show create table时,是能看到信息的变化的,以本文示例t1为例,我们对其做如下操作:
通过show create table t1,是能够看到前后显示信息的不同的。
原始表输出信息:
修改表后输出信息
结语
本文简要介绍了如何通过源码对MySQL show create table语句的执行流程进行学习和跟踪,
对其他 show 类型的语句如show create database,show create view,show create index等,具备不错的参考作用,有兴趣的朋友亦可做尝试和探索 :)
