LoginSignup
3
1

More than 3 years have passed since last update.

Redshiftの運用をしていて思ったこと。

Last updated at Posted at 2020-01-06

Redshiftで思うことつらつら。

はじめに

昨年、Redshiftを触り始め、思ったことなどをまとめます。
基本情報は、AWSの公式情報が一番です。
AWS Redshift ガイドライン
そして、サポートに問い合わせても、ガイドライン以上の情報は手に入りませんでした。。

なお、2019年末時点の情報です。
変化の速いサービスのため、今後の情報次第では解消されているかもしれません。

思ったことをつらつらと。

SQLのコンパイル問題。

いまだ何ともならないRedshiftの唯一の欠点。
BI製品などで裏でSQLが自動生成される場合に、SQL文が長い(1000行以上)と、数秒で終わるSQLがコンパイルで数分近くかかるため、性能問題になる。
⇒対応策:あらかじめSQLを流しておくしかない。
(過去に流れたSQLを抽出して、起動時に流す、自動打鍵ツールで流すようにするなど工夫が必要)

また、このコンパイルはあくまでキャッシュされた状況のため、
Redshiftのバージョンアップやスナップショットからの復元(疑似的に停止運用などをする場合)にも、削除されるため、その都度ケアが必要。

データウェアハウスとしてRedshiftは今後も選択肢に入り続けるかと思うが、
この部分が残り続ける以上、BI製品との相性はPOCなどは必要。
Redshift側でできるものは何もないため、BI製品側で頑張ってもらうしかない。

値段が高い!

スペックが高いに越したことはないが、Auroraなどと比べるとvCPU単位の値段がとにかく高い。
特にリーダーノードはスケールアップの選択肢が少なく、ボトルネックとなった場合のスケールアップの値段が大きいため、テストなどで確認が必要

Postgreのバージョンが古い!

postgre 8 で動いているため、物理DBの設定に癖がある。
作者はpostgre SQLのバージョン9.6 以降から触り始めたため、今までのユーザー定義や構文が使えないことに非常にストレスを感じた。
なお、SQLの構文等でも差異はある。ローカル環境でRedshiftを用意することは困難のため、早めにCI環境の構築が必要。

SQLチューニングの余地がほとんどない!(いいこと!)

分散キーとソートキーの設定のみのため、RDBであるいわゆるヒント句追加などのパフォーマンスチューニングがほとんどない。だいたい、分散キー、ソートキーの設定でうまくいかない場合、テーブル設計を要件等。
OracleやPostgre(RDB)などのDatabaseスペシャリストの出番があまりない。
ただし、テーブル設計は他のDatabaseと変わらず常に重要!

(補足)
- RDBに比べて、SQLの結合に弱いと聞くが、その影響をほとんど感じないほど、性能は良い。
分散キーの設定の影響か、特に問題なく利用できている。
- マスタテーブルの分散タイプについて、機能特性上ALL(各ノードそれぞれに配置)にすべきのようにみえるが、パフォーマンス観点上、EVEN(ラウンドロビン)でも影響なし。データ件数の問題か。(数千件クラスなら問題なし)、それ以外はKEYで指定する。
- 最近出てきたソートキーのinterleavedは、バキュームを個別対応に実施したり、同時実行スケーリングが効かないなどの問題があるため、特別必要でなければ避けたほうが良い。

データ挿入(移行作業など)

S3からファイルのインポートが可能だが、インポート後に別スレッド?(非同期)で、データの分散が始まるため、
瞬間的にディスクフル(OutOfMemory が出る)場合がある。
その場合、時間をおいてから実行すると、スケールアップせず、移行作業が続行可能。

ファイルのインポート、アップロードは、psql のPG_COPY コマンドは対応しておらず、公式に書かれている方法で実施するしかない。メトリクスを注視しながら、最適な並列実行を見極めると作業時間の短縮が可能。

耐障害性

よくあるAZ構成ができないため、耐障害性の要件定義がしづらい。実情として意外と落ちない。
むしろ、Auroraのほうが突然フェイルオーバーする回数が多い。(なぜ?)

サポート曰く、停止後の時間が早いとのこと。AZ障害などのNW起因を除けば、ノード単位の障害発生時は問題にならないかもしれない。とはいえ、非機能要件の定義の際に、他のAWSのサービスと同じように記載しないように気を付けること。

バージョンアップ

Redshiftはとにかくバージョンアップが速く、3か月に1回強制的なアップデートで、再起動が走る。
コンパイルの挙動など微妙に違うなど、リリースノートに記載できていないアップデートがある。過去、トラブルにはなったことはないが、詳細な挙動抑えていると「あれ」と思うことはある。
(個人的には特定のバージョンで確定していただけると安心。)

そもそもマネージドサービスのため割り切る必要があるが、運用として、バージョンアップ内容の確認、再起動のタイミング調整などが必要。

ディープラーニングの機能など、時代の技術を多く採用

動的ワークロード管理 (WLM)(各SQLが流れるときのキューの設計・管理が不要)、
Short Query Acceleration(過去実績のあるSQLで実行時間が短い処理は専用の別スレッドで流れる)の搭載、
同時実行スケーリング(起動直後に待機時間はあるものの、Select文は同時実行数の制御が増やせたり)と、ユーザーにとって使いやすくかつ時代の最新の技術が入っているので、率直にいって評価できるサービスである

AWSの開発現場の内部はわからないが、積極的に機能追加や技術採用などしていることを思うと、ワクワク現場なのかなと思ってしまう。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1