与Teradata Vantage Optimizer实现多任务处理

2022-02-16 00:00:00 查询 并行 多个 执行 步骤

作者:Carrie Ballinger,Teradata 客户市场总监


你可以一边走路一边嚼口香糖吗?


这就是多任务处理。根据《梅里曼-韦伯斯特现代词典》,多任务处理就是在同一时间内进行多项任务。在我们的日常生活中,我们都有过多任务处理的经验。在做饭的时候,我们可以电话聊天;在看电视的时候,我们可以查看邮件;在上班通勤的路上,我们也在锻炼,等等。


而在数据库引擎里,多任务处理也是一项非常关键的能力。多任务处理能够允许多个不同的由用户提交的工作可以同时运行。如果引擎内缺乏多任务处理的能力,Teradata Vantage就无法在同一时间内支持成百上千的用户查询。


并发查询可能是数据库处理多项不同任务的一个明显的例子,而在Vantage平台内,还有另一个维度的多任务处理:数据库优化器会将多个并行的处理步骤嵌入到一次查询的执行计划中。


什么是查询步骤




在我们开始探索并行处理步骤之前,我们先看看查询的步骤是什么。在Vantage Optimizer(优化器)建立一个查询方案时,它会将需要做的工作拆分成多个大组,我们称为“步骤”。例如,一次查询中的步骤可以包括读取产品和库存表格,对它们使用相应的预测条件,合并相关数据行,重新拆分合并数据到不同的AMP并为将来的合并步骤做准备,等等。


每一个优化的查询步骤都会通过一则信息的形式从句法分析引擎(执行优化的虚拟处理器)输出到AMP(执行并行步骤的虚拟处理器),每次通常会处理一个步骤。所有参与到这次请求中的AMP都会同时参与到本次步骤的工作中。只有当所有的AMP都完成了个步骤之后,下一个步骤的任务才会被传递。


在每一个步骤结束之前,所有参与到此步骤工作中的AMP都需要和彼此沟通,确定所有的AMP都完成了该步骤的工作,并且准备好开始处理下一个步骤。将一个查询命令划分成这样的大组、而不是几百个细分的步骤,这样可以减少AMP之间过度的沟通。


在查询处理期间,AMP之间需要的协同配合越少,那么查询的效率就会越高。我们在白皮书《为并行处理和超越而生》(Born to be Parallel and Beyond)里名为“信号(semaphores)”的一章中,详细描述了数据库如何管理步骤结束时的工作。


并行步骤




通过同一时间处理查询计划中两个或多个查询步骤的方式,Optimizer(优化器)也可以加速查询完成的进度,这就是另一个维度的多任务处理过程。在Optimizer产出查询计划时,会检查一个新步骤的处理是否独立于在它之前的所有步骤。如果与这些步骤之间没有依赖关系,Optimizer就会规划并行处理这些步骤。这个时候一个查询开始时就可能同时进行四个步骤,分别扫描四个不同的对应表格。这些扫描可以在四个并行的步骤中完成,而多个步骤的处理会同时展开。


这就像是走进一家美容院,你可以同时美甲和修整脚趾。因为这些活动之间并不相互依赖,可以同时被不同的人完成。但是,在你做头发的时候就不能同时进行照片拍摄,因为拍照片之前是必须要完成发型造型的。


在使用并行步骤时,查询规划的方案可能类似于下图所展示的方案。



在上面的图表里,步骤1.1和步骤1.2可以同时进行,因为他们之间是彼此完全独立的。而步骤2.1需要步骤1.1和步骤1.2共同完成,因为它需要整合前两个步骤的输出结果,所以只能在前两个步骤完成之后再开始执行。到了下一个层级,步骤2.1和步骤2.2又是完全独立的,所以也可以被并行处理。


在这里要注意不要混淆并行查询的执行和并行步骤两个概念,这两件事情完全不同。并行查询的执行对于Teradata而言是基础的并行方案,此时所有的AMP都会同时参与到同一个查询中。而并行步骤则会在基本的并行查询之上再增加一个并行的维度,此时所有的AMP会在同一时间参与到一次查询中的多个步骤中。并行步骤不会代替并行查询,只会增强这种能力。


因为有了并行步骤,完成一次查询所需要消耗的资源会更多、而查询速度也会更快。我们回到那个美容院的例子,如果要同时做美甲和修脚趾甲,你就可以节约在美容院待着的一半的时间。


在制定一个查询方案时,Vantage Optimizer会探索每一个进行多任务处理的可能的机会。它会产出被称为“浓密计划”的规划,这时会大量地使用并行步骤,就像下图中右侧的图表所示。这和传统规划中使用连续型链接的方式是非常不同的。



好事过头,物极必反




一顿大餐会让人享受、同时使人健康。但如果你同时要吃3-4顿大餐,这种体验可能就不那么令人享受了,长期如此也会伤害身体健康。所有的好事都需要仔细检查、达到平衡、避免极端。


在Vantage平台内,这种针对并行步骤多任务处理的检查与平衡是由AMP来执行的,而在查询执行的同时,就会进行检查和平衡。Optimizer可能会在查询计划中建立10个并行步骤,但实际执行工作的AMP可能会有不同的内置技术,禁止同时处理3-4个不同的步骤。这就避免了任何一次查询引发的需求不平衡的状况发生。回到美容院的例子,如果所有的造型师都来给同一个人造型,那么新客户进到美容院的时候就会没人能给他提供服务。而更好的商业模式是在为一个客户更快地服务、和同时为多个客户服务之间达到平衡。这在数据库的工作中也是一样的。



并行性是Teradata查询领域高性能的基础。但并行性的呈现并不只是在多个AMP之间散发查询工作,还有更多不同的展现形式。Optimizer构建一个计划,以并行的方式同时执行不同的步骤时,也会在查询本身中体现并行性后获得的结果就是更快地执行查询,同时能够更完整地使用平台资源。


来源 https://mp.weixin.qq.com/s/UkagQ4Cmc1fkQRMkr_umRQ

相关文章