내용으로 건너뛰기

Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL 호환 버전에서 LWLock:pg_stat_statements 대기 이벤트로 인해 발생하는 문제를 해결하려면 어떻게 해야 합니까?

3분 분량
0

Amazon Relational Database Service(Amazon RDS) for PostgreSQL 또는 Amazon Aurora PostgreSQL 호환 버전에서 LWLock:pg_stat_statements 대기 이벤트로 인한 성능 문제를 해결하고 싶습니다.

해결 방법

pg_stat_statements 모듈은 SQL 문에 대한 통계를 추적합니다. PostgreSQL 11 이상과 호환되는 PostgreSQL DB 인스턴스의 경우 pg_stat_statements 라이브러리가 기본적으로 로드됩니다. 자세한 내용은 PostgreSQL 웹 사이트의 pg_stat_statements를 참조하십시오.

추적된 고유 문의 수가 pg_stat_statements.max 값을 초과하면 PostgreSQL은 공유 메모리의 해시 테이블에서 실행 빈도가 가장 낮은 쿼리에 대한 통계 할당을 취소합니다. 할당 취소하면 새 항목을 위한 스페이스가 생성됩니다.

할당 취소 시 PostgreSQL은 해시 테이블에 LWLock을 사용하여 동시 액세스를 방지합니다. 이로 인해 동시 백엔드 프로세스가 차단될 수 있으며, Performance Insights에 대기 이벤트 LWLock:pg_stat_statements가 표시될 수 있습니다.

참고: 해시 테이블이 항목을 자주 할당하는 경우 워크로드의 전체 성능이 저하될 수 있습니다.

pg_stat_statements.max 모듈 늘리기

LWLock:pg_stat_statements 대기 이벤트를 줄이려면 파라미터 그룹에서 pg_stat_statements.max 값을 늘리십시오. 자세한 내용은 PostgreSQL 웹 사이트의 pg_stat_statements.max를 참조하십시오.

참고: pg_stat_statements.max 값을 늘리면 해시 테이블이 추가 공유 메모리를 사용하여 더 많은 SQL 문 정보를 저장합니다.

Amazon RDS for PostgreSQL의 경우 DB 파라미터 그룹에서 pg_stat_statements.max를 수정할 수 있습니다.

Aurora PostgreSQL 호환 버전의 경우 DB 클러스터 파라미터 그룹 또는 DB 파라미터 그룹에서 값을 수정할 수 있습니다.

파라미터 그룹에서 pg_stat_statements.max를 수정한 후 DB 인스턴스를 재부팅하여 변경 사항을 적용합니다. 재부팅하는 동안 잠시 중단이 발생할 수 있습니다. 자세한 내용은 DB 인스턴스 재부팅: 기본 단계Aurora 클러스터 내 DB 인스턴스 재부팅을 참조하십시오.

기본 DB 파라미터 그룹 또는 기본 DB 클러스터 파라미터 그룹의 파라미터는 수정할 수 없습니다. 기본 그룹의 파라미터를 수정하려면 사용자 지정 DB 파라미터 그룹 또는 사용자 지정 DB 클러스터 파라미터 그룹을 생성하십시오. 그런 다음 이를 DB 인스턴스 또는 DB 클러스터와 연결합니다.

참고: 긴 쿼리 텍스트를 별도의 디스크 파일에 저장할 수 있습니다. 쿼리 길이 또는 높은 pg_stat_statements.max 값으로 인해 파일이 너무 커지면 모든 쿼리 텍스트가 삭제될 수 있습니다. 그러면 pg_stat_statements.query 필드가 비어 있을 수 있습니다. 자세한 내용은 PostgreSQL 웹 사이트의 pg_stat_statements -- track statistics of SQL planning and execution을 참조하십시오.

pg_stat_statements 항목 줄이기

PostgreSQL 버전 17을 사용하여 pg_stat_statements 항목을 줄이는 것이 가장 좋습니다. 예를 들어 PostgreSQL 버전 17 이상을 사용하는 경우 상수 SAVEPOINT 이름을 자리 표시자로 대체할 수 있습니다. 예를 들어 이전 버전의 PostgreSQL에서는 SAVEPOINT sp1SAVEPOINT sp2를 서로 다른 두 개의 pg_stat_statements 항목으로 저장할 수 있습니다. 그러나 PostgreSQL 버전 17 이상에서는 이 두 문이 하나의 항목으로 저장됩니다(예: SAVEPOINT $1). 자세한 내용은 PostgreSQL 웹 사이트의 pg_stat_statements를 참조하십시오.

PostgreSQL 버전 17 이상으로 업그레이드할 수 없는 경우 애플리케이션, Object-Relational Mapper(ORM) 및 데이터베이스 드라이버가 SAVEPOINT 명령과 같은 SQL을 자동으로 실행하는지 확인하십시오. 이러한 자동 SAVEPOINT 명령은 pg_stat_statements 항목의 수를 증가시킬 수 있습니다.

할당 취소 발생 횟수 확인

PostgreSQL 버전 14 이상

할당 취소가 발생한 총 횟수를 확인하려면 pg_stat_statements_info 뷰의 dealloc 열을 검토하십시오. 이 정보를 사용하여 pg_stat_statements.max를 적절하게 조정할 수 있습니다. 자세한 내용은 PostgreSQL 웹 사이트의 pg_stat_statements_info 뷰를 참조하십시오.

특정 기간 동안의 할당 취소 횟수를 확인하려면 pg_stat_statements_info 뷰를 정기적으로 선택한 다음 pg_stat_statements_info.dealloc과의 차이를 계산하십시오.

pg_stat_statements_info 뷰를 선택하면 "ERROR: relation 'pg_stat_statements_info' does not exist" 오류 메시지가 나타날 수 있습니다. 이 오류는 pg_stat_statements가 메모리에만 로드되고 데이터베이스에는 설치되지 않을 때 발생합니다. 이 오류를 해결하려면 애플리케이션이 연결되는 데이터베이스에 pg_stat_statements 확장을 설치하십시오. 데이터베이스에 연결한 후 다음 SQL 문을 실행하여 데이터베이스에 pg_stat_statements를 설치합니다.

CREATE EXTENSION pg_stat_statements;

자세한 내용은 PostgreSQL 웹 사이트의 CREATE EXTENSION을 참조하십시오.