View a markdown version of this page

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

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

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

注記

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

DFE エンジンは、neptune_dfe_query_engineインスタンスの DB パラメータグループのインスタンスパラメータを使用して制御されます。

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

エンジンリリース 1.2.1.0 以降では、GetGraphSummary API または 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 エンドポイントが優先されます。下位互換性のために引き続きサポートされていますが、将来のリリースで削除される可能性があります。

注記

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

DFE 統計生成のサイズ制限

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

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

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

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

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

DFE 統計の現在のステータスは、次のように確認できます。

注記

次の例では、プロパティグラフのエンドポイントとコマンドを使用します。RDF データの場合は、 get-sparql-statisticsに を使用し AWS CLI、REST エンドポイント/rdf/statisticsに を使用します。

AWS CLI
aws neptunedata get-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port \ --region us-east-1
注記

us-east-1 を Neptune クラスターのリージョンに置き換えます。デフォルトのリージョンを設定--regionしている場合は、 を省略できます。

詳細については、 AWS CLI 「 コマンドリファレンス」のget-propertygraph-statistics」を参照してください。

SDK
import boto3 import json from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.get_propertygraph_statistics() print(json.dumps(response['payload'], indent=2, default=str))
awscurl
awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db
注記

この例では、 AWS 認証情報が 環境で設定されていることを前提としています。us-east-1 を Neptune クラスターのリージョンに置き換えます。

IAM 認証awscurlで を使用する方法の詳細については、「」を参照してください一時的な認証情報で awscurl を使用して、IAM 認証が有効になっている DB クラスターに安全に接続する

curl
curl -G https://your-neptune-endpoint:port/propertygraph/statistics

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

  • 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 統計情報の自動生成が有効になります。

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

注記

次の例では、プロパティグラフのエンドポイントとコマンドを使用します。RDF データの場合は、 manage-sparql-statisticsに を使用し AWS CLI、REST エンドポイント/rdf/statisticsに を使用します。

AWS CLI
aws neptunedata manage-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port \ --mode disableAutoCompute

詳細については、 AWS CLI 「 コマンドリファレンス」の「 manage-propertygraph-statistics」を参照してください。

SDK
import boto3 from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.manage_propertygraph_statistics(mode='disableAutoCompute') print(response['status'])
awscurl
awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db \ -X POST \ -H 'Content-Type: application/json' \ -d '{"mode":"disableAutoCompute"}'
注記

この例では、 AWS 認証情報が 環境で設定されていることを前提としています。us-east-1 を Neptune クラスターのリージョンに置き換えます。

IAM 認証awscurlで を使用する方法の詳細については、「」を参照してください一時的な認証情報で awscurl を使用して、IAM 認証が有効になっている DB クラスターに安全に接続する

curl
curl -X POST -d '{ "mode" : "disableAutoCompute" }' https://your-neptune-endpoint:port/propertygraph/statistics

リクエストが成功すると、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 統計情報の自動生成が既に有効になっています。自動生成を無効にすると、後で次のようにして再度有効にすることができます。

注記

次の例では、プロパティグラフのエンドポイントとコマンドを使用します。RDF データの場合は、 manage-sparql-statisticsに を使用し AWS CLI、REST エンドポイント/rdf/statisticsに を使用します。

AWS CLI
aws neptunedata manage-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port \ --mode enableAutoCompute

詳細については、 AWS CLI 「 コマンドリファレンス」の「 manage-propertygraph-statistics」を参照してください。

SDK
import boto3 from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.manage_propertygraph_statistics(mode='enableAutoCompute') print(response['status'])
awscurl
awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db \ -X POST \ -H 'Content-Type: application/json' \ -d '{"mode":"enableAutoCompute"}'
注記

この例では、 AWS 認証情報が 環境で設定されていることを前提としています。us-east-1 を Neptune クラスターのリージョンに置き換えます。

IAM 認証awscurlで を使用する方法の詳細については、「」を参照してください一時的な認証情報で awscurl を使用して、IAM 認証が有効になっている DB クラスターに安全に接続する

curl
curl -X POST -d '{ "mode" : "enableAutoCompute" }' https://your-neptune-endpoint:port/propertygraph/statistics

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

{ "status" : "200 OK" }

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

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

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

注記

次の例では、プロパティグラフのエンドポイントとコマンドを使用します。RDF データの場合は、 manage-sparql-statisticsに を使用し AWS CLI、REST エンドポイント/rdf/statisticsに を使用します。

AWS CLI
aws neptunedata manage-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port \ --mode refresh

