メモリスピルの解決

このトピックでは、クエリのパフォーマンスを向上させるために、ウェアハウスの所有者または管理者がメモリスピルを解決する方法について説明します。

クエリの実行中にウェアハウスのメモリが不足すると、メモリバイトがローカルディスクストレージに「スピルする」必要が生じるため、パフォーマンスが大幅に低下します。クエリがさらに多くのメモリを必要とする場合、クエリはリモートのクラウドプロバイダーストレージにスピルするため、パフォーマンスがさらに低下します。

注釈

このトピックで提供されている診断クエリを実行するには、 共有 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倍のローカルキャッシュが提供されます。ウェアハウスが大きいほど使用可能なメモリも増えますが、クエリには拡張されたコンピューティングリソースが必要ない場合があります。

クエリを実行するウェアハウスを調整せずにクエリのスピルを解決したい場合は、 クエリプロファイル を使用して、スピルの原因となっている演算ノードを特定します。

コストの考慮事項

追加のコンピューティングなしでクエリに追加のメモリが必要な場合は、ウェアハウスのサイズを増やすよりも、Snowparkに最適化されたウェアハウスに切り替える方が費用対効果が高くなります。

以下は、標準のウェアハウスとSnowparkに最適化されたウェアハウスのクレジット消費量を並べて比較したものです。

仮想ウェアハウスのタイプ

XS

S

M

L

XL

2XL

3XL

4XL

5XL

6XL

標準

1

2

4

8

16

32

64

128

256

512

Snowpark用に最適化

なし

なし

6

12

24

48

96

192

384

768

Snowparkに最適化されたウェアハウスに変換する方法

最初にサイズを大きくしない限り、XSおよびSサイズのウェアハウスは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