본문으로 건너뛰기

max_stack_depth

버전기본값context타입
14superuserinteger
15superuserinteger
16superuserinteger
17superuserinteger
18superuserinteger
19superuserinteger

서버 실행 스택의 안전한 최대 깊이를 지정한다. 단위 없이 값을 주면 킬로바이트로 해석하며, 기본값은 보수적으로 잡은 2MB다. superuser와 적절한 SET 권한을 가진 사용자만 바꿀 수 있다.

이상적인 값은 커널이 강제하는 실제 스택 한도(ulimit -s 또는 그에 준하는 값)에서 1MB 정도의 안전 여유를 뺀 크기다. 여유가 필요한 이유는 서버가 모든 routine에서 스택 깊이를 검사하는 것이 아니라 재귀 가능성이 있는 핵심 routine에서만 검사하기 때문이다. 기본값 2MB는 서버가 죽을 위험은 거의 없지만, 재귀가 깊은 복잡한 함수를 실행하기에는 부족할 수 있다.

max_stack_depth를 커널 한도보다 높게 잡으면 폭주하는 재귀 함수가 개별 서버 프로세스를 죽일 수 있다. 커널 한도를 알아낼 수 있는 플랫폼에서는 서버가 안전하지 않은 값으로의 설정을 막아주지만, 모든 플랫폼이 그 정보를 제공하는 것은 아니므로 값을 정할 때 주의가 필요하다.

운영 노트: “stack depth limit exceeded” 오류가 나면 먼저 쿼리나 함수의 재귀가 정상인지 의심하고, 정당한 깊은 재귀라면 OS의 ulimit -s를 확인한 뒤 그보다 1MB 이상 여유를 두고 올린다. OS 한도 확인 없이 이 값만 올리는 것은 위험하다.

출처: PostgreSQL 18 문서