[アップデート] Amazon Neptune でスロークエリログが利用出来るようになりました

2023.04.07

いわさです。

先月(2023 年 3 月)の Amazon Neptune のアップデートでスロークエリログが発行出来るようになりました。

しかし、アップデートアナウンスの直後は私のほうでまだ機能が確認出来なかったり、一部画面の表記が正しくなかったため様子見していたのですが、先日改めて確認したところ使えるようになっていましたので実際に使ってみたいと思います。

本題と関係ないですが、ついでに Neptune Serverless の最小 NCU が 1 から選択出来るアップデートもありましたので、今回は NCU 1 の Neptune Serverless を使ってスロークエリログを確認してみます。

Serverless 最小 NCU が 1 から選択可能に

まず、Amazon Neptune は Aurora と同じようにエンジンオプションとしてサーバーレスとプロビジョンドの 2 つがあります。

プロビジョンドの場合は DB インスタンスサイズを指定します。
必要な時にはスケールアップ/ダウンすることが出来ます。

サーバーレスの場合は Neptune Capacity Units (NCU) という単位でキャパシティを定義し、Neptune Serverless の利用料金は 1 秒あたりに使用した NCU で計算されます。
NCU は 0.5 刻みで自動スケールアップ・ダウンが可能です。

以下の記事も参考にしてください。

変更前は最小 2.5 NCU だった

これまでは最小 NCU は 2.5 でした。
そのため、全く負荷がない状態でも最小の 2.5 NCU の料金は発生する形でした。

変更後は最小 1 NCU から選択出来るようになった

アップデート後は最小が 1 NCU になりました。
負荷に応じて設定した範囲の中で自動スケールしますが、仮に負荷がほとんど発生しないワークロードであれば今までよりも料金を抑えることが出来ます。

スロークエリログ

RDS などでスロークエリを出力して障害調査やパフォーマンス改善に利用されている方は多いと思います。
Amazon Neptune でも利用出来るようになりました。出力先は CloudWatch Logs です。

変更前

これまで Amazon Neptune では監査ログのみサポートされていました。

変更後

今回のアップデートでスロークエリログがサポートされました。
ただし、エンジンバージョン 1.2.1.0 でのみ利用可能です。

また、 DB クラスターパラメータグループでスロークエリログに関する設定を行う必要があります。

DB クラスターパラメータを設定

スロークエリログに関する次の 2 つのパラメータを設定します。

パラメータ 説明 設定値
neptune_enable_slow_query_log スロークエリログ機能の有効・無効 disable(デフォルト), debug, info
neptune_slow_query_log_threshold スロークエリと判断される閾値(ミリ秒) 5000(デフォルト)

各パラメータの詳細については以下を確認してください。

有効化してスロークエリを観察してみた

次のようにクラスターパラメータグループを構成しました。
debug で、閾値が 1 ミリ秒なのでこれが最もスロークエリログの量が多くなる設定ですね。出力先は CloudWatch Logs のみですので料金はご注意ください。
ちなみに、こちらのパラメータは動的パラメータなので、データベースの再起動不要でログ出力の有効・無効を切り替えることが出来ます。

ノートブックから適当な対象データベースに対して適当なクエリを発行してみます。

実行時間は 78 ミリでした。

CloudWatch Logs に Neptune クラスター名 + slowquery という名称のロググループが作成されていると思います。

クエリは次のような形で出力されます。

ログ出力内容の詳細は以下をご確認ください。

さいごに

本日は Amazon Neptune でスロークエリログが利用出来るようになったので使ってみました。
動的パラメータで ON/OFF 切り替えられるのは嬉しいですね。
Neptune でもスロークエリが問題になるケースは聞くので活用していきたいですね。