放大器和阀芯如何相互作用?仔细阅读解释计划
Posted
技术标签:
【中文标题】放大器和阀芯如何相互作用?仔细阅读解释计划【英文标题】:how do amps and spool interact with each other? Doing a close reading of EXPLAIN plan 【发布时间】:2018-10-12 22:19:55 【问题描述】:有人可以帮我仔细阅读 EXPLAIN 计划吗?我想更好地阅读这些内容,但它们仍然让我感到困惑。 我把我理解的所有内容都用粗体写了出来,并附有问题。
解释 选择 不同的 ProcID FROM dbadmin.v_DBATraceLog;
1) 首先,我们锁定 dbadmin.DBATraceLog 以进行访问。 (锁定表)
2) 接下来,我们从 dbadmin.DBATraceLog 执行全 AMP 检索步骤 全行扫描的方式(所以全表扫描)
在 Spool 1 中没有剩余条件 (group_amps), (为什么叫 Spool 1?每个放大器有多少个 Spool,因为我认为每个用户只有一个 Spool 空间?为什么它说 group_amps?所有放大器都可以访问公共 Spool 1 或线轴 1 是每个放大器上的本地线轴吗?)
通过哈希码重新分配给所有 AMP。 (我猜这些行现在离开 Spool 1 并进入每个 AMP 上的磁盘空间)
然后我们进行排序以订购 Spool 1 (nvm,它仍在 Spool 1 上?)
通过 spool field1 中的排序键 (排序将相邻的记录放在一起,我想这就是消除重复的方法) 消除重复行。 Spool 1 的大小估计为 低置信度为 4,592 行。此步骤的预计时间 为 0.03 秒。
3) 最后,我们向所有涉及的 AMP 发送一个 END TRANSACTION 步骤 在处理请求时。 -> Spool 1 的内容作为以下结果发送回用户 声明 1. 总估计时间为 0.03 秒。
主要是我不明白 AMPS 和 Spool 是如何相互作用的。我的理解是,它是保留结果或暂存记录以进行重新分配的中间空间,因为连接必须在 amp-local 中进行。我认为这是一个所有放大器都可以平等访问的公共空间(尽管如果一个放大器需要超过 1/num_of_amps 数量的假脱机空间,则该过程中止)。
那为什么解释计划中有 Spool 编号?阀芯 1 或 3 在哪里?每个放大器上都有线轴 1 吗?在这种情况下,group_amps 是什么意思?
【问题讨论】:
【参考方案1】:每个查询可能有多个假脱机,一个用于中间结果,一个用于最终结果集。中间线轴在一个步骤中创建,在后续步骤(或多个步骤)中使用并最终删除,由 (LastUse) 指示。答案集 spool(Spool n 的内容被发回)在结果集的最后一行已交付给客户端后被释放。
编号为 n 的线轴可能存在于单个 AMP、多个 AMP 或所有 AMP 上。 (group_amps) 表示优化器假定这是一个小结果,并且可能仅在某些 AMP 上创建假脱机(不会参与下一步)。
假脱机编号没有意义,它只是优化器分配的一个数字(尽管这些数字通常是连续的),当您在 Viewpoint 的 QueryMonitor 中检查相同的查询时,它会是一个不同的,通常更高的数字.
线轴可以
本地:每个 AMP 直接假脱机行而不与其他 AMP 交互 由(列列表)的哈希码重新分配:优化器为假脱机分配一个主索引,数据根据这些列的哈希进行分配。 在所有 AMP 上复制:每一行都复制到每个 AMPSQL Request and Transaction Processing manual 中提供了有关解释输出的更多详细信息
【讨论】:
以上是关于放大器和阀芯如何相互作用?仔细阅读解释计划的主要内容,如果未能解决你的问题,请参考以下文章