

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Opcionalmente, definir tempos limite em um nível por consulta
<a name="best-practices-gremlin-java-per-query-timeout"></a>

O Neptune oferece a capacidade de definir um tempo limite para suas consultas usando a opção de grupo de parâmetros `neptune_query_timeout` (consulte [Parâmetros](parameters.md)). Você também pode substituir o tempo limite global com um código como este:

**nota**  
As configurações de tempo limite da consulta se aplicam somente à avaliação da consulta. Operações de controle de transações baseadas em bytecode, como `tx().commit()` e não `tx().rollback()` estão sujeitas a tempos limite de consulta. Para obter mais informações, consulte [Comportamento de tempo limite para confirmação e reversão de bytecode](access-graph-gremlin-transactions.md#access-graph-gremlin-transactions-commit-rollback-timeout).

```
  final Cluster cluster = Cluster.build("localhost")
                                 .port(8182)
                                 .maxInProcessPerConnection(32)
                                 .maxSimultaneousUsagePerConnection(32)
                                 .serializer(Serializers.GRAPHBINARY_V1D0)
                                 .create();

  try {
      final GraphTraversalSource g = traversal().withRemote(DriverRemoteConnection.using(cluster));
      List<Object> verticesWithNamePumba = g.with(ARGS_EVAL_TIMEOUT, 500L).V().has("name", "pumba").out("friendOf").id().toList();
      System.out.println(verticesWithNamePumba);
  } finally {
      cluster.close();
  }
```

Ou, para envio de consulta baseada em string, o código teria a seguinte aparência:

```
  RequestOptions options = RequestOptions.build().timeout(500).create();
  List<Result> result = client.submit("g.V()", options).all().get();
```

Se uma consulta exceder o tempo limite por consulta, o Neptune a encerrará. A repetição de uma consulta com tempo limite depende da natureza da falha e da sua carga de trabalho. Para obter orientações, consulte [Tratamento de exceções e novas tentativas](transactions-exceptions.md).

**nota**  
Você poderá gerar custos inesperados se definir um valor de tempo limite de consulta muito alto, especialmente em uma instância sem servidor. Sem uma configuração de tempo limite razoável, a consulta poderá continuar sendo executada por muito mais tempo do que o esperado, gerando custos jamais previstos. Esse é particularmente o caso em uma instância sem servidor cuja escala pode ser aumentada verticalmente para um tipo de instância grande e caro durante a execução da consulta.  
É possível evitar despesas inesperadas desse tipo usando um valor de tempo limite de consulta que acomode o tempo de execução esperado e ocasione apenas um tempo limite de execução excepcionalmente longo.  
 A partir da versão 1.3.2.0 do mecanismo do Neptune, o Neptune oferece suporte a um novo parâmetro neptune\$1lab\$1mode como `StrictTimeoutValidation`. Quando este parâmetro tem um valor de `Enabled`, um valor de tempo limite por consulta especificado como uma opção de solicitação ou uma dica de consulta não pode exceder o valor definido globalmente no grupo de parâmetros. Nesse caso, o Neptune lançará `InvalidParameterException`.   
 Essa configuração pode ser confirmada em uma resposta no endpoint '/status' quando o valor for. `Disabled` Na versão do mecanismo`1.3.2.0`, o valor padrão desse parâmetro é`Disabled`. A partir da versão do motor`1.4.0.0`, o `StrictTimeoutValidation` parâmetro é `Enabled` por padrão.   
 Para obter mais informações sobre como a precedência de tempo limite é determinada quando várias configurações de tempo limite são definidas, consulte a documentação do parâmetro [neptune\$1query\$1timeout](parameters.md#parameters-db-cluster-parameters-neptune_query_timeout). 