Client:ClientRead - Amazon Aurora

Client:ClientRead

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

Versões compatíveis do mecanismo

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

Contexto

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

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

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

Colocar os clientes na mesma zona de disponibilidade e sub-rede VPC que o cluster

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

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

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. Para obter mais informações, consulte Quadros jumbo (9001 MTU), no Guia do usuário de instâncias do Amazon EC2 for Linux.

Para obter informações sobre classes de instância de banco de dados, consulte Classes de instância de banco de dados Aurora. 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

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.

Monitorar máximos de performance da rede

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.

Para obter mais informações, consulte Monitorar a performance de rede de sua instância do Amazon EC2, no Guia do usuário dp Amazon EC2 para instâncias Linux, e Monitorar a performance de rede da sua instância do Amazon EC2, no Guia do usuário do Amazon EC2 para instâncias Windows.

Monitorar transações no estado de “inatividade em transação”

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