如何在 gremlin_python 中为 AWS Neptune 设置特定于查询的超时?

问题描述 投票:0回答:1

我正在使用 gremlin_python 库在 AWS Neptune 数据库上执行查询,尽管通过评估超时参数设置了特定的超时阈值,但仍然遇到超时。这是我收到的具体查询和错误消息:

count_companies_with_representatives = (
    self.reader_g.V()
    .with_("evaluationTimeout", MAX_QUERY_TIMEOUT)
    .hasLabel("company")
    .where(__.bothE("director").count().is_(P.gt(0)))
    .count()
    .next()
)

错误信息:

{"detailedMessage":"A timeout occurred within the script [RequestMessage{, requestId=xxxxx, op='bytecode', processor='traversal', args={gremlin=[[], [V(), with(evaluationTimeout, 1000000), hasLabel(company), where([[], [bothE(director), count(), is(gt(0))]]), count()]], aliases={g=g}}}]","code":"TimeLimitExceededException","requestId":"xxxxx","message":"A timeout occurred within the script [RequestMessage{, requestId=xxxxx, op='bytecode', processor='traversal', args={gremlin=[[], [V(), with(evaluationTimeout, 1000000), hasLabel(company), where([[], [bothE(director), count(), is(gt(0))]]), count()]], aliases={g=g}}}]"}

尽管将评估超时设置为 MAX_QUERY_TIMEOUT(本例中为 1000000 毫秒),查询还是过早超时。我需要确保每个查询都遵守此设置的超时,以有效管理性能并避免这些过早终止。

我尝试使用evaluationTimeout参数直接在查询中设置超时,期望这将允许查询在超时之前运行最多MAX_QUERY_TIMEOUT毫秒。但是,该错误表明超时早在达到此限制之前就发生了。我期望超时设置能够防止查询提前终止,并允许它有足够的时间在正常操作条件下完成。我正在寻求有关如何在此环境中正确地将超时应用于单个查询的建议,或者了解是否有更好的方法来管理 Neptune 中的查询执行时间。

gremlin amazon-neptune gremlinpython neptune
1个回答
0
投票

实际上,在 Amazon Neptune 集群中可以在 3 个位置设置查询超时:集群范围、实例级别和每个查询。前两个优先,因为数据库管理员希望最终控制任何给定查询的运行时。默认情况下,集群或实例级别的超时时间为 2 分钟。查询中的

evaluationTimeout
值不能超过此值。查询级超时只能设置为小于整个集群或实例级超时。

您需要调整集群或实例级别

neptune_query_timeout
参数以允许查询超过默认的 2 分钟超时:https://docs.aws.amazon.com/neptune/latest/userguide/parameters.html #parameters-db-cluster-parameters-neptune_query_timeout

设置此参数将需要重新启动。如果在集群级别设置,则集群中的所有实例都需要重新启动。如果在实例级别设置,则需要重新启动该实例。

集群级别的自定义超时设置将覆盖集群内任何实例的默认超时。

自定义实例超时设置将覆盖在集群级别设置的默认设置和自定义设置。

© www.soinside.com 2019 - 2024. All rights reserved.