放大器和线轴之间如何相互作用?仔细阅读EXPLAIN计划

时间:2018-10-12 22:19:55

标签: teradata

有人可以帮助我仔细阅读EXPLAIN计划吗?我想在阅读这些方面变得更好,但它们仍然使我感到困惑。 我已经用粗体写了我所理解的一切,并提出了问题。

说明 选择 区分程序 从dbadmin.v_DBATraceLog;

1)首先,我们锁定dbadmin.DBATraceLog进行访问。 (锁定表)

2)接下来,我们从dbadmin.DBATraceLog通过以下步骤执行全AMP RETRIEVE步骤: 全行扫描的方式(因此是全表扫描)

无残留条件进入阀芯1 (group_amps),(为什么叫假脱机1?每个安培有多少个假脱机,因为我认为每个用户只有一个假脱机空间?为什么说group_amps?所有安培都能访问一个公共的假脱机1或吗?线轴1是每个放大器的本地线轴吗?)

通过哈希码重新分配给所有AMP。 (我猜这些行离开后台处理程序1,现在在每个AMP上输入磁盘空间)

然后我们进行排序以订购假脱机1 (nvm,它仍在假脱机1上吗?)

通过假脱机字段1中的排序键(排序使记录相邻,我想这是可以消除重复的方法) 消除重复的行。线轴1的大小估计为 低置信度为4,592行。此步骤的估计时间 是0.03秒。

3)最后,我们向所有涉及的AMP发送一个END TRANSACTION步骤 在处理请求中。 ->将假脱机1的内容发送回给用户 陈述1.总估计时间为0.03秒。


大多数情况下,我不了解AMPS和假脱机如何交互。我的理解是,这是保留结果或暂存记录以进行重新分配的中间空间,因为联接必须在本地进行。我认为这是所有放大器都能平等使用的公用空间(尽管如果一个放大器需要多于1 / num_of_amps的线轴空间,则该过程将中止)。

为什么在Explain计划中有用于假脱机的编号?线轴1或3在哪里?每个放大器上有一个线轴1吗?在这种情况下,group_amps是什么意思?

1 个答案:

答案 0 :(得分:0)

每个查询可能有多个假脱机,每个中间结果一个,最后一个结果集一个。中间线轴在一个步骤中创建,在后续步骤(或多个步骤)中使用,最后被删除,由(LastUse)指示。将结果集的最后一行传递到客户端后,将释放答案集假脱机(假脱机n的内容被发回)。

编号为 n 的线轴可能存在于单个AMP,多个AMP或所有AMP上。 (group_amps)表示优化器假定结果很小,并且只能在某些AMP上创建假脱机(不会参与下一步)。

假脱机编号没有意义,它只是优化程序分配的一个编号(尽管这些编号通常是连续的),当您在Viewpoint的QueryMonitor中检查同一查询时,它将是一个不同的编号(通常更高)

假脱机可以是

  • 本地:每个AMP直接后台处理行,而无需与其他AMP交互
  • 由(列列表)的哈希码重新分配:优化器为后台打印分配主索引,并且根据这些列的哈希分配数据。
  • 在所有AMP上重复:每行都复制到每个AMP

SQL Request and Transaction Processing manual

中有关于Explain输出的更多详细信息