풀링으로 Aurora PostgreSQL 연결 이탈 관리
클라이언트 애플리케이션이 너무 자주 연결 및 연결 해제되어 Aurora PostgreSQL DB 클러스터 응답 시간이 느려지면 클러스터에 연결 이탈이 발생한다고 합니다. Aurora PostgreSQL DB 클러스터 엔드포인트에 대한 각각의 새로운 연결은 리소스를 소비하므로 실제 워크로드를 처리하는 데 사용할 수 있는 리소스가 줄어듭니다. 연결 이탈은 다음에 설명하는 모범 사례 중 일부를 따라 관리하는 것이 좋습니다.
우선 연결 이탈률이 높은 Aurora PostgreSQL DB 클러스터에서 응답 시간을 개선할 수 있습니다. 이렇게 하려면 RDS 프록시와 같은 연결 풀을 사용할 수 있습니다. 연결 풀러는 클라이언트에 사용할 수 있는 연결 캐시를 제공합니다. Aurora PostgreSQL에서는 거의 모든 버전이 RDS 프록시를 지원합니다. 자세한 내용은 Aurora PostgreSQL과 Amazon RDS 프록시 단원을 참조하십시오.
특정 버전의 Aurora PostgreSQL에서 RDS 프록시를 지원하지 않는 경우 PGBouncer와 같은 다른 PostgreSQL 호환 연결 풀러를 사용할 수 있습니다. 자세히 알아보려면 PgBouncer
Aurora PostgreSQL DB 클러스터가 연결 풀링의 이점을 누릴 수 있는지 알아보려면 postgresql.log
파일에서 연결 및 연결 해제를 확인하면 됩니다. 또한 성능 개선 도우미를 사용하여 Aurora PostgreSQL DB 클러스터에서 발생하는 연결 이탈의 정도를 확인할 수 있습니다. 아래에서 두 주제에 대한 정보를 확인할 수 있습니다.
로깅 연결 및 연결 해제
PostgreSQL log_connections
및 log_disconnections
파라미터는 Aurora PostgreSQL DB 클러스터의 라이터 인스턴스에 대한 연결 및 연결 해제를 캡처할 수 있습니다. 기본적으로 이 파라미터는 해제되어 있습니다. 이러한 파라미터를 설정하려면 사용자 지정 파라미터 그룹을 사용하고 값을 1로 변경하여 설정합니다. 사용자 지정 파라미터 그룹에 대한 자세한 내용은 Amazon Aurora DB 클러스터의 DB 클러스터 파라미터 그룹 단원을 참조하세요. 설정을 확인하려면 psql을 사용하여 Aurora PostgreSQL용 DB 클러스터 엔드포인트에 연결하고 다음과 같이 쿼리합니다.
labdb=>
SELECT setting FROM pg_settings WHERE name = 'log_connections';setting --------- on (1 row)
labdb=>
SELECT setting FROM pg_settings WHERE name = 'log_disconnections';setting --------- on (1 row)
이 두 파라미터가 모두 설정되어 있으면 로그가 모든 새 연결 및 연결 해제를 캡처합니다. 인증된 각 연결의 사용자 및 데이터베이스를 볼 수 있습니다. 연결이 끊기면 다음 예와 같이 세션 기간도 기록됩니다.
2022-03-07 21:44:53.978 UTC [16641] LOG: connection authorized: user=labtek database=labdb application_name=psql
2022-03-07 21:44:55.718 UTC [16641] LOG: disconnection: session time: 0:00:01.740 user=labtek database=labdb host=[local]
애플리케이션의 연결 이탈을 확인하기 위해 해당 파라미터가 아직 설정되어 있지 않다면 설정하세요. 그런 다음 실제 워크로드 및 기간으로 애플리케이션을 실행하여 분석을 위해 PostgreSQL 로그에 데이터를 수집합니다. RDS 콘솔에서 로그 파일을 볼 수 있습니다. Aurora PostgreSQL DB 클러스터의 라이터 인스턴스를 선택한 다음 Logs & events(로그 및 이벤트) 탭을 선택합니다. 자세한 내용은 데이터베이스 로그 파일 보기 및 나열 단원을 참조하십시오.
또는 콘솔에서 로그 파일을 다운로드하고 다음 명령 순서를 사용할 수 있습니다. 이 시퀀스는 분당 인증되거나 삭제된 총 연결 수를 찾습니다.
grep "connection authorized\|disconnection: session time:" postgresql.log.2022-03-21-16|\ awk {'print $1,$2}' |\ sort |\ uniq -c |\ sort -n -k1
예제 출력에서는 인증된 연결이 급증한 후 16:12:10 부터 연결이 끊기는 것을 볼 수 있습니다.
.....
,......
.........
5 2022-03-21 16:11:55 connection authorized:
9 2022-03-21 16:11:55 disconnection: session
5 2022-03-21 16:11:56 connection authorized:
5 2022-03-21 16:11:57 connection authorized:
5 2022-03-21 16:11:57 disconnection: session
32 2022-03-21 16:12:10 connection authorized:
30 2022-03-21 16:12:10 disconnection: session
31 2022-03-21 16:12:11 connection authorized:
27 2022-03-21 16:12:11 disconnection: session
27 2022-03-21 16:12:12 connection authorized:
27 2022-03-21 16:12:12 disconnection: session
41 2022-03-21 16:12:13 connection authorized:
47 2022-03-21 16:12:13 disconnection: session
46 2022-03-21 16:12:14 connection authorized:
41 2022-03-21 16:12:14 disconnection: session
24 2022-03-21 16:12:15 connection authorized:
29 2022-03-21 16:12:15 disconnection: session
28 2022-03-21 16:12:16 connection authorized:
24 2022-03-21 16:12:16 disconnection: session
40 2022-03-21 16:12:17 connection authorized:
42 2022-03-21 16:12:17 disconnection: session
40 2022-03-21 16:12:18 connection authorized:
40 2022-03-21 16:12:18 disconnection: session
.....
,......
.........
1 2022-03-21 16:14:10 connection authorized:
1 2022-03-21 16:14:10 disconnection: session
1 2022-03-21 16:15:00 connection authorized:
1 2022-03-21 16:16:00 connection authorized:
이 정보를 바탕으로 워크로드가 연결 풀러의 이점을 누릴 수 있는지 여부를 결정할 수 있습니다. 자세한 분석을 위해 성능 개선 도우미를 사용할 수 있습니다.
성능 개선 도우미로 연결 이탈 감지
성능 개선 도우미를 사용하여 Aurora PostgreSQL 호환 에디션 DB 클러스터의 연결 변동 정도를 평가할 수 있습니다. Aurora PostgreSQL DB 클러스터를 생성하면 성능 개선 도우미에 대한 설정이 기본적으로 켜져 있습니다. DB 클러스터를 생성할 때 이 선택을 취소했다면 클러스터를 수정하여 기능을 켜세요. 자세한 내용은 Amazon Aurora DB 클러스터 수정 단원을 참조하십시오.
Aurora PostgreSQL DB 클러스터에서 성능 개선 도우미를 실행하면 모니터링할 지표를 선택할 수 있습니다. 콘솔의 탐색 창에서 성능 개선 도우미에 액세스할 수 있습니다. 다음 이미지와 같이 Aurora PostgreSQL DB 클러스터에 대한 라이터 인스턴스의 Monitoring(모니터링) 탭에서 성능 개선 도우미에 액세스할 수도 있습니다.
성능 개선 도우미 콘솔에서 Manage metrics(지표 관리)를 선택합니다. Aurora PostgreSQL DB 클러스터의 연결 및 연결 해제 활동을 분석하려면 다음 지표를 선택하세요. 다음은 모두 PostgreSQL의 지표입니다.
xact_commit
- 커밋된 트랜잭션의 수입니다.total_auth_attempts
- 분당 인증된 사용자 연결 시도 횟수입니다.numbackends
- 현재 데이터베이스에 연결된 백엔드 수입니다.
설정을 저장하고 연결 활동을 표시하려 면그래프 업데이트를 선택합니다.
다음 이미지에서 100명의 사용자와 함께 pgbench를 실행할 때의 영향을 확인할 수 있습니다. 연결을 나타내는 선은 일정한 상향 경사면에 있습니다. pgbench 및 사용 방법에 대한 자세한 내용은 PostgreSQL 설명서의 pgbench
이 이미지는 연결 풀러 없이 100명 정도의 사용자로 워크로드를 실행하면 워크로드 처리 기간 동안 total_auth_attempts
수가 크게 증가할 수 있음을 보여줍니다.
RDS 프록시 연결 풀링을 사용하면 워크로드가 시작될 때 연결 시도 횟수가 늘어납니다. 연결 풀을 설정한 후에는 평균이 감소합니다. 트랜잭션과 백엔드 사용에 사용되는 리소스는 워크로드 처리 전반에 걸쳐 일관되게 유지됩니다.
Aurora PostgreSQL DB 클러스터에서 성능 개선 도우미를 사용하는 방법에 대한 자세한 내용은 성능 개선 도우미를 통한 Amazon Aurora 모니터링 단원을 참조하세요. 지표를 분석하려면 성능 개선 도우미 대시보드를 사용한 지표 분석 단원을 참조하세요.
연결 풀링의 이점 시연
앞서 설명한 것처럼 Aurora PostgreSQL DB 클러스터에 연결 이탈 문제가 있다고 판단되면 RDS 프록시를 사용하여 성능을 개선할 수 있습니다. 다음에서는 연결이 풀링된 경우와 연결되지 않은 경우의 워크로드 처리 차이점을 보여주는 예를 확인할 수 있습니다. 이 예에서는 pgbench를 사용하여 트랜잭션 워크로드를 모델링합니다.
psql과 마찬가지로 pgbench는 로컬 클라이언트 컴퓨터에서 설치하고 실행할 수 있는 PostgreSQL 클라이언트 애플리케이션입니다. Aurora PostgreSQL DB 클러스터를 관리하는 데 사용하는 Amazon EC2 인스턴스에서 설치하고 실행할 수도 있습니다. 자세한 내용은 PostgreSQL 설명서의 pgbench
이 예를 단계별로 진행하려면 먼저 데이터베이스에 pgbench 환경을 만들어야 합니다. 다음 명령은 지정된 데이터베이스에서 pgbench 테이블을 초기화하기 위한 기본 템플릿입니다. 이 예에서는 로그인에 기본 주 사용자 계정인 postgres
를 사용합니다. Aurora PostgreSQL DB 클러스터에서 필요에 따라 변경합니다. 클러스터의 라이터 인스턴스에 있는 데이터베이스에 pgbench 환경을 생성합니다.
참고
pgbench 초기화 프로세스는 pgbench_accounts
,pgbench_branches
,pgbench_history
, 및 pgbench_tellers
라는 테이블을 삭제하고 다시 만듭니다. pgbench를 초기화할 때
에 대해 선택한 데이터베이스가 이러한 이름을 사용하지 않는지 확인합니다.dbname
pgbench -U postgres -h
db-cluster-instance-1.111122223333
.aws-region
.rds.amazonaws.com -p 5432 -d -i -s 50dbname
pgbench의 경우 다음 파라미터를 지정합니다.
- -d
-
pgbench 실행 시 디버깅 보고서를 출력합니다.
- -h
-
Aurora PostgreSQL DB 클러스터의 라이터 인스턴스의 엔드포인트를 지정합니다.
- -i
-
벤치마크 테스트를 위해 데이터베이스에서 pgbench 환경을 초기화합니다.
- -p
-
데이터베이스 연결에 사용되는 포트를 식별합니다. Aurora PostgreSQL 기본값은 일반적으로 5432 또는 5433입니다.
- -s
-
테이블을 행으로 채우는 데 사용할 배율 인수를 지정합니다. 기본 배율 인수는 1이며,
pgbench_branches
테이블에 1개 행,pgbench_tellers
테이블에 10개 행,pgbench_accounts
테이블에 100000개 행을 생성합니다. - -U
-
Aurora PostgreSQL DB 클러스터의 라이터 인스턴스에 대한 사용자 계정을 지정합니다.
pgbench 환경이 설정되면 연결 풀링을 사용하거나 사용하지 않고 벤치마킹 테스트를 실행할 수 있습니다. 기본 테스트는 지정된 시간 동안 반복적으로 실행되는 트랜잭션당 5개의 SELECT, UPDATE 및 INSERT 명령 시리즈로 구성됩니다. 배율 인수, 클라이언트 수 및 기타 세부 정보를 지정하여 고유한 사용 사례를 모델링할 수 있습니다.
예를 들어 다음 명령은 20개의 동시 연결(-c 옵션)로 60초(-T 옵션, 시간을 나타냄) 동안 벤치마크를 실행합니다. -C 옵션은 클라이언트 세션당 한 번이 아니라 매번 새로운 연결을 사용하여 테스트를 실행합니다. 이 설정은 연결 오버헤드를 나타냅니다.
pgbench -h docs-lab-apg-133-test-instance-1.c3zr2auzukpa.us-west-1.rds.amazonaws.com -U postgres -p 5432 -T 60 -c 20 -C labdb
Password:
**********
pgbench (14.3, server 13.3) starting vacuum...end. transaction type: <builtin: TPC-B (sort of)> scaling factor: 50 query mode: simple number of clients: 20 number of threads: 1 duration: 60 s number of transactions actually processed: 495 latency average = 2430.798 ms average connection time = 120.330 ms tps = 8.227750 (including reconnection times)
연결을 재사용하지 않고 Aurora PostgreSQL DB 클러스터의 라이터 인스턴스에서 pgbench를 실행하면 초당 약 8개의 트랜잭션만 처리됨을 알 수 있습니다. 이는 1분 테스트 동안 총 495건의 트랜잭션을 제공합니다.
연결을 재사용하면 사용자 수에 대한 Aurora PostgreSQL DB 클러스터의 응답이 거의 20배 빨라집니다. 재사용을 통해 동일한 시간 및 동일한 수의 사용자 연결에 대해 495개에 비해 총 9,042개의 트랜잭션이 처리됩니다. 차이점은 다음에서는 각 연결이 재사용된다는 것입니다.
pgbench -h docs-lab-apg-133-test-instance-1.c3zr2auzukpa.us-west-1.rds.amazonaws.com -U postgres -p 5432 -T 60 -c 20 labdb
Password:
*********
pgbench (14.3, server 13.3) starting vacuum...end. transaction type: <builtin: TPC-B (sort of)> scaling factor: 50 query mode: simple number of clients: 20 number of threads: 1 duration: 60 s number of transactions actually processed: 9042 latency average = 127.880 ms initial connection time = 2311.188 ms tps = 156.396765 (without initial connection time)
이 예에서는 연결 풀링이 응답 시간을 크게 개선할 수 있음을 보여줍니다. Aurora PostgreSQL DB 클러스터용 RDS 프록시 설정에 대한 자세한 내용은 Aurora용 Amazon RDS 프록시 사용 단원을 참조하세요.