mysql之Percona XtraDB集群集群线程模型

  

  Percona XtraDB集群创建一组线程来为其操作提供服务,这些线程与现有的MySQL线程无关。有三个主要线程组:   

  

        一、灌肠器线程   

  

  灌肠器线程应用从其他节点接收的写入集。写消息直接通过gcv_recv_thread。   

  

  使用wsrep_slave_threads变量控制线程的数量。默认值是1,这意味着至少有一个wsrep灌肠器线程存在来处理请求。   

  

  灌肠器线程等待一个事件,一旦它捕获到事件,它就使用普通的从应用线程路径应用它,并用wsrep-customization中继日志信息应用路径。这些线程与从属工作线程类似(但不完全相同)。   

  

  使用“申请和提交监控”可以实现协调。一个事务通过两个重要的状态:申请和提交。每个事务都向自己申请的监控器进行注册,其申请顺序已经定义,因此,在应用此事务之前,应用所有具有小于此事务序号的序号(seqno)的事务。提交也是这样做的(last_left>=trx_.depends_seqno ())。   

  

        二、回滚线程   

  

  只有一个回滚线程在发生冲突时执行回滚。   

  

  ? ?并行执行的事务可能会发生冲突并可能需要回滚又是;   
  ? ?灌肠器事务总是优先于本地事务。这很自然,因为灌肠器事务已被群集接受,并且一些节点可能已经应用了它们。本地冲突交易仍然有一个回滚窗口。   

  

  所有需要回滚的事务都被添加到回滚队列中,并通知回滚线程。回滚线程然后迭代队列并执行回滚操作。   

  

  如果事务在节点上处于活动状态,并且节点从群集组接收到与本地活动事务冲突的事务写入集,则此类本地事务始终被视为受影响事务以回滚。   

  

  出现冲突时,事务处于提交状态或执行阶段。执行阶段的本地事务被强行杀戮,以等待灌肠器事务被允许继续进行。提交阶段的本地事务失败并出现认证错误。   

  

        三,其他线程   

  <编辑>   1,服务线程      

  此线程在启动时创建并用于执行辅助服务。它有两个主要功能:   

  

  ? ?在高速缓存的写入集被清除到所述级别后,它释放GCache缓冲区只   
  ? ?它通知群集组各个节点已提交到此级别的事务。每个节点都维护有关集群中其他节点的一些基本状态信息。收到该消息后,信息将在此本地元数据中更新。   

  <编辑>   2,接收线程      

  该gcs_recv_thread线程是第一个查看组中收到的所有消息的线程。   

  

  它会尝试根据收到的每条消息分配操作。它将这些消息添加到中央FIFO队列中,然后由灌肠器线程处理。消息可以包含不同的操作,如状态更改,配置更新,流量控制等。   

  

  一个重要的操作是处理一个写集,它实际上是将事务应用于数据库对象。   

  <编辑>   3,Gcomm连接线程      

  gcomm连接线程GCommConn: run_fn用于协调低层组通信活动。把它想象成一个用于沟通的黑匣子。   

  
  4,基于动作的线程   
  

  除上述之外,还有一些线程是按需创建.SST为捐助者和工匠创建线程(最终派生出一个子进程来托管所需的SST脚本),坚持创建接收者和异步发送者线程,PageStore创建后台线程以删除创建的文件。   

  

  如果启用校验和并且复制的写入集足够大,则校验和将作为单独线程的一部分完成。   

  

        四、参考链接   

  

     https://www.percona.com/doc/percona-xtradb-cluster/LATEST/manual/threading_model.html      

  

  ,Leshami 版权声明:本文为博主原创文章,转载请附上博文链接!   

  

  
  

mysql之Percona XtraDB集群集群线程模型