본문으로 건너뛰기
subtransaction_buffers

subtransaction_buffers

버전기본값context타입
170postmaster (재시작)integer
180postmaster (재시작)integer
190postmaster (재시작)integer

pg_subtrans의 내용을 캐시하는 데 쓸 shared memory 양을 지정한다. 단위 없이 값을 주면 블록 수(BLCKSZ, 보통 8kB)로 해석한다. 기본값은 0으로, 이 경우 shared_buffers/512 크기를 최대 1024블록, 최소 16블록 범위에서 자동으로 잡는다. 서버 시작 시에만 설정할 수 있다.

pg_subtrans는 subtransaction과 부모 트랜잭션의 관계를 기록하는 SLRU 영역이다. SAVEPOINT나 PL/pgSQL의 EXCEPTION 블록을 쓰면 subtransaction이 만들어지는데, 세션당 subtransaction이 64개(캐시 한도)를 넘어가면 가시성 판정 때 pg_subtrans 조회가 필요해진다. 이 파라미터는 그 조회가 디스크까지 내려가지 않도록 하는 캐시의 크기다. PostgreSQL 17부터 SLRU 캐시 크기를 이런 개별 파라미터로 조정할 수 있게 됐다.

운영 노트: SAVEPOINT를 남발하는 애플리케이션이나 EXCEPTION 블록이 많은 함수가 긴 트랜잭션과 겹치면 pg_subtrans 경합으로 성능이 급락하는 사례가 알려져 있다. pg_stat_slru 뷰의 subtransaction 항목에서 캐시 미스를 확인하고, 근본적으로는 subtransaction 사용 자체를 줄이는 쪽이 정석이다.

출처: PostgreSQL 18 문서