MySql原始碼分析

2021-09-25 23:13:19 字數 1866 閱讀 4831

2.請求資料流

原始碼才是王道。

1. 主函式sql/mysqld.cc中,**如下:
//標準入口函式

int main(int argc, char **ar**)

2.監聽連線: sql/mysqld.cc - handle_connections_sockets:
pthread_handler_t handle_connections_sockets(void *arg __attribute__((unused))) 

}

3. 建立連線 sql/mysqld.cc create_new_thread/create_thread_to_handle_connection:
static void create_new_thread(thd *thd) 

++connection_count;

// 將新連線加入到thread_scheduler的連線佇列中。

thread_scheduler.add_connection(thd);

}

4. 執行緒排程器thread_scheduler - create_thread_to_handle_connection
void create_thread_to_handle_connection(thd *thd)  else 

}

5.handle_one_connection
pthread_handler_t handle_one_connection(void *arg) 

}

6.執行語句 sql/sql_parse.cc - do_command函式
bool do_command(thd *thd)
7.指令分發 sql/sql_parse.cc定義dispatch_command
bool dispatch_command(enum enum_server_command command, thd *thd, char* packet, uint packet_length) 

}

8.sql/sql_parse.cc mysql_parse函式負責解析sql
void mysql_parse(thd *thd, const char *inbuf, uint length, const char ** found_semicolon) 

}

9.執行命令 mysql_execute_command
int mysql_execute_command(thd *thd) 

}

10.接下來sql/sql_insert.cc中mysql_insert函式
bool mysql_insert(thd *thd,

table_list *table_list, // 該insert要用到的表

list&fields, // 使用的項

....)

}

11.接著看真正寫資料的函式write_record (在sql/sql_insert.cc),精簡**如下:
int write_record(thd *thd, table *table,copy_info *info)  else 

}//儲存引擎抽象的handler api !

mysql5 5 原始碼分析( )

做個備份,好記性不如爛筆頭。sloccount算了一下,整個工程的 是百萬行級的,c 和ascic為主。從規模來看,絲毫不遜色於wps文字。時隔一年半,再把c 撿起來。cpp 631203 49.60 ansic 543818 42.74 507268 storage cpp 352539,ansi...

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

mysql原始碼公升級 MySQL原始碼公升級

mysql原始碼公升級 公升級的方法一般有兩類 1.利用mysqldump來直接匯出sql檔案,匯入到新庫中,這種方法是最省事兒的,也是最保險的,缺點的話,也顯而易見,大庫的mysqldump費時費力。2.直接替換掉mysql的安裝目錄和my.cnf,利用mysql upgrade 來完成系統表的公...