

# Considerações sobre a conexão do RDS Proxy
<a name="rds-proxy-connections"></a>

## Configurar configurações de conexões
<a name="rds-proxy-connection-pooling-tuning"></a>

Para ajustar o grupo de conexões do RDS Proxy, você pode modificar as seguintes configurações:
+ [IdleClientTimeout](#rds-proxy-connection-pooling-tuning.idleclienttimeout)
+ [MaxConnectionsPercent](#rds-proxy-connection-pooling-tuning.maxconnectionspercent)
+ [MaxIdleConnectionsPercent](#rds-proxy-connection-pooling-tuning.maxidleconnectionspercent)
+ [ConnectionBorrowTimeout](#rds-proxy-connection-pooling-tuning.connectionborrowtimeout)

### IdleClientTimeout
<a name="rds-proxy-connection-pooling-tuning.idleclienttimeout"></a>

É possível especificar por quanto tempo uma conexão de cliente pode ficar antes que o proxy a feche. O padrão é de 1.800 segundos (30 minutos). 

Uma conexão de cliente é considerada *ociosa* quando a aplicação não envia uma nova solicitação dentro do tempo especificado após a conclusão da solicitação anterior. A conexão de banco de dados subjacente permanece aberta e é retornada ao grupo de conexões. Portanto, ela está disponível para ser reutilizada para novas conexões de cliente. Reduza o tempo limite de conexão do cliente ocioso se desejar que o proxy remova proativamente as conexões obsoletas. Se a workload estabelecer conexões frequentes com o proxy, aumente o tempo limite de conexão do cliente ocioso para reduzir o custo de estabelecimento de conexões.

Essa configuração é representada pelo **Tempo limite de conexão do cliente ocioso** no console do RDS e na configuração `IdleClientTimeout` na AWS CLI e a API. Para saber como alterar o valor do **Tempo limite de conexão do cliente ocioso** no console do RDS, consulte [Console de gerenciamento da AWS](rds-proxy-modifying-proxy.md#rds-proxy-modifying-proxy.console). Para saber como alterar o valor da configuração `IdleClientTimeout`, use o comando da CLI [modify-db-proxy](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-proxy.html) ou a operação da API [ModifyDBProxy](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBProxy.html).

### MaxConnectionsPercent
<a name="rds-proxy-connection-pooling-tuning.maxconnectionspercent"></a>

Você pode limitar o número de conexões que um Proxy RDS pode estabelecer com o banco de dados de destino. Você especifica o limite como uma porcentagem do máximo de conexões disponíveis para o banco de dados. Essa configuração é representada pelo campo **Connection pool maximum connections** (Número máximo de conexões para o grupo de conexões) no console do proxy do RDS ou pelo parâmetro `MaxConnectionsPercent` na AWS CLI e na API. 

O valor `MaxConnectionsPercent` é expresso como uma porcentagem da configuração `max_connections` da instância de banco de dados do RDS usada pelo grupo de destino. O proxy não cria todas essas conexões com antecedência. Essa configuração permite ao proxy estabelecer essas conexões conforme a necessidade da workload.

Por exemplo, para um destino de banco de dados registrado com `max_connections` definido como 1.000 e `MaxConnectionsPercent` definido como 95, o RDS Proxy define 950 conexões como o limite superior para conexões simultâneas com esse destino de banco de dados.

Um efeito colateral comum de sua workload atingir o número máximo de conexões de banco de dados permitidas é um aumento na latência geral da consulta, bem como um aumento na métrica `DatabaseConnectionsBorrowLatency`. Você pode monitorar as conexões de banco de dados usadas atualmente e o total permitido comparando as métricas `DatabaseConnections` e `MaxDatabaseConnectionsAllowed`.

Ao definir esse parâmetro, observe as seguintes práticas recomendadas:
+ Permita espaço de conexão suficiente para mudanças no padrão da workload. É recomendável definir o parâmetro pelo menos 30% acima do seu uso máximo monitorado recentemente. Como o RDS Proxy redistribui as cotas de conexão do banco de dados em vários nós, as mudanças na capacidade interna podem exigir pelo menos 30% de espaço livre para conexões adicionais, a fim de evitar o aumento das latências de empréstimo.
+ O RDS Proxy reserva um certo número de conexões para monitoramento ativo para comportar falhas rápidas, roteamento de tráfego e operações internas. A métrica `MaxDatabaseConnectionsAllowed` não inclui essas conexões reservadas. Ela representa o número de conexões disponíveis para atender à workload e pode ser menor do que o valor derivado da configuração `MaxConnectionsPercent`.

  Valores `MaxConnectionsPercent` mínimos recomendados
  + db.t3.small: 30
  + db.t3.medium ou superior: 20

Para saber como alterar o valor **Connection pool maximum connections** (Número máximo de conexões para o grupo de conexões) no console do RDS, consulte [Console de gerenciamento da AWS](rds-proxy-modifying-proxy.md#rds-proxy-modifying-proxy.console). Para saber como alterar o valor de `MaxConnectionsPercent`, consulte o comando da CLI [modify-db-proxy-target-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-proxy-target-group.html) ou a operação da API [ModifyDBProxyTargetGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBProxyTargetGroup.html).

 Para obter informações sobre os limites de conexões de banco de dados, consulte [Número máximo de conexões de banco de dados](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.MaxConnections). 

### MaxIdleConnectionsPercent
<a name="rds-proxy-connection-pooling-tuning.maxidleconnectionspercent"></a>

Você pode controlar o número de conexões de banco de dados ociosas que o proxy do RDS pode manter no grupo de conexões. Por padrão, o RDS Proxy considera uma conexão de banco de dados no grupo como *ociosa* quando não há atividade na conexão por cinco minutos. 

O valor `MaxIdleConnectionsPercent` é expresso como uma porcentagem da configuração `max_connections` do grupo de destino da instância de banco de dados do RDS. O valor padrão é 50% de `MaxConnectionsPercent` e o limite superior é o valor de `MaxConnectionsPercent`. Por exemplo, se `MaxConnectionsPercent` for 80, o valor padrão de `MaxIdleConnectionsPercent` será 40. Se o valor de `MaxConnectionsPercent` não for especificado, para o SQL Server, `MaxIdleConnectionsPercent` será 5 e, para todos os outros mecanismos, o padrão será 50.

Com um valor alto, o proxy deixa uma alta porcentagem de conexões de banco de dados ociosas abertas. Com um valor baixo, o proxy fecha uma alta porcentagem de conexões de banco de dados ociosas. Se suas workloads forem imprevisíveis, considere definir um valor alto para `MaxIdleConnectionsPercent`. Isso significa que o RDS Proxy pode acomodar picos de atividade sem abrir muitas novas conexões de banco de dados. 

Essa configuração é representada pela configuração `MaxIdleConnectionsPercent` do `DBProxyTargetGroup` na AWS CLI e na API. Para saber como alterar o valor de `MaxIdleConnectionsPercent`, consulte o comando da CLI [modify-db-proxy-target-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-proxy-target-group.html) ou a operação da API [ModifyDBProxyTargetGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBProxyTargetGroup.html).

 Para obter informações sobre os limites de conexões de banco de dados, consulte [Número máximo de conexões de banco de dados](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.MaxConnections). 

### ConnectionBorrowTimeout
<a name="rds-proxy-connection-pooling-tuning.connectionborrowtimeout"></a>

É possível especificar quanto tempo o proxy do RDS espera que uma conexão de banco de dados no grupo de conexão fique disponível antes de retornar um erro de tempo limite. O padrão é 120 segundos. Esta configuração se aplica quando o número de conexões está no máximo e, portanto, nenhuma conexão está disponível no grupo de conexões. Isso também se aplica caso nenhuma instância de banco de dados apropriada esteja disponível para lidar com a solicitação, por exemplo, quando uma operação de failover está em andamento. Usando essa configuração, é possível definir o melhor período de espera para a aplicação sem precisar alterar o tempo limite da consulta no código.

Essa configuração é representada pelo campo **Connection borrow timeout** (Tempo limite de empréstimo de conexões) no console do RDS ou pela configuração `ConnectionBorrowTimeout` de `DBProxyTargetGroup` na AWS CLI ou API. Para saber como alterar o valor do campo **Connection borrow timeout** (Tempo limite de empréstimo de conexões) no console do RDS, consulte [Console de gerenciamento da AWS](rds-proxy-modifying-proxy.md#rds-proxy-modifying-proxy.console). Para saber como alterar o valor de `ConnectionBorrowTimeout`, consulte o comando da CLI [modify-db-proxy-target-group](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-proxy-target-group.html) ou a operação da API [ModifyDBProxyTargetGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBProxyTargetGroup.html).

## Conexões de cliente e banco de dados
<a name="rds-proxy-connection-life"></a>

As conexões do seu aplicativo com o RDS Proxy são conhecidas como conexões de cliente. As conexões de um proxy com o banco de dados são conexões de banco de dados. Ao usar o RDS Proxy, as conexões do cliente terminam no proxy, enquanto as conexões do banco de dados são gerenciadas no RDS Proxy.

O grupo de conexões do lado da aplicação pode oferecer o benefício de reduzir o estabelecimento de conexão recorrente entre a aplicação e o RDS Proxy.

Pense nos seguintes aspectos de configuração antes de implementar um grupo de conexões do lado da aplicação:
+ Vida útil máxima da conexão do cliente: o RDS Proxy impõe uma vida útil máxima das conexões do cliente de 24 horas. Esse valor não é configurável. Configure o grupo com uma vida útil máxima de conexão inferior a 24 horas para evitar quedas inesperadas na conexão do cliente. 
+ Tempo limite de inatividade da conexão do cliente: o RDS Proxy impõe um tempo máximo de inatividade para as conexões do cliente. Configure seu pool com um tempo limite de conexão ociosa de um valor menor do que a configuração de tempo limite de inatividade da conexão do cliente para o RDS Proxy para evitar quedas inesperadas de conexão.

O número máximo de conexões de cliente configuradas no grupo de conexões do lado da aplicação não precisa ser limitado à configuração **max\$1connections** do RDS Proxy.

O grupo de conexões do cliente resulta em maior vida útil da conexão do cliente. Se suas conexões experimentarem fixação, o agrupamento de conexões de clientes pode reduzir a eficiência da multiplexação. As conexões de cliente fixas, mas ociosas, no grupo de conexões do lado da aplicação continuam mantendo uma conexão com o banco de dados e impedem que a conexão seja reutilizada por outras conexões do cliente. Analise os logs do proxy para conferir se as conexões estão sendo fixadas.

**nota**  
O proxy do RDS encerra as conexões com o banco de dados depois de 24 horas, quando elas não estiverem mais em uso. O proxy executa essa ação independentemente do valor da configuração máxima de conexões ociosas.