見出し画像

Snowflake AUTO_SUSPEND

🔹 AUTO_SUSPENDとは?

AUTO_SUSPEND は、Snowflakeの仮想ウェアハウス(Virtual Warehouse)が アイドル状態(クエリやジョブが実行されていない状態)になってから、自動的に一時停止(サスペンド)するまでの 待機時間を秒単位で設定 するプロパティです。


🔹 具体的なイメージ

たとえ話:自動消灯するお部屋

  • お部屋の電気を考えてみてください。人がいなくなると、一定時間後に自動で電気が消える設定になっています。これは電気代を節約するためですよね。

  • AUTO_SUSPEND は、この 「人がいなくなってから電気が消えるまでの時間」 を設定するようなものです。

具体例で説明

例1: AUTO_SUSPEND が 300 秒(5分)に設定されている場合

  1. 最後のクエリが終了 します。

  2. 5分間、新たなクエリが実行されなければ、仮想ウェアハウスは自動的にサスペンドされます。

  3. サスペンド中 はリソースを消費しないため、コストが節約されます。

例2: AUTO_SUSPEND が 60 秒(1分)に設定されている場合

  1. 最後のクエリが終了 します。

  2. 1分間、新たなクエリが実行されなければ、仮想ウェアハウスは自動的にサスペンドされます。

  3. ジョブ間の待ち時間が短い場合、頻繁にサスペンドと再開を繰り返すことになります。


🔹 なぜジョブが遅くなるのか?

サスペンドとリジュームの影響

  • 仮想ウェアハウスがサスペンドされているとき、新しいクエリが実行されると 自動的に再開(リジューム) します。

  • 再開には数秒から数十秒 かかることがあります。

  • 頻繁にサスペンドとリジュームが起こると、そのたびに待ち時間が発生し、ジョブ全体の実行時間が長くなります。

問題の原因

  • AUTO_SUSPEND の値が低すぎる ため、ジョブ間の短いアイドル時間でもすぐにサスペンドしてしまいます。

  • 次のジョブ開始時に再開時間が必要 となり、ジョブのパフォーマンスが低下します。


🔹 解決策

AUTO_SUSPEND の値を適切に設定する

  • 待機時間を長くする:例えば、60秒から600秒(10分)に変更します。

ALTER WAREHOUSE your_virtual_warehouse
SET AUTO_SUSPEND = 600;

  • これにより、ジョブ間でウェアハウスがサスペンドされにくくなり、次のジョブがすぐに開始できます。

AUTO_RESUME の確認

  • AUTO_RESUME が TRUE に設定されていることを確認 します。これにより、サスペンド状態から自動的に再開します。

ALTER WAREHOUSE your_virtual_warehouse
SET AUTO_RESUME = TRUE;


🔹 まとめ

  • AUTO_SUSPEND は、仮想ウェアハウスがアイドル状態になってからサスペンドされるまでの時間を設定するプロパティです。

  • 設定値が低すぎると、頻繁にサスペンドと再開を繰り返し、ジョブの実行時間が長くなります。

  • 適切な値に調整することで、リソースを効率的に使いながらパフォーマンスを最適化できます。

いいなと思ったら応援しよう!