查询太大而无法放入内存

本主题讨论仓库所有者或管理员如何解决内存溢出,从而提高查询性能。

如果仓库在执行查询时内存不足,性能会急剧下降,因为内存字节必须“溢出”到本地磁盘存储上。如果查询需要更多内存,则会溢出到远程云提供商的存储上,造成性能进一步恶化。

备注

您必须有 访问共享 SNOWFLAKE 数据库的权限,才能执行本主题中提供的诊断查询。默认情况下,只有 ACCOUNTADMIN 角色具有执行查询所需的权限。

寻找溢出到存储的查询

此查询根据溢出到本地和远程存储的字节数,确定严重程度排名前 10 位的违规查询。

SELECT query_id, SUBSTR(query_text, 1, 50) partial_query_text, user_name, warehouse_name,
  bytes_spilled_to_local_storage, bytes_spilled_to_remote_storage
FROM  snowflake.account_usage.query_history
WHERE (bytes_spilled_to_local_storage > 0
  OR  bytes_spilled_to_remote_storage > 0 )
  AND start_time::date > dateadd('days', -45, current_date)
ORDER BY bytes_spilled_to_remote_storage, bytes_spilled_to_local_storage DESC
LIMIT 10;
Copy

建议

数据溢出到存储时,可能会对查询性能产生负面影响(尤其是当查询必须溢出到远程存储时)。为了缓解这种情况,Snowflake 建议:

  • 使用更大的仓库(有效地增加操作的可用内存/本地存储空间)

  • 以较小的批次处理数据。

您可以使用 查询配置文件 确定哪些操作节点导致数据溢出到存储。有关选择合适仓库规模的注意事项,请参阅 仓库注意事项

语言: 中文