本日も乙スマートフォン用の表示で見る本日も乙ただの自己満足な備忘録。blog.jicoman.info実際に移行してみてつまづいたことや、データ移行時間の短縮について解説します。前回記事の「最後に」でちょろっと書きましたが、UnloadCopyUtilityを動かすとわかりますが、小さいテーブルの移行でしか考慮されていないような作りになっていることがわかります。途中でキャンセルされてしまう問題について移行時間を短縮するワークロード管理(WLM)を利用するリサイズ最後に途中でキャンセルされてしまう問題について行数が多いテーブルを移行しようとすると以下のようにキャンセルされてしまいます。-----------------------------------------------移行している最中のクエリを見てみると、20分経過するとキャンセルされてしまっているようでした。最初はRedshiftのタイムアウト(statement_timeout)を疑いましたが、私の手元の環境では0(無制限)になっていました。UnloadCopyUtilityのソースを追っていくとTCPキープアライブとstatement_timeoutに関する設定があることがわかりました。Keepaliveによって接続し続けることになります。オプション値の意味についてPyGreSQLのドキュメントには見当たりませんでしたが、PostgreSQLのドキュメントで発見しました。seconds.https://www.postgresql.org/docs/9.2/static/libpq-connect.htmlTCPのmanページにもオプションに関する説明が記載されています。プローブを送りはじめます。経っても応答が得られない場合は接続を切断してしまいます。AWSドキュメントにも同じようなことが記載されていて、TCPキープアライブの設定値を変更する方法が紹介されていました。20分)に固定されているため、どちらによ20分経過したクエリはキャンセルされてしまうようになっていました。システム値を変えたくないので、スクリプトの設定値を変えることで対処したいのですが、スクリプト及び設定ファイルを読む限りでは設定値を変えるような作りになっていません。仕方がないので、ソースを改変することで対処しました(後にGitHubのPRとして残しているURLを共有します)。0"移行時間を短縮する移行中は移行元のRedshiftクラスタへのアクセスを止める必要があるため、その間はメンテナンスとなります。できるだけ早くデータ移行することでメンテナンス時間を短縮できます。移行時間を短縮するための方法を2つ紹介します。ワークロード管理(WLM)を利用するこれは私の環境特有の問題でもあるのですが、移行したテーブルは30弱程度ですが、一部のテーブルの件数がかなり多く、それ以外のテーブルは件数がかなり少ないことがわかりました。COPYできるようにします。Redshiftにはワークロードに応じてリソース配分が設定できる、WLMという仕組みがあるのでそれを利用します。具体的には、まず、移行用のパラメータグループを作成し、そのパラメータグループに対して以下のようなWLMを作成しました(数値はかなり決めでして、各々の環境で設定が異なると思います)。サイズが最も多いテーブルに多めにメモリを割り当ててデータロードさせつつ、他のテーブル用に別のワークロードで並列実行させます。変更する仕組みがないのでソースを改変して設定ファイル(JSON)から変更できるようにしました。修正内容はこちらにあげています。本家にPR出していないので永久に取り込まれることはないので、各自で修正ください。https://github.com/ohsawa0515/amazon-redshift-utils/pull/1修正してWLMを適用してやると以下の図のようにうまいこと平行してデータ移行できました。UNLOADCOPYリサイズWLMを駆使し平行処理したとしてもRedshiftクラスタのスペックが低いといつまでたっても終わりません。8ノードにリサイズして移行しかなり時間短縮になりました。リサイズに時間がかかるため、あらかじめリサイズにどのぐらいの時間がかかるのかを検証しておくと良いでしょう。最後に暗号化済Redshiftクラスタへデータ移行する際のつまづいたことや時間短縮のtipsを書きました。ちなみに暗号化Redshiftクラスタは、暗号化する前よりも当然パフォーマンスが落ちます。よりますと、ピーク時に40%オーバーヘッドが生じるとのことです。移行した身としては、そこまで落ちてないのですが、やはり落ちているなぁとという感覚です。しても暗号化しなければならない場合を除いて、できるだけ暗号化しないのが一番です。月別アーカイブはてなブログをはじめよう!ohsawa0515さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。