다른 변수가 수정될 때 시간 경과에 따른 처리량을 그래프로 표시하면 일반적으로 처리량은 리소스 소진점에 도달할 때까지 증가합니다.
다음 그림에서는 일반적인 처리량 확장 그래프를 보여줍니다. 클라이언트 수가 증가하면 모든 리소스가 소진될 때까지 워크로드와 처리량이 증가합니다.

이상적으로는 시스템에서 부하가 두 배로 늘어나면 처리량도 두 배로 늘어나야 합니다. 실제로는 리소스 경합으로 인해 처리량 증가 폭이 줄어듭니다. 어느 시점에는 리소스 소진 또는 경합으로 인해 처리량이 증가하지 않고 심지어 감소합니다. 처리량을 최적화하는 경우 이 지점을 파악하는 것이 핵심입니다. 처리량이 향상되도록 애플리케이션이나 데이터베이스 시스템을 조정해야 할 부분을 찾는 데 도움이 되기 때문입니다.
처리량이 증가하지 않거나 감소하는 일반적인 이유는 다음과 같습니다.
- 데이터베이스 서버의 CPU 리소스 소진
- 클라이언트의 CPU 리소스가 소진되어 데이터베이스 서버에 더 많은 작업이 전송되지 않음
- 데이터베이스 잠금 경합
- 데이터가 Postgres 버퍼 풀 크기를 초과하는 경우의 I/O 대기 시간
- 스토리지 엔진 사용으로 인한 I/O 대기 시간
- 클라이언트로 데이터를 반환하는 네트워크 대역폭 병목 현상
지연 시간과 처리량은 반비례합니다. 지연 시간이 증가하면 처리량이 감소합니다. 이는 직관적으로도 이해할 수 있습니다. 병목 현상이 발생하기 시작하면 작업 시간이 더 오래 걸리고 시스템에서 초당 수행하는 작업 수가 줄어듭니다.

지연 시간 확장 그래프는 시스템에 가해지는 부하가 증가함에 따라 지연 시간이 어떻게 변하는지 보여줍니다. 지연 시간은 리소스 경합으로 인해 마찰이 발생할 때까지 비교적 일정하게 유지됩니다. 이 곡선의 변곡점은 일반적으로 처리량 확장 그래프의 처리량 곡선이 평탄해지는 지점에 해당합니다.
지연 시간을 평가하는 또 다른 유용한 방법은 히스토그램을 사용하는 것입니다. 이 표현에서는 지연 시간을 버킷으로 그룹화하고 각 버킷에 속하는 요청 수를 계산합니다.

이 지연 시간 히스토그램은 대부분의 요청이 100밀리초 미만이고 지연 시간이 100밀리초 이상임을 보여줍니다. 지연 시간이 긴 요청의 원인을 이해하면 애플리케이션 성능 변동을 설명하는 데 도움이 됩니다. 지연 시간 증가의 롱테일 원인은 일반적인 지연 시간 확장 그래프에 표시된 지연 시간 증가와 처리량 그래프 평탄화에 해당합니다.
지연 시간 히스토그램은 애플리케이션에 여러 모달리티가 있는 경우에 가장 유용합니다. 모달리티는 일반적인 운영 조건의 집합입니다. 예를 들어 대부분의 경우 애플리케이션이 버퍼 캐시에 있는 페이지에 액세스합니다. 대부분의 경우 애플리케이션은 기존 행을 업데이트하지만 모드가 여러 개 있을 수 있습니다. 애플리케이션이 스토리지에서 페이지를 검색하거나 새 행을 삽입하거나 잠금 경합이 발생하는 경우도 있습니다.
시간이 경과함에 따라 애플리케이션에서 이러한 다양한 운영 모드가 발생하면 지연 시간 히스토그램에 이러한 여러 모달리티가 표시됩니다.

이 그림에서는 대부분의 요청이 100밀리초 미만으로 처리되지만 401~500밀리초가 걸리는 또 다른 요청 클러스터가 있는 일반적인 바이모달 히스토그램을 보여줍니다. 이 두 번째 모달리티의 원인을 이해하면 애플리케이션 성능을 향상시키는 데 도움이 될 수 있습니다. 모달리티가 3개 이상 있을 수도 있습니다.
두 번째 모달리티는 정상적인 데이터베이스 작업, 이기종 인프라 및 토폴로지 또는 애플리케이션 동작으로 인해 발생할 수 있습니다. 다음은 고려해야 하는 몇 가지 예시입니다.
- 대부분의 데이터 액세스는 PostgreSQL 버퍼 풀에서 수행되지만 일부는 스토리지에서 수행됩니다.
- 일부 클라이언트와 데이터베이스 서버 간 네트워크 지연 시간 차이
- 입력 또는 하루 중 특정 시간에 따라 다른 작업을 수행하는 애플리케이션 로직
- 간헐적 잠금 경합
- 클라이언트 활동 급증