MySQL连接查询流程源码
http://blog.itpub.net/29510932/viewspace-2129300/
初始化:
点击(此处)折叠或打开
- main
- |-mysqld
- |-my_init // 初始话线程变量,互斥量
- |-load_defaults // 获取配置
- |-init_common_variables // 初始化变量
- |-init_server_components // 初始化插件
- | |-plugin_init
- | | |-plugin_initialize
- | |-initialize_storage_engine
- |-network_init // 监听网络
- |-grant_init
- |-servers_init
- |-udf_init
插件启动:
点击(此处)折叠或打开
- main
- |-mysqld_main
- |-init_server_components
- |-plugin_init
- |-plugin_initialize
- |-ha_initialize_handlerton
- |-innobase_init
登录过程:
点击(此处)折叠或打开
- main
- |-mysqld_main
- |-network_init // 建立socket监听,一个针对网络,一个针对unix域
- |-handle_connections_sockets
- |-poll
- |-mysql_socket_accept // 和客户端建立连接
- |-create_new_thread // 针对每个socket连接建立一个新的线程
- |-create_thread_to_handle_connection
- |-waiting_thd_list->push_back(thd);mysql_cond_signal(&COND_thread_cache); // 已有连接处理线程时,通过信号唤醒,处理线程函数为pfs_spawn_thread
- |-mysql_thread_create(启动的线程执行函数,inline_mysql_thread_create)
- |-spawn_thread_v1
- |-pthread_create(pfs_spawn_thread)
处理连接:
点击(此处)折叠或打开
- pfs_spawn_thread
- |-handle_one_connection
- |-do_handle_one_connection
- |-MYSQL_CALLBACK_ELSE(thread_scheduler, init_new_connection_thread, (), 0)
- | |-init_new_connection_handler_thread
- |-thd_prepare_connection
- | |-login_connection // 判断是否可以login,不可以则断开连接返回错误
- | | |-check_connection
- | | | |-acl_authenticate
- | | | |-do_auth_once
- | | | |-native_password_authenticate
- | | | |-server_mpvio_write_packet
- | | | | |-send_server_handshake_packet // 发送handshake包到客户端
- | | | | |-my_net_write
- | | | | | |-net_write_buff // 将数据写入到内存
- | | | | |-net_flush // 将内存中数据发送到网络
- | | | |-server_mpvio_read_packet // 从客户端接收Login Request信息
- | | | |-my_net_read
- | | |-Protocol::end_statement
- | | |-Protocol::send_ok
- | | |-net_send_ok // 发送response ok
- | | |-my_net_write
- | |-prepare_new_connection_state
- |-do_command
- |-dispatch_command
- |-mysql_parse
select命令:
点击(此处)折叠或打开
- pfs_swpawn_thread
- |-handle_one_connection
- |-do_handle_one_connection
- |-do_command
- |-dispatch_command
- |-mysql_parse
- |-parse_sql
- | |-MYSQLparse
- |-mysql_execute_command
- |-select_precheck
- | |-check_table_access
- |-execute_sqlcom_select
- | |-open_normal_and_derived_tables
- | |-open_tables
- | | |-open_and_process_table
- | | |-open_table(THD *thd, TABLE_LIST *table_list, Open_table_context *ot_ctx)
- | | |-Table_cache::get_table
- | | |-get_table_share_with_discover
- | | | |-get_table_share
- | | | |-open_table_def
- | | |-my_malloc // 申请表数据结构
- | | |-open_table_from_share
- | | |-handler::ha_open
- | | |-ha_innobase::open
- | | |-dict_table_open_on_name
- | | |-dict_load_table
- | | |-btr_pcur_is_on_user_rec
- | | |-dict_load_table_low
- | | | |-dict_mem_table_create
- | | |-fil_space_for_table_exists_in_mem
- | | |-fil_open_single_table_tablespace // 打开表空间文件
- | |-mysql_handle_derived
- |-handle_select
- |-mysql_select
- |-mysql_prepare_select
- | |-JOIN::prepare
- |-mysql_execute_select
- |-JOIN::exec
- |-select_send::send_result_set_metadata
- | |-Protocol::send_result_set_metadata
- |-do_select
- |-sub_select
- |-evaluate_join_record
- |-end_send
- |-select_send::send_data
- |-Protocol::write
MySQL连接查询流程源码的更多相关文章
- [Android]Android系统启动流程源码分析
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5013863.html Android系统启动流程源码分析 首先 ...
- 转:InnoDB Crash Recovery 流程源码实现分析
此文章转载给登博的文章,给大家分享 InnoDB Crash Recovery 流程源码实现分析 Crash Recovery问题 本文主要分析了InnoDB整个crash recovery的源码处理 ...
- Spark(五十一):Spark On YARN(Yarn-Cluster模式)启动流程源码分析(二)
上篇<Spark(四十九):Spark On YARN启动流程源码分析(一)>我们讲到启动SparkContext初始化,ApplicationMaster启动资源中,讲解的内容明显不完整 ...
- 【图解源码】Zookeeper3.7源码分析,包含服务启动流程源码、网络通信源码、RequestProcessor处理请求源码
Zookeeper3.7源码剖析 能力目标 能基于Maven导入最新版Zookeeper源码 能说出Zookeeper单机启动流程 理解Zookeeper默认通信中4个线程的作用 掌握Zookeepe ...
- Netty 学习(五):服务端启动核心流程源码说明
Netty 学习(五):服务端启动核心流程源码说明 作者: Grey 原文地址: 博客园:Netty 学习(五):服务端启动核心流程源码说明 CSDN:Netty 学习(五):服务端启动核心流程源码说 ...
- [Android]从Launcher开始启动App流程源码分析
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5017056.html 从Launcher开始启动App流程源码 ...
- mysql连接查询经典小例题
mysql连接查询: Mysql连接查询支持多表连接 对同一张表可以重复连接多次(别名在多次连接同一张表时很重要) 例题1: 下面有2张表 teams表 比赛结果表:result 问题: 得出一张表: ...
- Spring加载流程源码分析03【refresh】
前面两篇文章分析了super(this)和setConfigLocations(configLocations)的源代码,本文来分析下refresh的源码, Spring加载流程源码分析01[su ...
- Android Activity启动流程源码全解析(1)
前言 Activity是Android四大组件的老大,我们对它的生命周期方法调用顺序都烂熟于心了,可是这些生命周期方法到底是怎么调用的呢?在启动它的时候会用到startActivty这个方法,但是这个 ...
随机推荐
- js写评价的星星
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/ouqi_qiou/article/det ...
- 【java爬虫】利用webmagic框架实战demo
webmagic框架:http://webmagic.io/ WebMagic的结构分为Downloader.PageProcessor.Scheduler.Pipeline四大组件 PageProc ...
- Qt编写气体安全管理系统29-跨平台
一.前言 Qt的跨平台特性是非常厉害的,本来作为C++来说,跨平台的特性比JAVA还要好,只不过学习难度更大,所以大家更理解的跨平台是JAVA,Qt的跨平台特性是我见过的所有开发环境和语言中最厉害的, ...
- 开发日记:常用BAT批处理
备份文件:BackupSourceCode.bat ::自动备份当前文件夹 ::by luomg, 21:15 2010-10-13 ::minguiluo@163.com @echo off tit ...
- Javascript-基本使用
本章向您提供了展示 JavaScript 能力的部分实例. JavaScript 能够改变 HTML 内容 getElementById() 是多个 JavaScript HTML 方法之一. 本例使 ...
- [ Mongodb ] 全量备份和增量备份
1. 前言 由于线上的mongodb 数据体量越来越大,如果没有完善的备份方案,发生故障势必造成业务很长时间的暂停.参考了网上方案,写出以下总结和备份方案: 备份方案分为两种:全备和增量备份,二者结合 ...
- [LeetCode] 114. Flatten Binary Tree to Linked List 将二叉树展平为链表
Given a binary tree, flatten it to a linked list in-place. For example, given the following tree: 1 ...
- Kubernetes 控制器之 Service 讲解(七)
一.背景介绍 我们这里准备三台机器,一台master,两台node,采用kubeadm的方式进行安装的,安装过程大家可以参照我之前的博文. IP 角色 版本 192.168.1.200 master ...
- php实用功能小记
1.任意数目的参数 function fun(){ $args = func_get_args(); foreach ($args as $k => $v) { echo "arg&q ...
- [03]Go设计模式:工厂模式(Factory Pattern)
目录 工厂模式 一.简介 二.代码 三.参考资料 工厂模式 一.简介 工厂模式(Factory Pattern)是软件设计中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象 ...