MySQL连接查询流程源码
2024-10-20 20:41:53
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
最新文章
- 【FTP】FTP文件上传下载-支持断点续传
- Java学习笔记 04 类和对象
- 【转】【WebDriver】不可编辑域和日历控件域的输入 javascript
- SQL Server 的通用分页显示存储过程
- jq 判断输入数字
- 让Windows蓝屏死机
- Form( 表单) 组件
- Java WebService把Date类型转换成XMLGregorianCalendar
- Android_简单笔记一
- javascript基础(三)运算
- Mongodb 导出json 和csv 格式数据
- Python模块学习------ 正则表达式
- How to move lobsegment and lobindex to a different Tablespace
- Async CallBack promise fetch
- Git Pull Github and Gitee or Gitlab
- Very very important SQL Server article
- PHP接收json格式的POST数据
- 单链表LRU
- 服务器启动脚本 /etc/rc.local
- myeclipse/eclipse安装反编译插件jadclipse
热门文章
- pip3的国内安装源
- opencv yuvNV21转RGB
- JAVA垃圾回收-可达性分析算法
- Sublime用正则表达式进行逗号分隔实现列的替换
- 【linux基础】Ubuntu16.04桌面突然卡住怎么办?
- [LeetCode] 310. Minimum Height Trees 最小高度树
- php_mvc实现步骤十
- Spring Boot 项目中的 parent
- 使用nohup命令编写shell脚本启动java应用,并使用外挂配置文件
- python 之 Django框架(ORM常用字段和字段参数、关系字段和和字段参数)