View a markdown version of this page

Gerenciar estatísticas a serem utilizadas pelo DFE do Neptune - Amazon Neptune

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

Gerenciar estatísticas a serem utilizadas pelo DFE do Neptune

nota

O suporte ao openCypher depende do mecanismo de consulta DFE no Neptune.

O mecanismo do DFE é controlado usando o parâmetro de neptune_dfe_query_engine instância no grupo de parâmetros de banco de dados de uma instância.

O mecanismo DFE usa informações sobre os dados no grafo do Neptune para fazer compensações efetivas ao planejar a execução da consulta. Essas informações assumem a forma de estatísticas que incluem os chamados conjuntos de características e estatísticas de predicados que podem orientar o planejamento de consultas.

A partir da versão 1.2.1.0 do mecanismo, você pode recuperar informações resumidas sobre seu gráfico a partir dessas estatísticas usando a GetGraphSummaryAPI ou o endpoint. summary

No momento, essas estatísticas do DFE são geradas novamente sempre que mais de 10% dos dados no grafo são alterados ou quando as estatísticas mais recentes têm mais de dez dias. No entanto, esses gatilhos podem mudar no futuro.

nota

A geração de estatísticas está desabilitada em instâncias T3 e T4g porque pode exceder a capacidade de memória desses tipos de instância.

É possível gerenciar a geração de estatísticas do DFE por meio de um dos seguintes endpoints:

  • https://your-neptune-host:port/rdf/statistics (para o SPARQL).

  • https://your-neptune-host:port/propertygraph/statistics (para Gremlin e openCypher) e sua versão alternativa: https://your-neptune-host:port/pg/statistics.

nota

