RedshiftのVacuumをしたら、全然終わらず、DISK FULLになって絶望した話

絶望しましたねえ。

レコード数は1億レコードは優に超えていたと思います。インターリーブソートキーを利用していて、全くVacuumしていないテーブルをVacuumしたところ、全く処理が終わらず、終らないどころかディスク使用率が100%に到達してしまいました。

同じような目に会っている人がいないかと探していたら、下記のStack Overflowを見つけました。

Amazon Redshift at 100% disk usage due to VACUUM query - Stack Overflow

この方の場合、AWSサポートに問合せたが有効な対応方法はなく、以下を実施したと記載してくれています。

  • vacuumを停止する有効な方法はないよ
  • 仕方ないから、redshift clusterのsnapshotをまず取得
  • で、clusterの再起動を実施
  • 再起動したので、当然vacuumは止まる。ちょっとディスクが空いたよ
  • でも、vacuumしてたテーブルのサイズが2倍くらいに膨れ上がってた
  • しかたないので、テーブルのデータを1度アンロードした後、deep copyしたよ

うん。

僕の場合、terminate queryコマンドにて、vacuum処理を停止できました。すごい時間かかったけど。上の方同様に、vacuumしてたテーブルが膨れ上がっていたので、テーブルを一度dropした後、s3においてあったオリジナルデータをcopyし直しました。すごい時間かかったよ。

1億レコード超えてくる辺りが、Redshiftメンテナンス方法をしっかり考慮しないといけない鬼門になる気がしています。