简单记录,可能有误,主要记录重要的接口以备后用。
<人力资源字体大小:18 px;空白:正常;background - color: # FCFAF2; border-top-style:固体!重要;border-top-color: # D9D9D9 !重要;”/>一、操作说明
我建了一个简单的表,插入一个简单的数据。
<>以前mysql>); 查询好,sec) mysql>插入testin); 查询好,sec)
主要跟踪这个简单的插入语句在插入过程的经历。主要集中在插入流程和提交流程,不包含前期的其他阶段。
下面是这个语句经历的所有的阶段:
主要集中在:
-
<李>
更新
李>
<李>
查询结束
李>
两个阶段
二、大概流程
1、乐观插入的流程 <>以前Sql_cmd_insert:: mysql_insert 祝辞Sql_cmd_insert:: mysql_insert 在切换会话状态为更新 在进入插入逻辑 在处理程序::ha_write_row 祝辞ha_innobase:: write_row 祝辞row_insert_for_mysql 祝辞row_insert_for_mysql_using_ins_graph 祝辞trx_start_if_not_started_xa_low 祝辞trx_start_low激活事物,事物状态由not_active变为活跃 祝辞row_ins_step 祝辞row_ins 祝辞row_ins_index_entry_step 祝辞row_ins_index_entry 祝辞row_ins_clust_index_entry 祝辞row_ins_clust_index_entry_low 祝辞btr_cur_search_to_nth_level查找定位数据 祝辞btr_cur_optimistic_insert进行乐观插入 祝辞btr_cur_ins_lock_and_undo 祝辞trx_undo_report_row_operation 祝辞trx_undo_page_report_insert记录插入的撤销记录 祝辞trx_undo_page_set_next_prev_and_add 祝辞trx_undof_page_add_undo_rec_log记录撤销的日志入缓冲区 祝辞page_cur_tuple_insert进行插入元组插入,及实际的插入操作 祝辞page_cur_insert_rec_write_log记录插入入的日志缓冲区 祝辞binlog_log_row 祝辞write_locked_table_maps 官祝辞::binlog_write_table_map 祝辞binlog_start_trans_and_stmt 祝辞binlog_cache_data: write_event binlog事件写入到binlog缓存 2,其提交流程 <>之前进入提交逻辑 mysql_execute_command 在切换会话状态为查询祝辞trans_commit_stmt 祝辞ha_commit_trans 祝辞MYSQL_BIN_LOG:准备 祝辞ha_prepare_low 祝辞binlog_prepare生成last_commit 祝辞innobase_xa_prepare 祝辞trx_prepare_for_mysql 祝辞trx_prepare转换事物状态为,事物状态由主动变为准备 祝辞MYSQL_BIN_LOG:提交 祝辞MYSQL_BIN_LOG:: ordered_commit 祝辞MYSQL_BIN_LOG:: process_flush_stage_queue 祝辞ha_flush_logs 祝辞plugin_foreach_with_mask 祝辞flush_handlerton 祝辞innobase_flush_logs 祝辞log_buffer_flush_to_disk 祝辞log_write_up_to 祝辞log_group_write_buf innodb组提交,确保落盘 祝辞MYSQL_BIN_LOG:: flush_thread_caches 祝辞binlog_cache_mngr::冲洗 祝辞binlog_cache_data:刷新binlog缓存进行冲到binlog文件 祝辞MYSQL_BIN_LOG: sync_binlog_file fsync binlog文件进行操作系统缓存落盘 祝辞MYSQL_BIN_LOG:: process_commit_stage_queue 祝辞ha_commit_low 祝辞innobase_commit 祝辞innobase_commit_low 祝辞trx_commit_in_memory innodb进行提交,事物状态由准备变为not_active可以看到整个语句的流程大概为
-
<李>
会话状态转换为更新
李> <李>激活事物状态由not_active变为活跃
李> <李>查找定位数据
李> <李>进行乐观插入
-
<李>
记录插入的撤销记录
李>
<李>
记录撤销的重做日志入重做缓冲区
李>
<李>
进行插入元组插入,及实际的插入操作
李>
<李>
记录插入的重做日志入重做缓冲区
李>
binlog事件写入到binlog缓存
李