본문 바로가기

OSS on Azure/Database

[락플레이스] Azure Database for PostgreSQL 성능 최적화 팁

*글 최초 발행일자: 2017.12.27*

 

매니지드 서비스를 써도 기본적인 성능 관련 트러블슈팅에 대한 지식은 필요합니다. 그래서 Azure Database for PostgreSQL 성능 이슈가 생겼을 때 점검해 봐야 할 포인트를 간략히 소개합니다. 

Azure Database for PostgreSQL는 서버와 스토리지 그리고 네트워크 인프라 관리와 데이터 가용성 보장 및 데이터 보호 그리고 확장까지 모두 마이크로소프트가 관리해주는 매니지드 서비스입니다. 그렇다면 매니지드 서비스 이용자는 성능 이슈에 신경 쓸 필요가 없을까요? 아닙니다. 데이터베이스 및 연결된 서버와 클라이언트는 자원 경쟁 관련 성능 이슈를 일으킬 수 있습니다. 이런 경우 원인을 파악해 적절하게 자원을 늘리거나 조정하는 쪽으로 클라우드 서비스 구독을 조정해야 늘 최상의 쿼리 성능을 유지할 수 있습니다. 

 

Azure Database for PostgreSQL을 이용해 클라이언트/서버 구조와 클리어인트/애플리케이션 서버/데이터베이스로 구성하는 경우를 가정해 성능 이슈 관련해 점검 포인트를 소개합니다. 다음 그림에서 각 번호에 따라 트러블슈팅 포인트가 다른데, 간단히 살펴보겠습니다. 

 

 

1번) 클라이언트 측면에서 CPU, 메모리, 디스크 관련 자원 경쟁이 일어날 때 성능 문제가 나타날 수 있습니다. 어던 자원이 문제인지는 태스크 관리자, 애저 포탈, CLI 콘솔 화면을 통해 확인할 수 있습니다. 단, 클라이언트가 애저에 있어야 합니다. 


 

2번) 애플리케이션 서버 환경에서 CPU, 메모리, 디스크 관련 자원 경쟁이 일어날 때 성능 저하가 일어날 수 있습니다. 이 역시 태스크 관리자, 애저 포탈, CLI 화면에서 확인할 수 있습니다. 애플리케이션 서버를 애저에 올려 운영한다면 애저 메트릭(Azure Metric)을 통해 자원 경쟁으로 인한 성능 저하 여부를 판단할 수 있습니다. 

3번) Azure Database for PostgreSQL의 자원 경쟁도 성능 병목의 원인이 될 수 있습니다. 이 부분은 애저 메트릭을 통해 원인이 CPU인지, 메모리인지, 스토리지인지 파악할 수 있습니다. 더 자세한 내용은 Azure Database for PostgreSQL 모니터링 문서에서 볼 수 있습니다. 

 

 

 

4) 네트워크 지연(latency) 문제도 빈번히 발생하는 성능 저하 원인이죠. 클라이언트나 애플리케이션 서버와 데이터베이스 인스턴스 간 네트워크 지연이 발행하면 속도가 느려지죠. 이는 다음과 같이 간단한 쿼리로 지연 여부를 확인할 수 있습니다. 쿼리 처리 속도가 느린 경우 애저에서 호스팅 되는 원격 클라이언트와 데이터베이스 인스턴스를 같은 리전과 리소스 그룹으로 묶으면 쿼리 속도가 빨라집니다. 

 

\timing
SELECT;

\watch 1

 

데이터베이스 성능을 늘 최적의 상태로 유지하려면 앞서 소개한 주요 원인을 주의 깊게 봐야 합니다. 이와 함께 할 일은 쿼리 실행 통계 정보를 보여주는 pg_stat_statments 모듈을 통해 실행 시간이 긴 쿼리가 무엇인지 살펴보는 것입니다. 다음과 같이 Azure Database for PostgreSQL에서 실행 시간이 가장 긴 쿼리를 찾아볼 수 있습니다. 

 

SELECT query, calls, total_time, rows, 100.0 * shared_blks_hit/ 
nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements
ORDER BY total_time

DESC LIMIT 5

 

참고로 성능 벤치마킹을 할 때만 쿼리 관련 통계를 잡도록 하는 것을 마이크로소프트는 추천하는데요, 다음과 같이 하면 됩니다. 

 

SELECT pg_stat_statements_reset()

 

다음 팁은 자원 경쟁이 일어날 때 무엇을 어떻게 늘릴지에 대한 것입니다. 만약 Azure Database for PostgreSQL 인스턴스의 CPU 사용률이 100%를 지속한다면 비즈니스 시간을 늘리면 됩니다. 가령 스탠다드(Standard) 100 조건일 때 CPU 사용률이 100%를 지속하면, 스탠다드 200으로 늘립니다. 

 

스토리지 부족으로 인한 성능 저하도 자주 발생합니다. Azure Database for PostgreSQL의 경우 기본 스토리지 용량은 125GB입니다. 이 용량은 IOPs가 375로 제한됩니다. 더 높은 IOPs를 요구하는 애플리케이션을 운영한다면 스토리지 용량을 키워 IOPs를 높일 수 있습니다.

 

IO 대기(wait) 현상이 보여도 IO 쓰루풋을 늘리기 위해 스토리지 용량을 키우는 것을 추천합니다. 가령 WANWriteLock이 관찰되면 스토리지 용량을 키우면 대기 이벤트를 줄일 수 있습니다. 참고로 WANWriteLock의 대기 수는 다음 쿼리로 확인할 수 있습니다. 

 

select wait_event, wait_event_type, count(*) as counts
from pg_stat_activity

group by wait_event, wait_event_type;

 

애플리케이션 서버를 올린 가상 머신의 CPU와 메모리 자원 경쟁이 심할 경우는 가상 머신 크기의 컴퓨트와 메모리 크기를 늘리면 됩니다. 애플리케이션 서버를 운영하는 가상 머신에서 IO 관련 병목 현상이 보이면 디스크 용량을 늘리면 됩니다

 

정리하자면 매니지드 서비스도 성능 이슈가 생길 수 있고, 이를 방지하기 위해 사용자는 성능 이슈의 원인을 파악할 수 있어야 하고, 원인별 맞춤형 자원 증설을 통해 문제를 해결할 수 있습니다. Azure Database for PostgreSQL 성능 최적화 관련 문의는 락플레이스로 부탁드립니다. 참고로 본 포스팅은 애저 블로그를 참조해 작성한 것입니다. 

 

*이 외에도 락플레이스의(2021~) 최신 뉴스레터 소식을 받아보고 싶으시다면? *

락플레이스 뉴스레터 구독하기 click

 

 

*락플레이스 1:1 문의 바로가기*

 1:1 문의 바로가기 click

 

 락플레이스는 2005년에 출범하여 대한민국 리눅스의 역사와 성장을 함께 해온 오픈소스 전문 기업으로 국내 최다 엔지니어, 국내 최고 기술력, 국내외 유수기업 컨설팅의 풍부한 경험과 탄탄한 기술력으로 고객의 성공적인 오픈소스 플랫폼 구축과 응용 프로그램 전체 범위의 서비스를 제공하고 있습니다. 락플레이스는 레드햇코리아로부터 Elite Business Associate/Advanced Business Parter/채널 어워드 한국  파트너/FY15 champion 등을 수상 파트너며, Microsoft Microsoft Cloud Solution Partner(CSP)로서 함께하고 있습니다