pg_stat_statements로 쿼리 성능 모니터링하기

pg_stat_statements 모듈은 PostgreSQL에서 쿼리 실행 통계 정보를 수집하고 분석하는 모듈이다. 이 모듈을 활성화하면 쿼리의 실행 횟수, 실행 시간, 실행 계획 등의 정보를 수집할 수 있다. 이를 통해 쿼리 성능을 모니터링하고 성능이 저하되는 쿼리를 찾아 최적화할 수 있다. 수집하는 정보는 다음과 같다. 쿼리 실행 횟수 (calls) 총 실행 시간 (total_time): 평균수행시간 * 실행횟수, 단위: ms 평균 실행 시간 (mean_time) 평균 블록 시간 (mean_blk_time) 행 수 (rows) 평균 행 수 (mean_rows) 등 위 데이터로 가장 자주 실행된 쿼리, 가장 오래 실행된 쿼리, 가장 많은 시간을 소비한 쿼리 등을 찾을 수 있다. 이를 토대로 성능이 저하되는 쿼리를 찾아 성능 개선을 시도해볼 수 있다. ...

2023년 7월 13일 · 3 min

Django에서 DB Connection 관리

서비스를 운영하다보면 DB Connection 관리에 대한 이슈가 종종 발생한다. 이번 포스팅에서는 DB 커넥션 풀 (DB Connection Pool)과 Django에서는 DB 커넥션을 어떻게 관리하는지 알아보겠다. DB Connection Pool DB와 애플리케이션 사이에서 DB 연결을 간소화하기 위해서 DB와 미리 연결한 커넥션(Connection) 객체들을 풀(Pool)에 저장해두었다가 요청이 들어오면 풀에서 유휴 커넥션을 꺼내 사용하고 다시 풀에 저장하는 방식을 말한다. 애플리케이션과 DB의 TCP 연결을 위해서는 3-way-handshaking이 필요하다. 매 연결마다 이를 수행하면 비용이 커지므로 비용을 줄이기 위해 DB Connectio Pool 방식을 사용한다. ...

2022년 12월 11일 · 4 min

NoSQL

NoSQL이란 SQL이 아니라는 명칭에서 느껴지는 오해와 달리 Not-only SQL이라는 뜻으로 ‘SQL뿐만이 아니다’ 라는 뜻으로 Relational 방식과 달리 SQL만을 사용하지 않는 데이터베이스 시스템을 말한다.1 엄격한 2차원 매트릭스인 Relational Database 같은 정보 구조가 아닌 데이터(Key-Value, JSON, XML, Graph 등)를 처리하기 위하여 주로 사용한다. 분산 환경(Cluster)에서 실행할 목적으로 만들어진 경우가 많기 때문에 Relational 모델을 사용하지 않으며 대부분 오픈 소스이다. 21세기 이후에 개발된 시스템만을 NoSQL이라 칭하므로 유사한 목적과 구조를 갖지만 과거에 개발된 Data warehouse(OLAP)은 NoSQL에 해당하지 않는다. ...

2022년 2월 9일 · 6 min