

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

# Neptune DFE が使用する統計情報の管理
<a name="neptune-dfe-statistics"></a>

**注記**  
Neptune での openCypher のサポートは、DFE クエリエンジンによって異なります。  
DFE エンジンは、まず、[Neptune エンジンリリース 1.0.3.0](engine-releases-1.0.3.0.md) でラボモードで使用可能になり、[Neptune エンジンリリース 1.0.5.0](engine-releases-1.0.5.0.md) から、デフォルトで有効になりましたが、クエリヒントと openCypher サポートでのみ使用されます。  
[Neptune エンジンリリース 1.1.1.0](engine-releases-1.1.1.0.md) 以降、DFE エンジンはラボモードではなくなり、インスタンスの DB パラメータグループの [neptune\$1dfe\$1query\$1engine](parameters.md#parameters-instance-parameters-neptune_dfe_query_engine) インスタンスパラメータを使用して制御されるようになりました。

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

[エンジンリリース 1.2.1.0](engine-releases-1.2.1.0.md) 以降では、[GetGraphSummary](iam-dp-actions.md#getgraphsummary) API または `summary` エンドポイントを使用して、これらの統計からグラフに関する[概要情報](neptune-graph-summary.md)を取得できます。

これらの 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](engine-releases-1.1.1.0.md) の時点で、Gremlin 統計エンドポイント (`https://your-neptune-host:port/gremlin/statistics`) は廃止され、`propertygraph` または `pg` エンドポイントが優先されます。下位互換性のために引き続きサポートされていますが、将来のリリースで削除される可能性があります。  
[エンジンリリース 1.2.1.0](engine-releases-1.2.1.0.md) の時点で、SPARQL 統計エンドポイント (`https://your-neptune-host:port/sparql/statistics`) は廃止され、`rdf` エンドポイントが優先されます。下位互換性のために引き続きサポートされていますが、将来のリリースで削除される可能性があります。

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

**注記**  
DFE 統計エンドポイントがリーダーインスタンス上にある場合、処理できるリクエストは[ステータスリクエスト](#neptune-dfe-statistics-status)です。その他のリクエストは、`ReadOnlyViolationException` で失敗します。

## DFE 統計生成のサイズ制限
<a name="neptune-dfe-statistics-limits"></a>

現在、DFE 統計情報の生成は、次のいずれかのサイズ制限に達すると停止します。
+ 生成する特性セットの数は 50,000 を超えることはできません。
+ 生成する述語統計の数は 100 万を超えることはできません。

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

## DFE 統計情報の現在のステータス
<a name="neptune-dfe-statistics-status"></a>

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

```
curl -G "$STATISTICS_ENDPOINT"
```

ステータスリクエストに対する応答には、以下のフィールドが含まれています。
+ `status`— リクエストの HTTP リターンコード。リクエストが成功した場合、コードは `200` です。共通エラーリストについては、[一般的なエラー](#neptune-dfe-statistics-errors) を参照してください。
+ `payload`:
  + `autoCompute`— (ブール値) 統計情報の自動生成が有効になっているかどうかを示します。
  + `active`—（ブール値）DFE 統計情報の生成が有効になっているかどうかを示します。
  + `statisticsId `— 現在の統計生成の実行の ID を報告します。` -1 ` の値は統計が生成されていないことを示します。
  + `date` — DFE 統計が最近生成された UTC 時刻 (ISO 8601 形式)。
**注記**  
[エンジンリリース 1.2.1.0](engine-releases-1.2.1.0.md) より前は、これは分単位の精度で表されていましたが、エンジンリリース 1.2.1.0 以降は、ミリ秒の精度で表されます (例: `2023-01-24T00:47:43.319Z`)。
  + `note`— 統計情報が無効な場合の問題に関するメモ。
  + `signatureInfo` — 統計で生成された特性セットに関する情報を含みます ([エンジンリリース 1.2.1.0](engine-releases-1.2.1.0.md) より前は、このフィールドは `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 統計情報の生成が失敗した場合、たとえば、[統計のサイズの制限](#neptune-dfe-statistics-limits)の場合、レスポンスは次のようになります。

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

## DFE 統計情報の自動生成の無効化
<a name="neptune-dfe-statistics-auto-disable"></a>

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

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

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

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

```
{
  "status" : "200 OK"
}
```

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

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

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

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

他の共通エラーリストについては、[一般的なエラー](#neptune-dfe-statistics-errors)を参照してください。

## DFE 統計情報の自動生成の再有効化
<a name="neptune-dfe-statistics-auto-re-enable"></a>

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

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

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

```
{
  "status" : "200 OK"
}
```

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

## DFE 統計情報の生成を手動でトリガーする
<a name="neptune-dfe-statistics-manual"></a>

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

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

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

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

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

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

## `StatsNumStatementsScanned` CloudWatch メトリクス統計を使って計算を監視する
<a name="neptune-dfe-statistics-monitoring"></a>

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

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

![\[StatsNumStatementsScannedm メトリクス値のグラフ\]](http://docs.aws.amazon.com/ja_jp/neptune/latest/userguide/images/StatsNumStatementsScanned-graph.png)


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

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

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

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

## DFE 統計エンドポイントでの AWS Identity and Access Management (IAM) 認証の使用
<a name="neptune-dfe-statistics-iam-auth"></a>

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

```
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 統計の削除
<a name="neptune-dfe-statistics-delete"></a>

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

```
curl -X "DELETE" "$STATISTICS_ENDPOINT"
```

有効な HTTP リターンコードは次のとおりです。
+ `200`— 削除に成功しました。

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

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

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

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

## DFE 統計リクエストの一般的なエラーコード
<a name="neptune-dfe-statistics-errors"></a>

以下に、統計エンドポイントに対してリクエストを行うときに発生する可能性のある一般的なエラーのリストを示します。
+ `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"
}
```