思考mysql内核之初级系列.pdfVIP

  1. 1、本文档被系统程序自动判定探测到侵权嫌疑,本站暂时做下架处理。
  2. 2、如果您确认为侵权,可联系本站左侧在线QQ客服请求删除。我们会保证在24小时内做出处理,应急电话:400-050-0827。
  3. 3、此文档由网友上传,因疑似侵权的原因,本站不提供该文档下载,只提供部分内容试读。如果您是出版社/作者,看到后可认领文档,您也可以联系本站进行批量认领。
查看更多
目 录 前言 1 mysql的启动过程 2我可以为你服务什么 ? 3办理业务的流程 4--innodb缓冲区管理 5information_schema不是innodb数据字典 6innodb文件管理 7innodb的hash表实现 8innodb的list算法 9innodb动态数组的实现 10mysql内核调试方法 11innodb的页编号 12innodb的簇描述结构 13innodb的簇页管理 14innodb的旧式记录结构 本文档使用 看云 构建 - 2 - 前言 前言 原文出处 :思考mysql内核之初级系列 作者 :yzyangwanfu 本系列文章经作者授权在看云整理发布 ,未经作者允许 ,请勿转载 ! 思考mysql内核之初级系列 有一天 ,两个不懂mysql内核的人想去了解mysql内核代码 ,两个人不是去调试代码、查 找资料 ,而是在那边思考。因为不了解内核 ,所以边思考边去验证。 本文档使用 看云 构建 - 3 - 1 mysql的启动过程 1 mysql的启动过程 有一天 ,两个不懂mysql内核的人想去了解mysql内核代码 ,两个人不是去调试代码、查找 资料 ,而是在那边思考。因为不了解内核 ,所以边思考边去验证。 使用的mysql代码是5.1.7 ,调试环境是windows平台下的vs2003。 ingxi :“alex ,你觉得mysql的启动过程会是什么样的呢 ?我们以银行为例吧。” Alex :“嗯 ,bingxi。早上银行开门了 ,会先准备好环境 ,然后开门迎客 ,mysql也是这 样。Mysql里面会有一个handle_connections_sockets函数 ,这个函数就好比是个叫号机 , 每个用户来了都会取个号 ,然后就会进行业务处理。” pthread_handler_t handle_connections_sockets(void *arg __attribute__((unu sed))) { …… while (!abort_loop) { select((int) max_used_connection,readFDs,0,0,0) 0) //有连接了则往下来执行 ,否则 一直等待 …… accept(sock, my_reinterpret_cast(struct sockaddr *) (cAddr),length) //接受请求 …… create_new_thread(thd); } //abort_loop 1,则执行到这里进行推出。今天业务不处理了 } Bingxi :“啊 ,这里面存在两种可能的 ,1 )用户来一个就分配一个工作人员处理 ,2 )将排 号的人丢进工作队列 ,根据叫号机到指定窗口获取服务。前者的场景适合于请求量大 ,并且 需要响应速度特别快的情况 ,但是分配也会有个限制 ,所谓的最大连接数 ,这样的情况常见 本文档使用 看云 构建 - 4 - 1 mysql的启动过程 于互联网行业 ,相应地我们可以看到机器的负载变化范围特别大。同样的 ,这也是它的一个 弊端 ,假设每个业务都复杂 (消耗资源型sql语句 ),同时处理的话 ,机器会支撑不住 ,这时 候第二种方法就比较好 ,这种情况属于事务性场景。” Alex :“嗯 ,是的。Mysql选择的是前者 ,oracle提供两种方法供选择。我们继续往下面的 代码看 ,如果我们配置了线程缓存 ,且有可用的缓存 ,则唤醒该线程 ,否则创建新的线 程。” static void create_new_thread(THD *thd) { if (cached_thread_count wake_thread) {

文档评论(0)

max + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档