Neptune DFE が使用する統計情報の管理 - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Neptune DFE が使用する統計情報の管理

注記

Neptune での openCypher のサポートは、DFE クエリエンジンによって異なります。

DFE エンジンは、まず、Neptune エンジンリリース 1.0.3.0 でラボモードで使用可能になり、Neptune エンジンリリース 1.0.5.0 から、デフォルトで有効になりましたが、クエリヒントと openCypher サポートでのみ使用されます。

Neptune エンジンリリース 1.1.1.0 以降、DFE エンジンはラボモードではなくなり、インスタンスの DB パラメータグループの neptune_dfe_query_engine インスタンスパラメータを使用して制御されるようになりました。

DFE エンジンは、Neptune グラフのデータに関する情報を使用して、クエリの実行を計画する際に効果的なトレードオフを行います。この情報は、クエリ計画を導くことができる、いわゆる特性セットと述語統計を含む統計の形式をとります。

エンジンリリース 1.2.1.0 以降、GetGraphSummaryAPI またはエンドポイントを使用して、これらの統計からグラフに関する概要情報を取得できますsummary

これらの DFE 統計は、現在、グラフ内のデータの 10% 以上が変更された場合、または最新の統計が 10 日以上経過した場合に再生成されます。ただし、これらのトリガーは将来、変更される可能性があります。

注記

統計の生成は、T3 および T4g インスタンスでは無効です。それらのインスタンスタイプのメモリ容量を超える可能性があるためです。

DFE 統計情報の生成は、次のエンドポイントのいずれかを使用して管理できます。

  • https://your-neptune-host:port/rdf/statistics    (SPARQL の場合)

  • https://your-neptune-host:port/propertygraph/statistics (Gremlin と openCypher 用)、およびその代替バージョン:https://your-neptune-host:port/pg/statistics

注記

