SnowPro Advanced: Data Engineer 無料問題 5 / 10 ・ 分野2: Performance Optimization
あるウェアハウスに STATEMENT_TIMEOUT_IN_SECONDS = 1800 を設定してある。分析者は自分のセッションで ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS = 7200 とし、そのウェアハウスで長い集計を流した。この集計に効く上限と、その理由の組み合わせとして正しいものはどれか。
- 1800 秒。ウェアハウスとセッションの両方にあれば、0 でない小さいほうの値が効く
- 7200 秒。長い集計ではセッションの値が効き、ウェアハウスの値は待ちに回る
- 1800 秒。ウェアハウスの値があれば、セッションの値は見られずに置き換わる
- 7200 秒。セッションの設定のほうが、ウェアハウスの設定より優先される
正解と解説を見る
正解: A
正解の理由
STATEMENT_TIMEOUT_IN_SECONDS は、SQL 文が取り消されるまでに動ける最長の時間を決める。アカウント・ユーザー・セッション・ウェアハウスのそれぞれに設定でき、既定ではアカウントの階層で設定されている。公式は、ウェアハウスとセッションの両方に設定があるときは、0 でない値のうち小さいほうが効くと書いている。この例では 1800 秒で取り消される。止まったままのクエリがクレジットを使い続けるのを防ぐための制御である。
違う選択肢
「7200 秒。セッションの設定のほうが、ウェアハウスの設定より優先される」… 一般のパラメーターのように細かい階層が勝つ、という読み方は、この組み合わせには当てはまらない。公式は、ウェアハウスとセッションの両方にあるときは 0 でない小さいほうが効くと書いている。
「1800 秒。ウェアハウスの値があれば、セッションの値は見られずに置き換わる」… 効く値は 1800 秒で合っているが、理由が違う。ウェアハウスの値が置き換えるのではなく、小さいほうが効く。セッションに 600 秒と書いていれば、600 秒で取り消される。
「7200 秒。長い集計ではセッションの値が効き、ウェアハウスの値は待ちに回る」… 公式に、長い文でセッションの値を採るという区別は無い。待ちの長さを抑えるのは、別のパラメーター STATEMENT_QUEUED_TIMEOUT_IN_SECONDS である。
待ちの上限
待ち行列にいる文はクレジットを消費しないが、待ちが長すぎると、動き出したときにはもう要らない結果になっていることがある。その無駄を防ぐのが STATEMENT_QUEUED_TIMEOUT_IN_SECONDS で、同じくウェアハウスとセッションの両方にあれば 0 でない小さいほうが効く。これらの制御は、クラウドサービスとサーバーレスの機能には当たらない。