【发布时间】:2021-04-17 16:44:12
【问题描述】:
【问题讨论】:
标签: snowflake-cloud-data-platform
【问题讨论】:
标签: snowflake-cloud-data-platform
远程磁盘正在从数据库中读取数据,而不是“溢出”。本地磁盘 I/O 是本地磁盘使用,是正常处理的一部分。当仓库无法将所有数据放入内存和本地磁盘缓存时,就会发生溢出。 在您的示例中,“溢出”都不是。远程磁盘 I/O 正在从数据库中读取数据。 您可以通过使用下一个更大的仓库大小来提高此查询的性能;数据将很可能适合内存,从而消除大部分本地存储。 “Spilling”将显示在配置文件中,并带有“Spilling”一词。
【讨论】:
'Local Disk' IO 是指被本地磁盘访问(即虚拟仓库的工作节点本地)阻塞的处理,而“Remote Disk IO”是指被远程磁盘访问阻塞的处理时间。 本质上,当运行每个虚拟仓库节点的下划线 EC2 实例上的可用内存量不足时,如果本地磁盘不足,查询处理引擎就会开始将数据溢出到本地磁盘或远程磁盘。
Snowflake 文档一目了然:
【讨论】:
因为所有数据不一定都适合内存。你可以把它想象成服务器上的虚拟内存,由于内存限制,页面交换到本地磁盘。如果你增加仓库的大小,你应该看到本地磁盘 I/0 下降了大约 50%。
【讨论】:
我同意 #3,从屏幕截图中,我们无法确定溢出是否真的发生,因为它在查询配置文件中显示为单独的部分。所以,我认为本地 I/O 是已经从远程存储读取的数据,而远程 I/O 是直接从存储层读取数据,因此需要更长的时间。在第二次执行同一查询/针对同一表时,查询应显示本地 I/O。
【讨论】: