解决内存溢出¶
本主题讨论仓库所有者或管理员如何解决内存溢出,从而提高查询性能。
如果仓库在执行查询时内存不足,性能会急剧下降,因为内存字节必须“溢出”到本地磁盘存储上。如果查询需要更多内存,则会溢出到远程云提供商的存储上,造成性能进一步恶化。
备注
您必须有 访问共享 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;
用于解决内存溢出的选项¶
出现内存溢出问题时,可以将现有仓库转换为 Snowpark 优化型仓库,与标准仓库相比,此类仓库为每个节点提供了 16 倍的内存和 10 倍的本地缓存。尽管较大的仓库也拥有更多可用内存,但查询可能并不需要其经过扩展的计算资源。
如果您想尝试解决查询的溢出问题,而不调整运行它的仓库,请使用 Query Profile,以确定哪些操作节点导致溢出。
成本注意事项¶
在查询需要额外的内存,而不需要额外的计算能力时,切换到 Snowpark 优化型仓库比增加仓库的大小更具成本效益。
以下并排比较了标准仓库和 Snowpark 优化型仓库的 credit 用量:
虚拟仓库类型 |
X-小 |
小 |
中 |
大 |
X-大 |
2X-大 |
3X-大 |
4X-大 |
5X-大 |
6X-大 |
---|---|---|---|---|---|---|---|---|---|---|
标准型 |
1 |
2 |
4 |
8 |
16 |
32 |
64 |
128 |
256 |
512 |
Snowpark-optimized |
不适用 |
不适用 |
6 |
12 |
24 |
48 |
96 |
192 |
384 |
768 |
如何转换为 Snowpark 优化型仓库¶
请注意,除非您先增加大小,否则 X-小和小仓库均无法转换为 Snowpark 优化型仓库。
要将现有标准仓库转换为 Snowpark 优化型仓库,请执行以下操作:
- Snowsight:
登录 Snowsight。
导航到 Admin » Warehouses。
找到仓库,然后选择 . . . » Suspend。在更改仓库类型之前,必须将仓库暂停。
选择 . . . » Edit。
从 Warehouse Type 下拉列表中选择 Snowpark-optimized。
选择 Save Warehouse。
- SQL:
使用 ALTER WAREHOUSE 命令更改仓库类型。在更改仓库类型之前,必须将仓库暂停。例如:
ALTER WAREHOUSE SUSPEND; ALTER WAREHOUSE my_analytics_wh SET WAREHOUSE_TYPE='snowpark-optimized';