没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
COM_QUERY:
sql/sql_parse.cc
dispatch_command()
sql/sql_parse.cc
COM_INIT_DB/COM_REGISTER_SLA
VE/COM_RESET_CONNECTION/...
//词法、语法解析词法、语法解析
parse_sql()
//重写一些命令,非查询语句逻辑优化重写一些命令,非查询语句逻辑优化
mysql_rewrite_query()
sql/sql_parse.cc
mysql_parse()
sql/sql_parse.cc
//执行查询执行查询
mysql_execute_command()
sql/sql_parse.cc
//执行执行 select语句语句
SQLCOM_SELECT::
execute_sqlcom_select()
sql/sql_select.cc
handle_query()
//查询缓存查询缓存
query_cache
保存保存
sql/sql_select.cc
//查询优化查询优化
bool SELECT_LEX::optimize(THD *thd)()
//执行计划执行计划
select->join->exec();
sql/sql_executor.cc
void JOIN::exec()
sql/sql_parse.cc
//从连接中 读 取 一 个 命令并执行 它 ( 查 询或简从连 接 中 读 取 一个命令并 执 行 它 (查询或简
单命 令 ) 。单命 令 ) 。
bool do_command(THD*thd)
sql/conn_handler/connection_handler_one_thread.cc
//单线程处理所有的连接单线程处理所有的连接
bool One_thread_connection_handler::add_connection(Ch
annel_info* channel_info)
sql/conn_handler/connection_handler_one_thr
ead.cc
1. my_thread_init()
2.THD* thd= channel_info->create_thd();
3. Global_THD_manager *thd_manager= Glob
al_THD_manager::get_instance();
thd_manager->add_thd(thd);
4. while (thd_connection_alive(thd))
{
if (do_command(thd))
break;
}
sql/sql_parse.cc
//获取查询请求获取查询请求
rc= thd->get_protocol()->get_co
mmand(&com_data, &command
);
sql/protocol_classic.cc
int Protocol_classic::get_command(COM_DATA *co
m_data, enum_server_command *cmd)
sql/conn_handler/connection_handler_per_thread.cc
//一个线程处理一个连接一个线程处理一个连接
bool Per_thread_connection_handler::add_connection(Ch
annel_info* channel_info)
sql/conn_handler/connection_handler_per_thre
ad.cc
//检查是否存在休眠检查是否存在休眠 idle的线程,存在则唤醒的线程,存在则唤醒
1.check_idle_thread_and_enqueue_connection(
channel_info)
//不存在,则生成一个线程不存在,则生成一个线程
2.error= mysql_thread_create(key_thread_one_
connection, &id,
&connection_attrib,
handle_connection,
(void*) channel_info);
sql/conn_handler/connection_handler_per_thre
ad.cc
//线程回调函数线程回调函数 ,线程实际做的事情线程实际做的事情
extern "C" void *handle_connection(void *arg){
1.my_thread_init()
//创建创建 mysqld任务线程描述符,它封装了一个客户端连接请任务线程描述符,它封装了一个客户端连接请
求的所有信息求的所有信息
2.THD *thd= init_new_thd(channel_info);
3.thd_prepare_connection(thd))
4. while (thd_connection_alive(thd))
{
if (do_command(thd))
break;
}
}
sql/conn_handler/connection_handler_manager.cc
void
Connection_handler_manager::process_new_connection(C
hannel_info* channel_info){
//检查连接数检查连接数
1.check_and_incr_conn_count()
//增加连接增加连接
2.m_connection_handler->add_connection(channel_info))
}
sql/conn_handler/connection_acceptor.h
//循环接受用户的连接请求循环接受用户的连接请求
void connection_event_loop(){
Channel_info *channel_info= m_listener->listen_for_connec
tion_event();
if (channel_info != NULL)
mgr->process_new_connection(channel_info);
}
sql/mysqld.cc:4416
int mysqld_main(int argc, char **argv){
//初始化初始化
network_init()
//轮询连接事件轮询连接事件
mysqld_socket_acceptor->connection_event_loop();
}
sql/mysqld.cc
static bool network_init(void){
//socket监听器初始化监听器初始化
mysqld_socket_acceptor->init_connection_acceptor())
}
三更寒天
- 粉丝: 77
- 资源: 327
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0