エンジンリリース 1.1.1.0 の時点で、Gremlin 統計エンドポイント (https://your-neptune-host:port/gremlin/statistics) は廃止され、propertygraph または pg エンドポイントが優先されます。下位互換性のために引き続きサポートされていますが、将来のリリースで削除される可能性があります。

エンジンリリース 1.2.1.0 の時点で、SPARQL 統計エンドポイント (https://your-neptune-host:port/sparql/statistics) は廃止され、rdf エンドポイントが優先されます。下位互換性のために引き続きサポートされていますが、将来のリリースで削除される可能性があります。

以下の例では、$STATISTICS_ENDPOINT は、これらのエンドポイント URL のいずれかを表します。

注記

DFE 統計エンドポイントがリーダーインスタンス上にある場合、処理できるリクエストはステータスリクエストです。その他のリクエストは、ReadOnlyViolationException で失敗します。

DFE 統計生成のサイズ制限

現在、DFE 統計情報の生成は、次のいずれかのサイズ制限に達すると停止します。

  • 生成する特性セットの数は 50,000 を超えることはできません。

  • 生成する述語統計の数は 100 万を超えることはできません。

これらの制限は変更される可能性があります。

DFE 統計情報の現在のステータス

以下の curl リクエストを使用して DFE 統計の現在のステータスを確認できます。

curl -G "$STATISTICS_ENDPOINT"

ステータスリクエストに対する応答には、以下のフィールドが含まれています。

  • status— リクエストの HTTP リターンコード。リクエストが成功した場合、コードは 200 です。共通エラーリストについては、一般的なエラー を参照してください。

  • payload:

    • autoCompute— (ブール値) 統計情報の自動生成が有効になっているかどうかを示します。

    • active—(ブール値)DFE 統計情報の生成が有効になっているかどうかを示します。

    • statisticsId — 現在の統計生成の実行の ID を報告します。 -1 の値は統計が生成されていないことを示します。

    • date — DFE 統計が最近生成された UTC 時刻 (ISO 8601 形式)。

      注記

      エンジンリリース 1.2.1.0 より前は、これは分単位の精度で表されていましたが、エンジンリリース 1.2.1.0 以降は、ミリ秒の精度で表されます (例: 2023-01-24T00:47:43.319Z)。

    • note— 統計情報が無効な場合の問題に関するメモ。

    • signatureInfo — 統計で生成された特性セットに関する情報を含みます (エンジンリリース 1.2.1.0 より前は、このフィールドは summary という名前でした)。これらは通常、直接的に実行できるものではありません。

      • signatureCount— すべての特性セットにおけるシグニチャの総数。

      • instanceCount— 特性セットインスタンスの合計数。

      • predicateCount— 一意の述語の合計数。

統計が生成されていない場合のステータスリクエストに対する応答は、次のようになります。

{ "status" : "200 OK", "payload" : { "autoCompute" : true, "active" : false, "statisticsId" : -1 } }

DFE 統計が使用可能な場合、応答は次のようになります。

{ "status" : "200 OK", "payload" : { "autoCompute" : true, "active" : true, "statisticsId" : 1588893232718, "date" : "2020-05-07T23:13Z", "summary" : { "signatureCount" : 5, "instanceCount" : 1000, "predicateCount" : 20 } } }

DFE 統計情報の生成が失敗した場合、たとえば、統計のサイズの制限の場合、レスポンスは次のようになります。

{ "status" : "200 OK", "payload" : { "autoCompute" : true, "active" : false, "statisticsId" : 1588713528304, "date" : "2020-05-05T21:18Z", "note" : "Limit reached: Statistics are not available" } }

DFE 統計情報の自動生成の無効化

デフォルトでは、DFE を有効にすると、DFE 統計情報の自動生成が有効になります。

自動生成は、次のように無効にできます。

curl -X POST "$STATISTICS_ENDPOINT" -d '{ "mode" : "disableAutoCompute" }'

リクエストが成功すると、HTTP レスポンスコードは 200 となり、レスポンスは次のとおりです。

{ "status" : "200 OK" }

自動生成が無効になっていることを確認するには、ステータスリクエストを発行し、レスポンス内で autoCompute フィールドが false に設定されていることを確認します。

統計の自動生成を無効にしても、進行中の統計計算は終了しません。

DB クラスターのライターインスタンスではなくリーダーインスタンスに対して自動生成を無効にするリクエストを行うと、HTTP リターンコード 400 でリクエストが失敗し、次のような出力が行われます。

{ "detailedMessage" : "Writes are not permitted on a read replica instance", "code" : "ReadOnlyViolationException", "requestId":"8eb8d3e5-0996-4a1b-616a-74e0ec32d5f7" }

他の共通エラーリストについては、一般的なエラーを参照してください。

DFE 統計情報の自動生成の再有効化

デフォルトでは、DFE を有効にすると、DFE 統計情報の自動生成がすでに有効になっています。自動生成を無効にすると、後で次のようにして再度有効にすることができます。

curl -X POST "$STATISTICS_ENDPOINT" -d '{ "mode" : "enableAutoCompute" }'

リクエストが成功すると、HTTP レスポンスコードは 200 となり、レスポンスは次のとおりです。

{ "status" : "200 OK" }

自動生成が無効になっていることを確認するには、ステータスリクエストと確認してレスポンス内で autoCompute フィールドが true に設定されていることを確認します。

DFE 統計情報の生成を手動でトリガーする

DFE 統計情報の生成は、次のように手動で開始できます。

curl -X POST "$STATISTICS_ENDPOINT" -d '{ "mode" : "refresh" }'

リクエストが成功した場合、出力は次のようになります。HTTP リターンコードは 200 です。

{ "status" : "200 OK", "payload" : { "statisticsId" : 1588893232718 } }

出力の statisticsId には、現在発生している統計生成の実行の ID が表示されます。リクエストの時点で実行がすでに処理中だった場合、リクエストは新しい実行を開始するのではなく、その実行の ID を返します。一度に実行できる統計生成は 1 つのみです。

DFE 統計の生成中にフェイルオーバーが発生した場合、新しいライターノードは最後に処理されたチェックポイントを取得し、そこから統計の実行を再開します。

StatsNumStatementsScanned CloudWatch メトリクスを使って統計計算を監視する

StatsNumStatementsScanned CloudWatch このメトリックは、サーバーが起動してから統計計算のためにスキャンされたステートメントの総数を返します。これは、各統計計算スライスで更新されます。

統計計算がトリガーされるたびに、この数は増加し、計算が行われていないときは一定のままです。時間の経過に伴いStatsNumStatementsScannedのプロットを見ると、統計計算がいつ行われたか、どのくらいの速さであったかがはっきりわかります。

 StatsNumStatementsScanned メトリック値のグラフ

計算が行われているとき、グラフの傾きはどのくらい速いかを示します(傾斜が急であるほど、より速い統計計算となります)。

グラフが単に 0 のフラットラインである場合、統計機能は有効になっていますが、統計情報はまったく計算されていません。統計機能が無効になっている場合、または統計計算をサポートしていないエンジンバージョンを使用している場合は、StatsNumStatementsScanned は存在しません。

前述のように、統計情報 API を使用して統計情報の計算を無効にすることはできますが、オフにすると、統計が最新にならず、DFE エンジンのクエリプランの生成が不十分になる可能性があります。

Amazon ンを利用した海王星のモニタリング CloudWatch使用方法については、を参照してください CloudWatch。

DFE 統計エンドポイントでの AWS Identity and Access Management (IAM) 認証の使用

awscurl または、HTTP および IAM で動作するその他のツールを使用して、DFE 統計エンドポイントに IAM 認証で安全にアクセスできます。適切な認証情報を設定する方法については、「一時的な認証情報で awscurl を使用して、IAM 認証が有効になっている DB クラスターに安全に接続する」を参照してください。設定が完了したら、次のようなステータスリクエストを行うことができます。

awscurl "$STATISTICS_ENDPOINT" \ --region (your region) \ --service neptune-db

または、たとえば、以下を含む request.json という名前の JSON ファイルを作成できます。

{ "mode" : "refresh" }

その後、次のように統計情報の生成を手動で開始できます。

awscurl "$STATISTICS_ENDPOINT" \ --region (your region) \ --service neptune-db \ -X POST -d @request.json

DFE 統計の削除

統計エンドポイントに対して HTTP DELETE 要求を実行することで、データベース内のすべての統計情報を削除できます。

curl -X "DELETE" "$STATISTICS_ENDPOINT"

有効な HTTP リターンコードは次のとおりです。

  • 200— 削除に成功しました。

    この場合、典型的な応答は次のようになります。

    { "status" : "200 OK", "payload" : { "active" : false, "statisticsId" : -1 } }
  • 204— 削除する統計情報はありませんでした。

    この場合、応答は空白 (応答なし) です。

リーダーノードの統計エンドポイントに削除リクエストを送信すると、ReadOnlyViolationException がスローされます。

DFE 統計リクエストの一般的なエラーコード

以下に、統計エンドポイントに対してリクエストを行うときに発生する可能性のある一般的なエラーのリストを示します。

  • AccessDeniedExceptionリターンコード: 400メッセージ: Missing Authentication Token

  • BadRequestException (Gremlin と openCypher の場合) — リターンコード: 400メッセージ: Bad route: /pg/statistics

  • BadRequestException (RDF データの場合) — リターンコード: 400メッセージ: Bad route: /rdf/statistics

  • InvalidParameterExceptionリターンコード: 400メッセージ: Statistics command parameter 'mode' has unsupported value 'the invalid value'

  • MissingParameterExceptionリターンコード: 400メッセージ: Content-type header not specified.

  • ReadOnlyViolationExceptionリターンコード: 400メッセージ: Writes are not permitted on a read replica instance

たとえば、DFE および統計情報が有効でないときにリクエストを行った場合、次のようなレスポンスを受信します。

{ "code" : "BadRequestException", "requestId" : "b2b8f8ee-18f1-e164-49ea-836381a3e174", "detailedMessage" : "Bad route: /sparql/statistics" }