解决内存溢出

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

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

备注

您必须有 访问共享 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

用于解决内存溢出的选项

出现内存溢出问题时,可以将现有仓库转换为 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:
  1. 登录 Snowsight。

  2. 导航到 Admin » Warehouses

  3. 找到仓库,然后选择 . . . » Suspend。在更改仓库类型之前,必须将仓库暂停。

  4. 选择 . . . » Edit

  5. Warehouse Type 下拉列表中选择 Snowpark-optimized

  6. 选择 Save Warehouse

SQL:

使用 ALTER WAREHOUSE 命令更改仓库类型。在更改仓库类型之前,必须将仓库暂停。例如:

ALTER WAREHOUSE SUSPEND;
ALTER WAREHOUSE my_analytics_wh SET WAREHOUSE_TYPE='snowpark-optimized';
Copy
语言: 中文