1. 首页
  2. IT资讯

二十:从库MTS多线程并行回放(二)(笔记)

欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下:

如果图片不能显示可查看下面链接:
https://www.jianshu.com/p/d636215d767f

一、工作线程执行Event

  外部循环  slave_worker_exec_job_group    ->pop_jobs_item 出队 获取event 但是不删除      如果队列为空则等待      stage_slave_waiting_event_from_coordinator      Waiting for an event from Coordinator    ->进入循环      如果是GTID EVENT 标记事物开始      记录读取event时间      Slave_worker::slave_worker_exec_event 执行event      -> 如果是XID          Xid_apply_log_event::do_apply_event_worker              -> Slave_worker::commit_positions             -> 设置各种变量 将会出现在worker info里面 这里也可以看到这些信息是group的checkpoint信息                    当前执行的位置:                    strmake(group_relay_log_name, ptr_g->group_relay_log_name,sizeof(group_relay_log_name) - 1);                    group_relay_log_pos= ev->future_event_relay_log_pos;                    set_group_master_log_pos(ev->common_header->log_pos);                    set_group_master_log_name(c_rli->get_group_master_log_name());                    检查信息:                    strmake(checkpoint_relay_log_name, ptr_g->checkpoint_relay_log_name,sizeof(checkpoint_relay_log_name) - 1);                    checkpoint_relay_log_pos= ptr_g->checkpoint_relay_log_pos;                    strmake(checkpoint_master_log_name, ptr_g->checkpoint_log_name,sizeof(checkpoint_master_log_name) - 1);                    checkpoint_master_log_pos= ptr_g->checkpoint_log_pos;                    checkpoint_seqno= ptr_g->checkpoint_seqno;                        for (uint pos= ptr_g->shifted; pos < c_rli->checkpoint_group; pos++) //重新设置位图 因为checkpoint已经                        {                                                                     //ptr_g->shifted是GAQ中出队的事务个数                          if (bitmap_is_set(&group_shifted, pos))                            //这里就需要偏移掉出队的事务,恢复已经不需要了                          bitmap_set_bit(&group_executed, pos - ptr_g->shifted);                        }                    bitmap_set_bit(&group_executed, ptr_g->checkpoint_seqno);//在本次事务相应的位置设置为1               -> 进行flush_info(force)操作刷盘 将信息写入到worker info 表中          -> error= do_commit(thd); //做提交操作     ->remove_item_from_jobs 在队列中删除这个event       如果是XID event 则退出循环 代表整个 事物执行完成      Slave_worker::slave_worker_ends_group       -> get_commit_order_manager()->report_commit(this);       ->更新Slave_job_group信息              ptr_g->group_master_log_pos= get_group_master_log_pos(); //更新 job group信息              ptr_g->group_relay_log_pos= group_relay_log_pos;              my_atomic_store32(&ptr_g->done, 1);              last_group_done_index= gaq_index;              last_groups_assigned_index= ptr_g->total_seqno;              reset_gaq_index();              groups_done++; //更新GROUP信息 这里也可以看到GROUP的信息来自work的类             ->  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7728585/viewspace-2649960/,如需转载,请注明出处,否则将追究法律责任。

主题测试文章,只做测试使用。发布者:深沉的少年,转转请注明出处:http://www.cxybcw.com/183960.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code