Ao representar o throughput ao longo do tempo conforme outra variável é modificada, normalmente você vê o throughput aumentar até atingir um ponto de esgotamento de recursos.
A figura a seguir mostra um gráfico típico de escalonamento de capacidade de processamento. À medida que o número de clientes aumenta, a carga de trabalho e a capacidade de processamento aumentam até que todos os recursos sejam esgotados.

O ideal é que, ao dobrar a carga no sistema, a capacidade também dobre. Na prática, haverá disputa por recursos, o que vai gerar aumentos menores na capacidade. Em algum momento, o esgotamento ou a contenção de recursos fará com que a taxa de transferência se estabilize ou até diminua. Se você estiver otimizando para capacidade, esse é um ponto importante a ser identificado, já que direciona seus esforços para onde ajustar o aplicativo ou o sistema de banco de dados para melhorar a capacidade.
Confira alguns motivos típicos para a estabilização ou queda da taxa de transferência:
- Esgotamento de recursos de CPU no servidor de banco de dados
- Esgotamento dos recursos da CPU no cliente para que o servidor de banco de dados não receba mais trabalho
- Disputa de bloqueio de banco de dados
- Tempo de espera de E/S quando os dados excedem o tamanho do pool de buffers do Postgres
- Tempo de espera de E/S devido à utilização do mecanismo de armazenamento
- Gargalos na largura de banda da rede ao retornar dados para o cliente
A latência e a capacidade de processamento são inversamente proporcionais. À medida que a latência aumenta, a capacidade diminui. Intuitivamente, isso faz sentido. À medida que um gargalo começa a se materializar, as operações levam mais tempo, e o sistema realiza menos operações por segundo.

O gráfico de escalonamento de latência mostra como a latência muda à medida que a carga em um sistema aumenta. A latência permanece relativamente constante até que ocorra fricção devido à disputa de recursos. O ponto de inflexão dessa curva geralmente corresponde ao achatamento da curva de taxa de transferência no gráfico de escalonamento da taxa de transferência.
Outra maneira útil de avaliar a latência é como um histograma. Nessa representação, agrupamos as latências em intervalos e contamos quantas solicitações se enquadram em cada intervalo.

Esse histograma de latência mostra que a maioria das solicitações tem menos de 100 milissegundos, e as latências são maiores que 100 milissegundos. Entender a causa das solicitações com latências de cauda mais longas pode ajudar a explicar as variações de performance do aplicativo. As causas do longo período de latências aumentadas correspondem às latências aumentadas vistas no gráfico típico de escalonamento de latência e ao achatamento do gráfico de capacidade de processamento.
O histograma de latência é mais útil quando há várias modalidades em um aplicativo. Uma modalidade é um conjunto normal de condições operacionais. Por exemplo, na maioria das vezes, o aplicativo acessa páginas que estão no cache de buffer. Na maioria das vezes, o aplicativo atualiza linhas existentes, mas pode haver vários modos. Às vezes, o aplicativo está recuperando páginas do armazenamento, inserindo novas linhas ou enfrentando disputa de bloqueio.
Quando um aplicativo encontra esses diferentes modos de operação ao longo do tempo, o histograma de latência mostra essas várias modalidades.

Esta figura mostra um histograma bimodal típico em que a maioria das solicitações é atendida em menos de 100 milissegundos, mas há outro cluster de solicitações que levam de 401 a 500 milissegundos. Entender a causa dessa segunda modalidade pode ajudar a melhorar a performance do seu aplicativo. Também pode haver mais de duas modalidades.
A segunda modalidade pode ser devido a operações normais de banco de dados, infraestrutura e topologia heterogêneas ou comportamento do aplicativo. Confira alguns exemplos:
- A maioria dos acessos a dados é do pool de buffers do PostgreSQL, mas alguns vêm do armazenamento.
- Diferenças nas latências de rede para alguns clientes no servidor de banco de dados
- Lógica de aplicativo que realiza operações diferentes dependendo da entrada ou do horário do dia
- Contenção de bloqueio esporádica
- Picos na atividade do cliente