MySQL连接查询流程源码分析
来源:互联网 发布:淘宝店铺全屏导航 编辑:程序博客网 时间:2024/05/15 09:09
初始化
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
0 0
- MySQL连接查询流程源码分析
- MySQL查询优化器源码分析--整体流程
- postgresql查询分析源码分析-流程
- MySQL查询优化器源码分析--多表连接优化算法入口,choose_plan()
- MySQL查询优化器源码分析--多表连接优化算法之三,best_extension_by_limited_search
- MySQL查询优化器源码分析
- MySQL查询优化器源码分析
- MySQL查询优化器源码分析--目录
- 结合源码分析Solr&Lucene查询打分的工作流程
- PostgreSQL查询优化器源码分析--整体流程
- HBase1.0.0源码分析之Client启动连接流程
- zeromq源码分析–TCP连接处理流程
- Android Gatt连接流程源码分析之ClientIf注册
- mysql 源码学习笔记:客户端连接处理流程
- 【MySQL性能优化】MySQL查询优化器源码分析
- MySQL源码分析——代码结构与基本流程
- MySQL查询优化器源码分析--多表连接优化算法之一,optimize_straight_join()按表的指定顺序求解最优查询计划
- MySQL查询优化器源码分析--多表连接优化算法之二,find_best(),搜索表之间的各种组合以得到最优的查询计划
- WCF异常信息:由于内部错误,服务器无法处理该请求
- iOS侧滑菜单实现
- 用javascript打印空心金字塔
- cmake编译opencv时的错误与解决
- maven核心,pom.xml详解
- MySQL连接查询流程源码分析
- 有趣的代码片段
- 快捷键让SublimeText在编文件快速在浏览器打开
- 使用
- 硬币找钱问题
- 每天清晨叫醒你的是闹钟还是是梦想
- poj 2189 Romeo Meets Juliet
- 利用xcode的lipo 编译合模拟器和真机通用的静态类库
- ZOJ 3324 Machine(线段树区间合并)