

# Client:ClientRead
<a name="apg-waits.clientread"></a>

O evento `Client:ClientRead` ocorre quando o Aurora PostgreSQL está aguardando para receber dados do cliente.

**Topics**
+ [Versões compatíveis do mecanismo](#apg-waits.clientread.context.supported)
+ [Contexto](#apg-waits.clientread.context)
+ [Possíveis causas do maior número de esperas](#apg-waits.clientread.causes)
+ [Ações](#apg-waits.clientread.actions)

## Versões compatíveis do mecanismo
<a name="apg-waits.clientread.context.supported"></a>

Essas informações sobre eventos de espera têm suporte para o Aurora PostgreSQL versão 10 e versões superiores.

## Contexto
<a name="apg-waits.clientread.context"></a>

Um cluster de banco de dados Aurora PostgreSQL está aguardando para receber dados do cliente. O cluster de banco de dados Aurora PostgreSQL deve receber os dados do cliente antes de poder enviar mais dados para esse cliente. O tempo de espera do cluster antes de receber dados do cliente é um evento `Client:ClientRead`.

## Possíveis causas do maior número de esperas
<a name="apg-waits.clientread.causes"></a>

Causas comuns do surgimento do evento `Client:ClientRead` nas principais esperas incluem: 

**Maior latência de rede**  
Pode haver maior latência de rede entre o cluster de banco de dados Aurora PostgreSQL e o cliente. A latência de rede mais alta aumenta o tempo necessário para o cluster de banco de dados receber dados do cliente.

**Maior carga no cliente**  
Pode haver pressão da CPU ou saturação da rede no lado do cliente. Um aumento na carga no cliente pode atrasar a transmissão de dados do cliente para o cluster de banco de dados Aurora PostgreSQL.

**Excesso de viagens de ida e volta na rede**  
Um número elevado de viagens de ida e volta na rede entre o cluster de banco de dados Aurora PostgreSQL e o cliente pode atrasar a transmissão de dados do último para o primeiro.

**Operação de cópia extensa**  
Durante uma operação de cópia, os dados são transferidos do sistema de arquivos do cliente para o cluster de banco de dados Aurora PostgreSQL. O envio de uma muitos dados para o cluster de banco de dados pode atrasar a transmissão de dados do cliente para esse cluster.

**Desconexão de um cliente inativo**  
Uma conexão com uma instância de banco de dados do Aurora PostgreSQL está inativa no estado da transação e está aguardando que um cliente envie mais dados ou emita um comando. Esse estado pode levar a um aumento em eventos `Client:ClientRead`.

**PgBouncer utilizado para agrupamento de conexões**  
PgBouncer tem uma configuração de rede de baixo nível chamada `pkt_buf` e que está definida como 4.096 por padrão. Se a workload estiver enviando pacotes de consulta maiores que 4.096 bytes por meio de PgBouncer, convém aumentar a configuração `pkt_buf` para 8.192. Se a nova configuração não diminuir o número de eventos `Client:ClientRead`, convém aumentar a configuração `pkt_buf` para valores maiores, como 16.384 ou 32.768. Se o texto da consulta for grande, a configuração maior pode ser particularmente útil.

## Ações
<a name="apg-waits.clientread.actions"></a>

Recomenda-se ações distintas, dependendo dos motivos do evento de espera.

**Topics**
+ [Colocar os clientes na mesma zona de disponibilidade e sub-rede VPC que o cluster](#apg-waits.clientread.actions.az-vpc-subnet)
+ [Escalar seu cliente](#apg-waits.clientread.actions.scale-client)
+ [Utilizar instâncias da geração atual](#apg-waits.clientread.actions.db-instance-class)
+ [Aumentar a largura de banda da rede](#apg-waits.clientread.actions.increase-network-bandwidth)
+ [Monitorar máximos de performance da rede](#apg-waits.clientread.actions.monitor-network-performance)
+ [Monitorar transações no estado de “inatividade em transação”](#apg-waits.clientread.actions.check-idle-in-transaction)

### Colocar os clientes na mesma zona de disponibilidade e sub-rede VPC que o cluster
<a name="apg-waits.clientread.actions.az-vpc-subnet"></a>

Para reduzir a latência da rede e aumentar a taxa de transferência da rede, coloque clientes na mesma zona de disponibilidade e na mesma sub-rede de nuvem privada virtual (VPC) que o cluster de banco de dados Aurora PostgreSQL. Assegure-se de que os clientes estejam o mais geograficamente próximos do cluster de banco de dados quanto possível.

### Escalar seu cliente
<a name="apg-waits.clientread.actions.scale-client"></a>

Utilizando o Amazon CloudWatch ou outras métricas de host, determine se o cliente está atualmente restrito pela CPU ou pela largura de banda da rede, ou por ambas. Se o cliente estiver restrito, escale-o de acordo.

### Utilizar instâncias da geração atual
<a name="apg-waits.clientread.actions.db-instance-class"></a>

Em alguns casos, talvez você não esteja utilizando uma classe de instância de banco de dados que ofereça suporte a quadros jumbo. Se estiver executando sua aplicação no Amazon EC2, considere utilizar uma instância de geração atual para o cliente. Além disso, configure a MTU (unidade de transmissão máxima) no sistema operacional cliente. Essa técnica pode reduzir o número de idas e voltas pela rede e aumentar a taxa de transferência da rede. Consulte mais informações em [Frames jumbo (9001 MTU)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/network_mtu.html#jumbo_frame_instances) no *Guia do usuário do Amazon EC2*.

Para obter informações sobre classes de instância de banco de dados, consulte [Classes de instâncias de banco de dados do Amazon Aurora](Concepts.DBInstanceClass.md). Para determinar a classe de instância de banco de dados equivalente a um tipo de instância do Amazon EC2, coloque `db.` antes do nome do tipo de instância do Amazon EC2. Por exemplo, a instância `r5.8xlarge` do Amazon EC2 é equivalente à classe de instância de banco de dados `db.r5.8xlarge`.

### Aumentar a largura de banda da rede
<a name="apg-waits.clientread.actions.increase-network-bandwidth"></a>

Utilize as métricas `NetworkReceiveThroughput` e `NetworkTransmitThroughput` do Amazon CloudWatch para monitorar o tráfego de rede de entrada e saída no cluster de banco de dados. Essas métricas podem ajudar você a determinar se a largura de banda da rede é suficiente para a sua workload. 

Se a largura de banda da rede não suficiente, aumente-a. Se o cliente AWS ou sua instância de banco de dados estiver atingindo os limites de largura de banda da rede, a única maneira de aumentar a largura de banda será ampliar o tamanho da instância de banco de dados.

Para ter mais informações sobre métricas do CloudWatch, consulte [Métricas do Amazon CloudWatch para o Amazon Aurora](Aurora.AuroraMonitoring.Metrics.md).

### Monitorar máximos de performance da rede
<a name="apg-waits.clientread.actions.monitor-network-performance"></a>

Se você utiliza clientes do Amazon EC2, o Amazon EC2 fornece máximos para métricas de performance da rede, incluindo largura de banda de rede agregada de entrada e saída. Ele também fornece rastreamento de conexões para garantir que os pacotes sejam retornados conforme esperado e vinculem localmente o acesso para serviços como o Sistema de Nomes de Domínio (DNS). Para monitorar esses máximos, utilize um driver de rede avançado atual e monitore a performance de rede do seu cliente. 

Consulte mais informações em [Monitorar a performance de rede de sua instância do EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-network-performance-ena.html) no *Guia do usuário do Amazon EC2*.

### Monitorar transações no estado de “inatividade em transação”
<a name="apg-waits.clientread.actions.check-idle-in-transaction"></a>

Verifique se você tem um número cada vez maior de conexões `idle in transaction`. Para isso, monitore a coluna `state` na tabela `pg_stat_activity`. Talvez seja possível identificar a origem da conexão executando uma consulta semelhante à seguinte.

```
select client_addr, state, count(1) from pg_stat_activity 
where state like 'idle in transaction%' 
group by 1,2 
order by 3 desc
```