管理海王星要使用的DFE统计数据 - Amazon Neptune

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

管理海王星要使用的DFE统计数据

注意

对 Neptune 的支持 openCypher 取决于 Neptune 中的DFE查询引擎。

该DFE引擎在 Nep tune 引擎版本 1.0.3.0 中首次在实验室模式下可用,从 Nept une 引擎版本 1.0.5.0 开始,它默认处于启用状态,但仅用于查询提示和支持。 openCypher

从 Nep tune 引擎版本 1.1.1.0 开始,DFE引擎不再处于实验室模式,现在使用实例的数据库参数组中的neptune_dfe_query_engine实例参数进行控制。

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

引擎版本 1.2.1.0 开始,您可以使用GetGraphSummaryAPI或端点从这些统计数据中检索有关图表的摘要信息summary

当前,只要图表中超过 10% 的数据发生了变化,或者最新的统计数据已超过 10 天,就会重新生成这些DFE统计数据。然而,这些触发因素在未来可能会发生变化。

注意

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

您可以通过以下端点之一管理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) 已被弃用,转而使用 propertygraphpg 端点。为了向后兼容,它仍然受支持,但可能会在将来版本中移除。

引擎版本 1.2.1.0 开始,SPARQL统计端点 (https://your-neptune-host:port/sparql/statistics) 已被弃用,取而代之的是端点。rdf为了向后兼容,它仍然受支持,但可能会在将来版本中移除。

在下面的示例中,$STATISTICS_ENDPOINT代表这些端点中的任何一个URLs。

注意

如果DFE统计端点位于读取器实例上,则它只能处理状态请求。其它请求将失败,并显示 ReadOnlyViolationException

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

当前,如果达到以下任一大小限制,DFE统计数据生成就会停止:

  • 生成的特性集数量不得超过 5 万个。

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

这些限制可能会发生变化。

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,确认自动生成已禁用。

禁用自动生成统计数据不会终止正在进行的统计数据计算。

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

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

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

StatsNumStatementsScanned CloudWatch 指标返回自服务器启动以来为统计计算而扫描的语句总数。它会在每个统计数据计算切片处更新。

每次触发统计数据计算时,这个数字都会增加,当没有进行任何计算时,它会保持不变。因此,查看一段时间内的 StatsNumStatementsScanned 值图,可以非常清楚地了解统计数据计算发生的时间和速度:

StatsNumStatementsScanned 指标值图表

发生计算时,图形的斜率显示出速度有多快(斜率越陡,计算统计数据的速度就越快)。

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

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

有关如何使用的信息,请参阅使用亚马逊监控 Neptune CloudWatch CloudWatch。

对DFE统计端点使用 AWS Identity and Access Management (IAM) 身份验证

您可以使用 awscurl 或任何其他与和配合使用的工具,通过IAM身份验证安全地访问DFE统计端点。HTTPS IAM请参阅使用临时awscurl凭证安全地连接到启用了IAM身份验证的数据库集群,了解如何设置正确的凭证。完成此操作后,您可以发出这样的状态请求:

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

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

{ "mode" : "refresh" }

然后,您可以像这样手动启动统计数据生成:

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

删除DFE统计数据

您可以通过向统计端点发出HTTPDELETE请求来删除数据库中的所有统计信息:

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" }