有人可以帮助我仔细阅读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是什么意思?
答案 0 :(得分:0)
每个查询可能有多个假脱机,每个中间结果一个,最后一个结果集一个。中间线轴在一个步骤中创建,在后续步骤(或多个步骤)中使用,最后被删除,由(LastUse)指示。将结果集的最后一行传递到客户端后,将释放答案集假脱机(假脱机n的内容被发回)。
编号为 n 的线轴可能存在于单个AMP,多个AMP或所有AMP上。 (group_amps)表示优化器假定结果很小,并且只能在某些AMP上创建假脱机(不会参与下一步)。
假脱机编号没有意义,它只是优化程序分配的一个编号(尽管这些编号通常是连续的),当您在Viewpoint的QueryMonitor中检查同一查询时,它将是一个不同的编号(通常更高)
假脱机可以是