Erros comuns do QLDB driver da Amazon - Banco de dados Amazon Quantum Ledger (AmazonQLDB)

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

Erros comuns do QLDB driver da Amazon

Importante

Aviso de fim do suporte: os clientes existentes poderão usar a Amazon QLDB até o final do suporte em 31/07/2025. Para obter mais detalhes, consulte Migrar um Amazon QLDB Ledger para o Amazon Aurora Postgre. SQL

Esta seção descreve os erros de tempo de execução que podem ser gerados pelo QLDB driver da Amazon ao interagir com a QLDBsessão API.

Veja a seguir uma lista de exceções comuns retornadas pelo driver. Cada exceção inclui a mensagem de erro específica, seguida por uma breve descrição e sugestões de possíveis soluções.

CapacityExceededException

Mensagem: Capacidade excedida

A Amazon QLDB rejeitou a solicitação porque ela excedeu a capacidade de processamento do livro contábil. QLDBimpõe um limite de escala interno por livro contábil para manter a integridade e o desempenho do serviço. Esse limite varia de acordo com o tamanho da workload de cada solicitação individual. Por exemplo, uma solicitação pode ter uma workload maior se realizar transações de dados ineficientes, como varreduras de tabelas resultantes de uma consulta qualificada não indexada.

Recomendamos que você espere antes de repetir a solicitação. Se seu aplicativo encontrar essa exceção de forma consistente, otimize suas instruções e diminua a taxa e o volume das solicitações que você envia para o ledger. Exemplos de otimização de instruções incluem a execução de menos instruções por transação e o ajuste dos índices da tabela. Para saber como otimizar instruções e evitar varreduras de tabelas, consulte Otimizar a performance da consulta.

Também recomendamos usar a versão mais recente do QLDB driver. O driver tem uma política de repetição padrão que usa recuo exponencial e Jitter para repetir automaticamente exceções como essa. O conceito por detrás do recuo exponencial é usar esperas progressivamente mais longas entre as novas tentativas para respostas de erro consecutivas.

InvalidSessionException

Mensagem: Transação transactionId expirou

Uma transação excedeu sua vida útil máxima. Uma transação pode ser executada por até 30 segundos antes de ser confirmada. Após esse limite de tempo limite, qualquer trabalho realizado na transação é rejeitado e a sessão é QLDB descartada. Esse limite protege o cliente de sessões vazadas ao iniciar transações e não confirmá-las ou cancelá-las.

Se essa for uma exceção comum em seu aplicativo, é provável que as transações estejam simplesmente demorando muito para serem executadas. Se o runtime da transação estiver demorando mais de 30 segundos, otimize seus extratos para acelerar as transações. Exemplos de otimização de instruções incluem a execução de menos instruções por transação e o ajuste dos índices da tabela. Para ter mais informações, consulte Otimizar a performance da consulta.

InvalidSessionException

Mensagem: Sessão sessionId expirou

QLDBdescartou a sessão porque ela excedeu sua vida útil total máxima. QLDBdescarta as sessões após 13 a 17 minutos, independentemente de uma transação ativa. As sessões podem ser perdidas ou prejudicadas por vários motivos, como falha de hardware, falha de rede ou reinicialização de aplicativos. Portanto, QLDB impõe uma vida útil máxima às sessões para garantir que o software cliente seja resiliente a falhas de sessão.

Se você encontrar essa exceção, recomendamos que você adquira uma nova sessão e repita a transação. Também recomendamos usar a versão mais recente do QLDB driver, que gerencia o pool de sessões e sua integridade em nome do aplicativo.

InvalidSessionException

Mensagem: Essa sessão não existe

O cliente tentou fazer transações QLDB usando uma sessão que não existe. Supondo que o cliente esteja usando uma sessão que existia anteriormente, a sessão pode não existir mais devido a um dos seguintes motivos:

  • Se uma sessão estiver envolvida em uma falha interna do servidor (ou seja, um erro com o código de HTTP resposta 500), QLDB pode optar por descartar a sessão completamente, em vez de permitir que o cliente faça transações com uma sessão de estado incerto. Então, qualquer nova tentativa nessa sessão falhará com esse erro.

  • As sessões expiradas acabam sendo esquecidas porQLDB. Então, qualquer tentativa de continuar usando a sessão resultará nesse erro, em vez do InvalidSessionException inicial.

Se você encontrar essa exceção, recomendamos que você adquira uma nova sessão e repita a transação. Também recomendamos usar a versão mais recente do QLDB driver, que gerencia o pool de sessões e sua integridade em nome do aplicativo.

RateExceededException

Mensagem: A taxa foi excedida

QLDBlimitou um cliente com base na identidade do chamador. QLDBimpõe a limitação por região e por conta usando um algoritmo de limitação de token bucket. QLDBfaz isso para ajudar no desempenho do serviço e para garantir o uso justo para todos os QLDB clientes. Por exemplo, tentar adquirir um grande número de sessões simultâneas usando a operação StartSessionRequest pode levar ao controle de utilização.

Para manter a integridade do aplicativo e reduzir ainda mais o controle de utilização, você pode tentar novamente essa exceção usando recuo exponencial e jitter. O conceito por detrás do recuo exponencial é usar esperas progressivamente mais longas entre as novas tentativas para respostas de erro consecutivas. Recomendamos usar a versão mais recente do QLDB driver. O driver tem uma política de repetição padrão que usa recuo exponencial e Jitter para repetir automaticamente exceções como essa.

A versão mais recente do QLDB driver também pode ajudar se seu aplicativo estiver constantemente sendo limitado QLDB para StartSessionRequest fazer chamadas. O driver mantém um pool de sessões que são reutilizadas em todas as transações, o que pode ajudar a reduzir o número de chamadas StartSessionRequest que seu aplicativo faz. Para solicitar um aumento nos limites de API limitação, entre em contato com o AWS Support Centro.

LimitExceededException

Mensagem: Excedeu o limite da sessão

Um ledger excedeu sua cota (também conhecida como limite) no número de sessões ativas. Essa cota é definida em Cotas e limites na Amazon QLDB. Eventualmente, a contagem de sessões ativas de um ledger é consistente, e ledgers consistentemente próximos à cota podem ver essa exceção periodicamente.

Para manter a integridade do seu aplicativo, recomendamos tentar novamente essa exceção. Para evitar essa exceção, certifique-se de não ter configurado mais de 1.500 sessões simultâneas para serem usadas em um único ledger em todos os clientes. Por exemplo, você pode usar o maxConcurrentTransactionsmétodo do QLDBdriver Amazon para Java para configurar o número máximo de sessões disponíveis em uma instância do driver.

QldbClientException

Mensagem: Um resultado transmitido só é válido quando a transação principal está aberta

A transação está fechada e não pode ser usada para recuperar os resultados. QLDB Uma transação é fechada quando é confirmada ou cancelada.

Essa exceção ocorre quando o cliente está trabalhando diretamente com o Transaction objeto e está tentando recuperar os resultados QLDB após confirmar ou cancelar uma transação. Para mitigar esse problema, o cliente deve ler os dados antes de fechar a transação.