詳細については、 AWS CLI 「 コマンドリファレンス」の「 manage-propertygraph-statistics」を参照してください。

SDK
import boto3 import json from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.manage_propertygraph_statistics(mode='refresh') print(json.dumps(response['payload'], indent=2, default=str))
awscurl
awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db \ -X POST \ -H 'Content-Type: application/json' \ -d '{"mode":"refresh"}'
注記

この例では、 AWS 認証情報が 環境で設定されていることを前提としています。us-east-1 を Neptune クラスターのリージョンに置き換えます。

IAM 認証awscurlで を使用する方法の詳細については、「」を参照してください一時的な認証情報で awscurl を使用して、IAM 認証が有効になっている DB クラスターに安全に接続する

curl
curl -X POST -d '{ "mode" : "refresh" }' https://your-neptune-endpoint:port/propertygraph/statistics

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

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

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

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

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

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

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

StatsNumStatementsScannedm メトリクス値のグラフ

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

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

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

CloudWatch のメトリクスを使用する方法については、Amazon CloudWatch を使用した Neptune のモニタリング を参照してください。

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

awscurl AWS CLI、または HTTPS と IAM で動作するその他のツールを使用して、IAM 認証で DFE 統計エンドポイントに安全にアクセスできます。適切な認証情報の設定については、「」を参照してください一時的な認証情報で awscurl を使用して、IAM 認証が有効になっている DB クラスターに安全に接続する

次の例は、認証されたステータスリクエストを行う方法を示しています。

注記

次の例では、プロパティグラフのエンドポイントとコマンドを使用します。RDF データの場合は、 と REST エンドポイントに同等の get-sparql-statisticsSPARQL コマンド ( AWS CLI、manage-sparql-statistics) /rdf/statistics を使用します。

AWS CLI
aws neptunedata get-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port

は、設定した認証情報を使用して IAM 認証を自動的に AWS CLI 処理します。

SDK
import boto3 import json from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.get_propertygraph_statistics() print(json.dumps(response['payload'], indent=2, default=str))

SDK は、設定した認証情報を使用して IAM 認証を自動的に処理します。

awscurl
awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db
注記

us-east-1 を Neptune クラスターのリージョンに置き換えます。

curl
curl -G https://your-neptune-endpoint:port/propertygraph/statistics
注記

この例では、IAM 認証は含まれません。で IAM 認証を使用するにはcurl、リクエストに手動で署名する必要があります。awscurl 代わりに AWS CLI、、 SDK、または の使用を検討してください。

次の例では、認証を使用して統計の生成を手動で開始します。

AWS CLI
aws neptunedata manage-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port \ --mode refresh
SDK
import boto3 import json from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.manage_propertygraph_statistics(mode='refresh') print(json.dumps(response['payload'], indent=2, default=str))
awscurl

以下を含む という名前request.jsonの JSON ファイルを作成します。

{ "mode" : "refresh" }

次に、以下を実行します。

awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db \ -X POST \ -H 'Content-Type: application/json' \ -d @request.json
curl
curl -X POST https://your-neptune-endpoint:port/propertygraph/statistics \ -H 'Content-Type: application/json' \ -d '{ "mode" : "refresh" }'
注記

この例では、IAM 認証は含まれません。で IAM 認証を使用するにはcurl、リクエストに手動で署名する必要があります。awscurl 代わりに AWS CLI、、 SDK、または の使用を検討してください。

DFE 統計の削除

データベース内のすべての統計は、次のように削除できます。

注記

次の例では、プロパティグラフのエンドポイントとコマンドを使用します。RDF データの場合は、 delete-sparql-statisticsに を使用し AWS CLI、REST エンドポイント/rdf/statisticsに を使用します。

AWS CLI
aws neptunedata delete-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port

詳細については、 AWS CLI 「 コマンドリファレンス」のdelete-propertygraph-statistics」を参照してください。

SDK
import boto3 import json from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.delete_propertygraph_statistics() print(json.dumps(response['payload'], indent=2, default=str))
awscurl
awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db \ -X DELETE
注記

この例では、 AWS 認証情報が 環境で設定されていることを前提としています。us-east-1 を Neptune クラスターのリージョンに置き換えます。

IAM 認証awscurlで を使用する方法の詳細については、「」を参照してください一時的な認証情報で awscurl を使用して、IAM 認証が有効になっている DB クラスターに安全に接続する

curl
curl -X DELETE https://your-neptune-endpoint:port/propertygraph/statistics

有効な 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" }