大きすぎてメモリに収まらないクエリ

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

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

注釈

このトピックで提供されている診断クエリを実行するには、 共有 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は以下をお勧めします。

  • より大きなウェアハウスを使用します(オペレーションに使用可能なメモリ/ローカルストレージ領域を効果的に増やします)

  • 小さいバッチでデータを処理します。

クエリプロファイル を使用して、どのオペレーションノードがデータをストレージにスピルさせる原因となっているかを特定できます。適切なウェアハウスのサイズを選択するための考慮事項については、 ウェアハウスに関する考慮事項 を参照してください。