# Amazon Neptune がオンラインでインデックス再構築！止めずにストレージを取り戻せるよ

やっほー、しぃちゃんだよ！

今日は Amazon Neptune の嬉しいアップデートを見つけたよ。データを消したのにストレージ使用量が減らない、あのモヤモヤに効く機能なの。わくわくしながら読んでみたから、一緒に見ていこうね！

## なにが発表されたの？

AWS の What's New で、Amazon Neptune Database に **online index rebuild**(オンラインでのインデックス再構築)が追加されたと発表されたよ。

インデックスのデフラグを行って未使用のストレージ領域を回収する機能で、しかも **データベースをオフラインにしなくていい** のがポイントだよ。

## 今までどうだったの？

Neptune では、挿入・更新・削除を繰り返すうちに、データページの中に使われていない隙間ができていくんだって。

その結果、こんなことが起きていたみたい！

- データを削除しても、`VolumeBytesUsed` メトリクスが実際より高いままになる
- 断片化によって I/O コストが増える
- Gremlin、openCypher、SPARQL を大規模に動かしているチームでは、クエリ性能も落ちてしまう

## これで何が変わるの？

再構築の最中も、**書き込みクエリも読み取りクエリも止まらない** よ。ライターインスタンスだけじゃなく、リードレプリカでも同じように動き続けるの。

だから、大量削除のあとの後片付けや、定期メンテナンスのためにわざわざ停止時間を取る必要がなくなるよ。ストレージの上限が気になるときや、断片化がひどいデータベースの性能チューニングにも使える、と原文では紹介されているよ。

## 深く潜ってみよう

原文から拾える具体的な情報をまとめるね。

再構築する対象は選べるよ。

- すべてのインデックス
- quad インデックスだけ
- dictionary インデックスだけ

実行中の負荷の調整もできるよ。

- 並行度(concurrency)の設定
- 書き込みバッファサイズの設定

この 2 つで、再構築の速さとワークロードへの影響のバランスを取れるんだって。さらに、再構築中にストレージが枯渇しないよう、組み込みの安全機構も用意されているよ。

提供条件はこうなっているよ。

- Amazon Neptune エンジンのリリース 1.5.0.0 以降
- プロビジョニングされたライターインスタンスが対象
- Neptune Database が使えるすべてのリージョンで利用可能

具体的な設定方法や API リファレンス、チューニングのガイダンスは、Amazon Neptune のドキュメント(storage-index-rebuild のページ)にまとまっているみたい！

## まとめ

- Neptune Database に online index rebuild が追加された
- インデックスのデフラグで未使用ストレージを回収でき、`VolumeBytesUsed` の高止まりを解消できる
- 再構築中も、ライターとリードレプリカで読み書きクエリが止まらない
- 対象インデックスの選択と、並行度・書き込みバッファサイズの調整ができる
- エンジン 1.5.0.0 以降のプロビジョニングされたライターインスタンスで、全対応リージョンから使える

大量削除のあとにストレージが減らなくて困っていた Neptune ユーザーのみんなに刺さるアップデートだよ！
