subtransaction_buffers
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 17 | 0 | postmaster (재시작) | integer |
| 18 | 0 | postmaster (재시작) | integer |
| 19 | 0 | postmaster (재시작) | 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 문서