摘要:
为了学习mysql整体的体系结构,希望通过一步一步的patch前人的修改,然后通过分析前人的修改,理解patch的含义,加以理解,争取在同等基础上优化patch或者动手加入一个类似的patch,达到学习mysql体系结构,摸清各个mysql的patch的特性。
关键词:mysql patch innodb
预备:mysql-5.5.20 mysql-5.5.20.io_stat.patch centos 6.3 x64虚拟环境以及必要的rpm软件包
正文:
第一步:mysql-5.5.20添加patch,详见本人《innodb存储引擎之综述》
第二步:编译并安装,详见本人《innodb存储引擎之mysql的debug环境搭建》
第三步:查看patch特性,详见 网易杭研院 关于《mysql IO统计实现》
第四步:自我分析
个人感觉增加这个新特性其实说起来是挺简单的,对于新人学习mysql代码架构还是挺有帮助的,小而全面,短而精湛;
主题思想就是通过innodb存储引擎层次通过函数指针传递使连接控制层THD获得该连接对逻辑和物理页面的访问统计,沿着函数指针
_io_stat_func_ptr io_stat_func_ptr;
io_stat_func_ptr = innobase_hton->io_stat_ptr;
hton->io_stat_ptr = thd_io_incr;
个人思考:
1、数据库连接逻辑层:(THD layer)THD->thd_io_incr->(innodb layer)innobase_hton->io_stat_ptr->(通过io_stat_func_ptr函数指针调用实现innodb层的统计)(io_stat_func_ptr其实就是THD安排在innodb层的探针)
2、以后个人实现相关功能,只要牢牢把握io_stat_func_ptr的类似探测功能就好,传导途径仍然是通过指针赋值即可。
这条道路基本上就可以完美的连接innodb引擎和THD连接相关的PHY和LOG页面访问情况。
3、自我测试:创建一个叫做is_my_func_ptr作为探针争取在profile中体现,结果取值和phy一样。
在THD层的函数定义为thd_is_my,hander层的函数定义为is_my_ptr,innodb层的函数定义为is_my_func_ptr。
SQL profile层的函数定义Is_mys()。
引用:网易杭研后台技术中心的博客《MYSQL IO统计实现》