A partir da versão 1.1.1.0 do mecanismo, o endpoint de estatísticas do Gremlin (https://your-neptune-host:port/gremlin/statistics) está sendo descontinuado em favor do endpoint propertygraph ou pg. Ele ainda é compatível com versões anteriores, mas pode ser removido em versões futuras.

A partir da versão 1.2.1.0 do mecanismo, o endpoint de estatísticas do SPARQL (https://your-neptune-host:port/sparql/statistics) está sendo descontinuado em favor do endpoint rdf. Ele ainda é compatível com versões anteriores, mas pode ser removido em versões futuras.

nota

Se um endpoint de estatísticas do DFE estiver em uma instância de leitor, as únicas solicitações que ele poderá processar serão solicitações de status. Outras solicitações falharão com uma ReadOnlyViolationException.

Limites de tamanho para geração de estatísticas do DFE

No momento, a geração de estatísticas do DFE será interrompida se um dos seguintes limites de tamanho for atingido:

  • O número de conjuntos de características gerados não pode exceder cinquenta mil.

  • O número de estatísticas de predicados geradas não pode exceder um milhão.

Esses limites podem mudar.

Status atual das estatísticas do DFE

Você pode verificar o status atual das estatísticas do DFE da seguinte forma:

nota

Os exemplos a seguir usam o endpoint e os comandos do gráfico de propriedades. Para dados RDF, use get-sparql-statistics para o AWS CLI e /rdf/statistics para endpoints REST.

AWS CLI
aws neptunedata get-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port \ --region us-east-1
nota

us-east-1Substitua pela região do seu cluster Neptune. Você pode omitir --region se tiver configurado uma região padrão.

Para obter mais informações, consulte get-propertygraph-statistics na Referência de comandos. AWS CLI

SDK
import boto3 import json from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.get_propertygraph_statistics() print(json.dumps(response['payload'], indent=2, default=str))
awscurl
awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db
nota

Este exemplo pressupõe que suas AWS credenciais estejam configuradas em seu ambiente. us-east-1Substitua pela região do seu cluster Neptune.

Para obter mais informações sobre como usar awscurl com a autenticação do IAM, consulteUsando awscurl com credenciais temporárias para se conectar com segurança a um cluster de banco de dados com a autenticação IAM ativada.

curl
curl -G https://your-neptune-endpoint:port/propertygraph/statistics

A resposta a uma solicitação de status contém os seguintes campos:

  • status: o código de retorno HTTP da solicitação. Se a solicitação for bem-sucedida, o código será 200. Para obter uma lista de erros comuns, consulte Erros comuns.

  • payload:

    • autoCompute: (booliano) indica se a geração automática de estatísticas está habilitada ou não.

    • active: (booliano) indica se a geração automática de estatísticas do DFE está ou não habilitada.

    • statisticsId : relata o ID da execução atual da geração de estatísticas. Um valor de -1 indica que nenhuma estatística foi gerada.

    • date: a hora UTC na qual as estatísticas do DFE foram geradas mais recentemente, no formato ISO 8601.

      nota

      Antes da versão 1.2.1.0 do mecanismo, isso era representado com precisão de minutos, mas a partir da versão 1.2.1.0 do mecanismo, é representado com precisão de milissegundos (por exemplo, 2023-01-24T00:47:43.319Z).

    • note: uma observação sobre problemas no caso em que as estatísticas são inválidas.

    • signatureInfo: contém informações sobre os conjuntos de características gerados nas estatísticas (antes da versão 1.2.1.0 do mecanismo, esse campo era denominado summary). Geralmente, eles não são diretamente úteis:

      • signatureCount: o número total de assinaturas em todos os conjuntos de características.

      • instanceCount: o número total de instâncias do conjunto de características.

      • predicateCount: o número total de predicados exclusivos.

A resposta a uma solicitação de status quando nenhuma estatística foi gerada é semelhante a esta:

{ "status" : "200 OK", "payload" : { "autoCompute" : true, "active" : false, "statisticsId" : -1 } }

Se as estatísticas do DFE estiverem disponíveis, a resposta será semelhante a esta:

{ "status" : "200 OK", "payload" : { "autoCompute" : true, "active" : true, "statisticsId" : 1588893232718, "date" : "2020-05-07T23:13Z", "summary" : { "signatureCount" : 5, "instanceCount" : 1000, "predicateCount" : 20 } } }

Se ocorrer uma falha na geração de estatísticas do DFE, por exemplo, porque excedeu o limite de tamanho das estatísticas, a resposta será semelhante a esta:

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

Desabilitar a geração automática de estatísticas do DFE

Por padrão, a geração automática de estatísticas do DFE é habilitada quando você habilita o DFE.

É possível desabilitar a geração automática da seguinte forma:

nota

Os exemplos a seguir usam o endpoint e os comandos do gráfico de propriedades. Para dados RDF, use manage-sparql-statistics para o AWS CLI e /rdf/statistics para endpoints REST.

AWS CLI
aws neptunedata manage-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port \ --mode disableAutoCompute

Para obter mais informações, consulte manage-propertygraph-statistics na Referência de comandos. AWS CLI

SDK
import boto3 from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.manage_propertygraph_statistics(mode='disableAutoCompute') print(response['status'])
awscurl
awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db \ -X POST \ -H 'Content-Type: application/json' \ -d '{"mode":"disableAutoCompute"}'
nota

Este exemplo pressupõe que suas AWS credenciais estejam configuradas em seu ambiente. us-east-1Substitua pela região do seu cluster Neptune.

Para obter mais informações sobre como usar awscurl com a autenticação do IAM, consulteUsando awscurl com credenciais temporárias para se conectar com segurança a um cluster de banco de dados com a autenticação IAM ativada.

curl
curl -X POST -d '{ "mode" : "disableAutoCompute" }' https://your-neptune-endpoint:port/propertygraph/statistics

Se a solicitação for bem-sucedida, o código de resposta HTTP será 200 e a resposta será:

{ "status" : "200 OK" }

É possível confirmar se a geração automática está desabilitada permitindo uma solicitação de status e conferindo se o campo autoCompute na resposta está definido como false.

A desativação da geração automática de estatísticas não encerra um cálculo estatístico em andamento.

Se você fizer uma solicitação para desabilitar a geração automática para uma instância de leitor e não para a instância de gravador do cluster de banco de dados, ocorrerá uma falha na solicitação com um código de retorno HTTP de 400 e uma saída como a seguinte:

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

Consulte Erros comuns para obter uma lista de outros erros comuns.

Re-enabling geração automática de estatísticas do DFE

Por padrão, a geração automática de estatísticas do DFE já é habilitada quando você habilita o DFE. Se você desabilitar a geração automática, poderá reabilitá-la posteriormente da seguinte maneira:

nota

Os exemplos a seguir usam o endpoint e os comandos do gráfico de propriedades. Para dados RDF, use manage-sparql-statistics para o AWS CLI e /rdf/statistics para endpoints REST.

AWS CLI
aws neptunedata manage-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port \ --mode enableAutoCompute

Para obter mais informações, consulte manage-propertygraph-statistics na Referência de comandos. AWS CLI

SDK
import boto3 from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.manage_propertygraph_statistics(mode='enableAutoCompute') print(response['status'])
awscurl
awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db \ -X POST \ -H 'Content-Type: application/json' \ -d '{"mode":"enableAutoCompute"}'
nota

Este exemplo pressupõe que suas AWS credenciais estejam configuradas em seu ambiente. us-east-1Substitua pela região do seu cluster Neptune.

Para obter mais informações sobre como usar awscurl com a autenticação do IAM, consulteUsando awscurl com credenciais temporárias para se conectar com segurança a um cluster de banco de dados com a autenticação IAM ativada.

curl
curl -X POST -d '{ "mode" : "enableAutoCompute" }' https://your-neptune-endpoint:port/propertygraph/statistics

Se a solicitação for bem-sucedida, o código de resposta HTTP será 200 e a resposta será:

{ "status" : "200 OK" }

É possível confirmar se a geração automática está habilitada permitindo uma solicitação de status e conferindo se o campo autoCompute na resposta está definido como true.

Acionar manualmente a geração de estatísticas do DFE

É possível iniciar a geração de estatísticas do DFE manualmente da seguinte forma:

nota

Os exemplos a seguir usam o endpoint e os comandos do gráfico de propriedades. Para dados RDF, use manage-sparql-statistics para o AWS CLI e /rdf/statistics para endpoints REST.

AWS CLI
aws neptunedata manage-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port \ --mode refresh

Para obter mais informações, consulte manage-propertygraph-statistics na Referência de comandos. AWS CLI

SDK
import boto3 import json from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.manage_propertygraph_statistics(mode='refresh') print(json.dumps(response['payload'], indent=2, default=str))
awscurl
awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db \ -X POST \ -H 'Content-Type: application/json' \ -d '{"mode":"refresh"}'
nota

Este exemplo pressupõe que suas AWS credenciais estejam configuradas em seu ambiente. us-east-1Substitua pela região do seu cluster Neptune.

Para obter mais informações sobre como usar awscurl com a autenticação do IAM, consulteUsando awscurl com credenciais temporárias para se conectar com segurança a um cluster de banco de dados com a autenticação IAM ativada.

curl
curl -X POST -d '{ "mode" : "refresh" }' https://your-neptune-endpoint:port/propertygraph/statistics

Se a solicitação for bem-sucedida, a saída será a seguinte, com um código de retorno HTTP de 200:

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

O statisticsId na saída é o ID da execução da geração de estatísticas que está ocorrendo atualmente. Se uma execução já estiver em andamento no momento da solicitação, a solicitação vai gerar o ID dessa execução em vez de iniciar outra. Somente uma execução de geração de estatísticas pode ocorrer por vez.

Se ocorrer um failover enquanto as estatísticas do DFE estiverem sendo geradas, o novo nó de gravador selecionará o último ponto de verificação processado e retomará a execução das estatísticas a partir daí.

Usando a StatsNumStatementsScanned CloudWatch métrica para monitorar o cálculo estatístico

A StatsNumStatementsScanned CloudWatch métrica retorna o número total de declarações escaneadas para cálculo estatístico desde a inicialização do servidor. Ela é atualizada em cada fatia de cálculo de estatísticas.

Toda vez que o cálculo de estatísticas é acionado, esse número aumenta e, quando nenhum cálculo está acontecendo, ele permanece constante. Portanto, a análise de um gráfico de valores StatsNumStatementsScanned ao longo do tempo oferece uma imagem bem clara de quando o cálculo de estatísticas estava acontecendo e com que rapidez:

Gráfico de valores StatsNumStatementsScanned métricos

Quando o cálculo está ocorrendo, a inclinação do grafo mostra a velocidade (quanto mais íngreme a inclinação, com maior rapidez as estatísticas são calculadas).

Se o grafo for simplesmente uma linha plana em 0, o atributo de estatísticas foi habilitado, mas nenhuma estatística foi calculada. Se o atributo de estatísticas tiver sido desativado ou se você estiver usando uma versão do mecanismo que não é compatível com o cálculo de estatísticas, StatsNumStatementsScanned não existe.

Conforme mencionado anteriormente, é possível desabilitar o cálculo de estatísticas usando a API de estatísticas, mas deixá-lo desabilitado pode fazer com que as estatísticas não estejam atualizadas, o que, por sua vez, pode ocasionar a geração deficiente do plano de consulta para o mecanismo do DFE.

Consulte Monitorando Neptune usando a Amazon CloudWatch para obter informações sobre como usar CloudWatch.

Utilizar AWS Identity and Access Management Autenticação (IAM) com endpoints de estatísticas do DFE

Você pode acessar os endpoints de estatísticas do DFE de forma segura com a autenticação do IAM usando o AWS CLIawscurl ou qualquer outra ferramenta que funcione com HTTPS e IAM. Para obter informações sobre como configurar as credenciais adequadas, consulteUsando awscurl com credenciais temporárias para se conectar com segurança a um cluster de banco de dados com a autenticação IAM ativada.

Os exemplos a seguir mostram como fazer uma solicitação de status autenticada:

nota

Os exemplos a seguir usam o endpoint e os comandos do gráfico de propriedades. Para dados RDF, use os comandos SPARQL equivalentes (get-sparql-statistics,manage-sparql-statistics) para o e /rdf/statistics para os AWS CLI endpoints REST.

AWS CLI
aws neptunedata get-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port

O AWS CLI manipula a autenticação do IAM automaticamente usando suas credenciais configuradas.

SDK
import boto3 import json from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.get_propertygraph_statistics() print(json.dumps(response['payload'], indent=2, default=str))

O SDK processa a autenticação do IAM automaticamente usando suas credenciais configuradas.

awscurl
awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db
nota

us-east-1Substitua pela região do seu cluster Neptune.

curl
curl -G https://your-neptune-endpoint:port/propertygraph/statistics
nota

Este exemplo não inclui a autenticação do IAM. Para usar a autenticação do IAM comcurl, você deve assinar manualmente a solicitação. Considere usar o AWS CLI SDK ou, awscurl em vez disso.

Os exemplos a seguir iniciam manualmente a geração de estatísticas com autenticação:

AWS CLI
aws neptunedata manage-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port \ --mode refresh
SDK
import boto3 import json from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.manage_propertygraph_statistics(mode='refresh') print(json.dumps(response['payload'], indent=2, default=str))
awscurl

Crie um arquivo JSON chamado request.json que contenha:

{ "mode" : "refresh" }

Em seguida, execute:

awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db \ -X POST \ -H 'Content-Type: application/json' \ -d @request.json
curl
curl -X POST https://your-neptune-endpoint:port/propertygraph/statistics \ -H 'Content-Type: application/json' \ -d '{ "mode" : "refresh" }'
nota

Este exemplo não inclui a autenticação do IAM. Para usar a autenticação do IAM comcurl, você deve assinar manualmente a solicitação. Considere usar o AWS CLI SDK ou, awscurl em vez disso.

Excluir estatísticas do DFE

Você pode excluir todas as estatísticas no banco de dados da seguinte forma:

nota

Os exemplos a seguir usam o endpoint e os comandos do gráfico de propriedades. Para dados RDF, use delete-sparql-statistics para o AWS CLI e /rdf/statistics para endpoints REST.

AWS CLI
aws neptunedata delete-propertygraph-statistics \ --endpoint-url https://your-neptune-endpoint:port

Para obter mais informações, consulte delete-propertygraph-statistics na Referência de comandos. AWS CLI

SDK
import boto3 import json from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.delete_propertygraph_statistics() print(json.dumps(response['payload'], indent=2, default=str))
awscurl
awscurl https://your-neptune-endpoint:port/propertygraph/statistics \ --region us-east-1 \ --service neptune-db \ -X DELETE
nota

Este exemplo pressupõe que suas AWS credenciais estejam configuradas em seu ambiente. us-east-1Substitua pela região do seu cluster Neptune.

Para obter mais informações sobre como usar awscurl com a autenticação do IAM, consulteUsando awscurl com credenciais temporárias para se conectar com segurança a um cluster de banco de dados com a autenticação IAM ativada.

curl
curl -X DELETE https://your-neptune-endpoint:port/propertygraph/statistics

Os códigos de retorno HTTP válidos são:

  • 200: a exclusão foi bem-sucedida.

    Nesse caso, uma resposta típica seria:

    { "status" : "200 OK", "payload" : { "active" : false, "statisticsId" : -1 } }
  • 204: não havia estatísticas para excluir.

    Nesse caso, a resposta está em branco (sem resposta).

Se você enviar uma solicitação de exclusão a um endpoint de estatísticas em um nó de leitor, uma ReadOnlyViolationException será lançada.

Códigos de erro comuns para solicitação de estatísticas do DFE

Veja a seguir uma lista de erros comuns que podem ocorrer quando você faz uma solicitação a um endpoint de estatísticas:

  • AccessDeniedException: Código de retorno: 400. Mensagem: Missing Authentication Token.

  • BadRequestException (para Gremlin e openCypher): Código de retorno: 400. Mensagem: Bad route: /pg/statistics.

  • BadRequestException (para dados do RDF): Código de retorno: 400. Mensagem: Bad route: /rdf/statistics.

  • InvalidParameterException: Código de retorno: 400. Mensagem: Statistics command parameter 'mode' has unsupported value 'the invalid value'.

  • MissingParameterException: Código de retorno: 400. Mensagem: Content-type header not specified..

  • ReadOnlyViolationException: Código de retorno: 400. Mensagem: Writes are not permitted on a read replica instance.

Por exemplo, se você fizer uma solicitação quando o DFE e as estatísticas não estiverem habilitados, receberá uma resposta como a seguinte:

{ "code" : "BadRequestException", "requestId" : "b2b8f8ee-18f1-e164-49ea-836381a3e174", "detailedMessage" : "Bad route: /sparql/statistics" }