Comparar os comportamentos da API de dados do Amazon RDS para clusters do Aurora Serverless v2 e provisionados com clusters do Aurora Serverless v1
Os aprimoramentos mais recentes das APIs de dados do Amazon RDS as tornam disponíveis para clusters que usam versões recentes dos mecanismos do PostgreSQL ou do MySQL. Esses clusters podem ser configurados para usar o Aurora Serverless v2 ou classes de instância provisionadas, como db.r6g
ou db.r6i
.
As seções a seguir descrevem as diferenças da API de dados do Amazon RDS entre clusters de banco de dados do Aurora Serverless v2 e provisionados e clusters de banco de dados do Aurora Serverless v1. Os clusters de banco de dados do Aurora Serverless v1 usam o modo de mecanismo serverless
. Os clusters de banco de dados provisionados usam o modo de mecanismo provisioned
. Um cluster de banco de dados Aurora Serverless v2 também usa o modo de mecanismo provisioned
e contém uma ou mais instâncias de banco de dados Aurora Serverless v2 com a classe de instância db.serverless
.
Número máximo de solicitações por segundo
Aurora Serverless v1
As APIs de dados podem fazer até mil solicitações por segundo.
Aurora Serverless v2
As APIs de dados podem fazer um número ilimitado de solicitações por segundo.
Habilitar ou desabilitar a API de dados do Amazon RDS em um banco de dados existente
Aurora Serverless v1
-
Com a API do Amazon RDS: use a operação
ModifyCluster
e especifiqueTrue
ouFalse
, conforme aplicável, para o parâmetroEnableHttpEndpoint
. -
Com a AWS CLI: use a operação
modify-db-cluster
com a opção--enable-http-endpoint
ou--no-enable-http-endpoint
, conforme aplicável.
Aurora Serverless v2
-
Com a API do Amazon RDS: use as operações
EnableHttpEndpoint
eDisableHttpEndpoint
. -
Com a AWS CLI: use as operações
enable-http-endpoint
edisable-http-endpoint
.
Eventos do CloudTrail
Aurora Serverless v1
Os eventos das chamadas da API de dados são eventos de gerenciamento. Esses eventos são incluídos automaticamente em uma trilha por padrão. Para obter mais informações, consulte Excluir eventos da API de dados de uma trilha do AWS CloudTrail (somente o Aurora Serverless v1).
Aurora Serverless v2
Os eventos das chamadas da API de dados são eventos de dados. Esses eventos são excluídos automaticamente em uma trilha por padrão. Para obter mais informações, consulte Incluir eventos da API de dados em uma trilha do AWS CloudTrail.
Suporte a várias declarações
Aurora Serverless v1
-
No Aurora MySQL, não há suporte para várias declarações.
-
Para o Aurora PostgreSQL, várias declarações exibem somente a primeira resposta da consulta.
Aurora Serverless v2
Não há suporte a várias declarações. A tentativa de executar várias instruções em uma única chamada de API exibe “An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.”
. Para executar várias instruções, faça chamadas de API ExecuteStatement
separadas ou use BatchExecuteStatement
para processamento em lote.
O exemplo a seguir mostra a mensagem de erro resultante de uma chamada de API que tenta executar várias instruções.
aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM your_table; Select * FROM next_table; "An error occurred (ValidationException) when calling the ExecuteStatement operation: Multistatements aren't supported.
O exemplo a seguir executa várias instruções com chamadas de API ExecuteStatement
separadas.
aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM your_table;" aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM next_table;"
Solicitações simultâneas para o mesmo ID de transação
Aurora Serverless v1
As solicitações subsequentes aguardam até que a solicitação atual seja concluída. Sua aplicação precisará lidar com erros de tempo limite se o período de espera for muito longo.
Aurora Serverless v2
Quando a API de dados recebe várias solicitações com o mesmo ID de transação, ela retorna imediatamente este erro:
DatabaseErrorException: Transaction is still running a query
Esse erro ocorre em duas situações:
-
A aplicação faz solicitações assíncronas (como promessas de JavaScript) usando o mesmo ID de transação.
-
Uma solicitação anterior com esse ID de transação ainda está sendo processada.
O exemplo a seguir mostra todas as solicitações executadas em paralelo com promise.all()
.
const api_calls = []; for (let i = 0; i < 10; i++) { api_calls.push( client.send( new ExecuteStatementCommand({ ...params, sql: `insert into table_name values (i);`, transactionId }) ) ); } await Promise.all(api_calls);
Para resolver esse erro, aguarde a conclusão da solicitação atual antes de enviar outra solicitação com o mesmo ID de transação ou remova o ID da transação para permitir solicitações paralelas.
O exemplo a seguir mostra uma chamada de API que usa execução sequencial com o mesmo ID de transação.
for (let i = 0; i < 10; i++) { await client.send( new ExecuteStatementCommand({ ...params, sql: `insert into table_name values (i);`, transactionId }) ).promise() ); }
Comportamento de BatchExecuteStatement
Para ter mais informações sobre BatchExecuteStatement
, consulte BatchExecuteStatement.
Aurora Serverless v1
O objeto de campos gerado no resultado da atualização inclui valores inseridos.
Aurora Serverless v2
-
Para o Aurora MySQL, o objeto de campos gerado no resultado da atualização tem valores inseridos.
-
Para o Aurora PostgreSQL, o objeto de campos gerado não contém valores.
Comportamento do ExecuteSQL
Para ter mais informações sobre ExecuteSQL
, consulte ExecuteSQL.
Aurora Serverless v1
A operação ExecuteSQL
está obsoleta.
Aurora Serverless v2
A operação ExecuteSQL
não é compatível.
Comportamento de ExecuteStatement
Para ter mais informações sobre ExecuteStatement
, consulte ExecuteStatement.
Aurora Serverless v1
O parâmetro ExecuteStatement
é compatível com a recuperação de colunas de matriz multidimensionais e todos os tipos de dados avançados.
Aurora Serverless v2
O parâmetro ExecuteStatement
não é compatível com colunas de matriz multidimensionais. Ele também não é compatível com determinados tipos de dados do PostgreSQL, como tipos geométricos e monetários. Quando uma API de dados encontra um tipo de dados incompatível, ela retorna este erro: UnsupportedResultException: The result contains the unsupported data type data_type
.
Para contornar esse problema, converta o tipo de dados não aceito em TEXT
. O exemplo a seguir converte um tipo de dados não compatível em TEXT
.
SELECT custom_type::TEXT FROM my_table;-- ORSELECT CAST(custom_type AS TEXT) FROM my_table;
Para obter uma lista dos tipos de dados compatíveis com cada mecanismo de banco de dados do Aurora, consulte Referência de operações da API de dados do Amazon RDS.
Comportamento do parâmetro de esquema
Aurora Serverless v1
O parâmetro Schema
não é compatível. Quando você inclui o parâmetro Schema
em uma chamada de API, a API de dados ignora o parâmetro.
Aurora Serverless v2
O parâmetro Schema
está obsoleto. Quando você inclui o parâmetro Schema
em uma chamada de API, a API de Dados retorna este erro: ValidationException: The schema parameter isn't supported
. O exemplo a seguir mostra uma chamada da API de dados que retorna o erro ValidationException
.
aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --schema "your_schema" \ --sql "SELECT * FROM your_table LIMIT 10"
Para resolver esse problema, remova o parâmetro Schema
da chamada de API.
O exemplo a seguir mostra uma chamada da API de dados com o parâmetro Schema
removido.
aws rds-data execute-statement \ --resource-arn "arn:aws:rds:region:account:cluster:cluster-name" \ --secret-arn "arn:aws:secretsmanager:region:account:secret:secret-name" \ --database "your_database" \ --sql "SELECT * FROM your_table LIMIT 10"