中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

关键函数流程

在并行框架中,分为leader线程和worker线程。

leader线程的make_pq_leader_plan函数负责判断语句是否可以并行、根据原始的执行计划生成leader自己的执行计划,然后调用ParallelScanIterator这个迭代器去执行。

  • Init

    在init过程,leader线程会先调用add_scan那张可以并行的表进行切分,划分成多个数据分片,把所有分片都放在一个队列中。然后调用mysql_thread_create去创建若干个worker线程,worker线程循环从队列里面会拿一个分片去执行。直到所有的分片都被执行完毕。

  • Read

    Leader的read过程,会调用gather模块从消息队列中拿数据,如果需要,然后做一些额外的操作,比如count计数、sum操作等aggregate操作。最后把数据往上层传递到客户端。

  • End

    End操作是迭代器的最后收尾操作,比如内存的释放,返回读取数据的状态等。

worker线程是由leader线程来启动创建的,根据并行度参数来控制启动多少个worker线程,worker线程会先调用make_pq_worker_plan生成自己的执行计划,在这个过程中,会把原来执行计划中可以替换的一个迭代器替换为并行的迭代器PQblockScanlterator。然后调用PQblockScanIterator的read函数,该函数调用与innodb存储引擎的交互接口,从innodb中获取数据,最后调用send_data函数,把数据发送到消息队列中,供给leader线程取用。