查询太大而无法放入内存¶
本主题讨论仓库所有者或管理员如何解决内存溢出,从而提高查询性能。
如果仓库在执行查询时内存不足,性能会急剧下降,因为内存字节必须“溢出”到本地磁盘存储上。如果查询需要更多内存,则会溢出到远程云提供商的存储上,造成性能进一步恶化。
备注
您必须有 访问共享 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;
建议¶
数据溢出到存储时,可能会对查询性能产生负面影响(尤其是当查询必须溢出到远程存储时)。为了缓解这种情况,Snowflake 建议:
使用更大的仓库(有效地增加操作的可用内存/本地存储空间)
以较小的批次处理数据。