Redshift Serverlessを使用して気づいたポイントについて記す
負荷をかけても期待通りにスケールしない
Serverlessであり、負荷に応じて自動的にスケールするなら、Base RPUは8(最小値)で良いと考えて設定した。
しかし、実際にQueryを実行すると、非常に実行が遅く、実際に実行時のCloudwatchを見ると全くRPUがスケールしていないことがわかった。
この挙動が疑問に思えたため、以下の試行を行い、挙動を確認した。 (ちなみに試したのは2023年の3月なのでまた挙動は変わっている可能性もある)
まず、十分な負荷のかかるようなデータとSQLを準備するのはそれ自体が工数がかかるので、AWSのブログで紹介されているTPC-DSベースのRedshift用のDWHベンチマークを使用することとした
https://github.com/awslabs/amazon-redshift-utils/tree/master/src/CloudDataWarehouseBenchmark/Cloud-DWB-Derived-from-TPCDS
処理するデータ量にバリエーションがあったが、料金があまりかからないように1TBでBase RPUと並列度を変えながらスケールするか試してみることとした。
※画面はAWSコンソールのRedshift Serverlessのモニタ画面
まずはBase Capacity=16、10並列で試行
15分程度処理を流したところで、RPU48までスケールしたことが確認できた。
私見ではあるが、想定よりスケールしないという感想。
負荷がかかったらもっと迅速に、かつリニアに上がってほしいと感じた。
またRPUが48までしかあがらないことも疑問であった。
今度はスケールしなそうなケースを試行する
Base Capacity=16 並行度1で試すとやはり全くスケールしない結果となった。少なくとも並列クエリが必要に見受けられる。
もう少し並列度をあげて試行する。
Base Capacity=16 並行度5
この程度の処理だとやはりスケールしない。
スケールの閾値はこのベンチマークの場合並行度5ー10の間ではないかと推測された。
現時点のServerlessで確認できた挙動のまとめ
- ある程度の数の並列処理を実行しないと全くスケールしない。
- スケールするにしてもすぐにはスケールしない、しばらく経ってからスケールするのである程度長時間の処理が必要。
- スケールするときも大きくはスケールしてくれない。(今回はRPU=16->48までしかスケールしなかった)
結論
スケール頼みにすると使い方で思ったようにスケールしないため、処理が遅くなってしまう可能性がある
その場合はBase Capacityを多めに設定しておく必要がある。
(ただしそうすると少量のRPUで十分な処理であっても、必要な料金が大きくなってしまう)
もう少し負荷にリニアに追従してくれると使いやすと感じたため、今後のアップデートに期待します。