管理 Neptune DFE 要使用的统计数据 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

管理 Neptune DFE 要使用的统计数据

注意

对 OpenPher 的 Support 取决于 Neptune 中的 DFE 查询引擎。

DFE 引擎首次在实验室模式下使用Neptune 引擎发布 1.0.3.0,然后从Neptune 引擎发布 1.0.5.0,默认情况下它变为启用状态,但仅用于与查询提示一起使用和 OpenCensPher 支持。

以开头1.Neptune 发动机版本 1.1.1.0DFE 引擎不再处于实验室模式,现在可以使用neptune_dfe_query_engine实例的数据库参数组中的实例参数。

在计划执行查询时,DFE 引擎使用有关 Neptune 图中数据的信息来进行有效的权衡。此信息采取统计数据的形式,其中包括可以指导查询规划的所谓特征集和谓词统计数据。

当您的图表中 10% 以上的数据发生更改或最新统计数据超过 10 天时,这些 DFE 统计数据目前都会重新生成。但是,这些触发因素 future 可能会改变。

您可以通过以下终端节点之一管理 DFE 统计信息的生成:

  • https://your-neptune-host:port/sparql/statistics (对于 SPARQL)。

  • https://your-neptune-host:port/propertygraph/statistics(对于 Gremlin 和 openPher)及其替代版本:https://your-neptune-host:port/pg/statistics.

注意

截至引擎版本 1.1.0,Gremlin 统计数据终端节点 (https://Neptune-DNS:8182/gremlin/statistics) 被弃用。为了向后兼容,它仍受支持,但可能会在以 future 的版本中删除。

在以下示例中,$STATISTICS_ENDPOINT代表这些终端节点 URL 中的任何一个。

注意

如果 DFE 统计终端节点位于读取器实例上,则它可以处理的唯一请求是请求状态. 其他请求将失败并显示ReadOnlyViolationException.

注意

已在上禁用统计数据生成T3T4g实例,因为它可能超出这些实例类型的内存容量。

DFE 统计数据生成的大小限制

目前,如果达到以下任一大小限制,DFE 统计信息生成将停止:

  • 生成的特征集数量不得超过 50,000 个。

  • 生成的谓词统计数据的数量不得超过 100 万。

这些限制可能会改变。

DFE 统计的当前状态

您可以使用以下内容检查 DFE 统计数据的当前状态:curl请求:

curl -G "$STATISTICS_ENDPOINT"

对状态请求的响应包含以下字段:

  • status— 请求的 HTTP 返回代码。如果请求成功,则代码为200. 请参阅常见错误查看常见错误的列表。

  • payload:

    • autoCompute—(布尔值)指示是否启用了自动生成统计信息。

    • active—(布尔值)指示是否启用 DFE 统计信息生成。

    • statisticsId — 报告当前生成统计信息运行的 ID。的价值 -1 表明没有生成任何统计数据。

    • date— 最近生成 DFE 统计数据的 UTC 时间。

    • note— 关于统计数据无效情况下的问题的说明。

    • 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.

禁用自动生成统计信息并不会终止正在进行的统计计算。

如果您请求禁用读取器实例而不是数据库集群的写入器实例的自动生成功能,则请求将失败并返回代码为 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,而不是启动新运行的 ID。一次只能运行一个统计数据生成。

如果在生成 DFE 统计信息时发生故障转移,则新的写入器节点将选择上次处理的检查点并恢复从那里运行的统计信息。

使用StatsNumStatementsScanned CloudWatch 监控统计数据计算的指标

这些区域有:StatsNumStatementsScanned CloudWatch 度量返回自服务器启动以来为统计计算而扫描的语句总数。它会在每个统计计算片段中进行更新。

每次触发统计计算时,这个数字都会增加,如果没有进行任何计算,它将保持不变。看一个阴谋StatsNumStatementsScanned因此,随着时间推移的值可以让你非常清楚地了解统计计算的发生时间以及有多快:

图表的 StatsNumStatementsScanned 指标值

当计算进行时,图表的斜率会显示速度有多快(坡度越陡,计算的统计数据就越快)。

如果图表只是 0 处的平线,则已启用统计功能,但根本没有计算任何统计数据。如果已禁用统计功能,或者如果您使用的是不支持统计计算的引擎版本,则StatsNumStatementsScanned不存在。

如前所述,您可以使用统计API 禁用统计数据计算,但是将其禁用可能会导致统计信息不是最新的,这反过来又可能导致 DFE 引擎的查询计划生成不良。

请参阅使用 Amazon CloudWatch 监控 Neptune有关如何使用 CloudWatch 的信息。

使用Amazon Identity and Access Management(IAM) 使用 DFE 统计端点进行身份验证

您可以使用 IAM 身份验证安全地访问 DFE 统计终端节点awscurl或任何其他与 HTTP 和 IAM 配合使用的工具。传递访问密钥和私有密钥后,您可以使用 IAM 身份验证发出 DFE 统计数据请求。

例如,状态请求:

awscurl --service neptune-db "$STATISTICS_ENDPOINT"

或者,例如,您可以创建名为的 JSON 文件。request.json其中包含:

{ "mode" : "refresh" }

然后你可以像这样手动启动统计信息生成:

awscurl --service neptune-db "$STATISTICS_ENDPOINT" -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)—返回代码: 400.消息: Bad route: /pg/statistics.

  • BadRequestException(对于 SPARQL)—返回代码: 400.消息: Bad route: /sparql/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" }