cursor_tuple_fraction
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | 0 | user | string |
| 15 | 0 | user | string |
| 16 | 0 | user | string |
| 17 | 0 | user | string |
| 18 | 0 | user | string |
| 19 | 0 | user | string |
cursor로 선언된 쿼리에서 전체 결과 중 실제로 어느 비율의 row가 fetch될지를 planner가 어떻게 가정할지 정한다. 기본값은 0.1, 즉 10%다.
일반 쿼리는 전체 실행 시간이 가장 짧은 plan을 고르지만, cursor는 결과 일부만 읽고 닫히는 경우가 많다. planner는 cursor 쿼리에 대해 이 비율만큼만 읽힌다고 가정하고 plan을 고른다. 값이 작을수록 첫 row를 빨리 내놓는 fast-start plan(예: 정렬 대신 index scan으로 순서를 얻는 plan)을 선호하고, 값이 클수록 총 실행 시간을 중시한다. 최대값인 1.0으로 두면 cursor도 일반 쿼리와 완전히 같은 방식으로 계획된다.
운영 노트: 애플리케이션이 cursor로 결과를 끝까지 읽는 패턴이라면(드라이버가 내부적으로 cursor를 쓰는 경우 포함) 1.0에 가깝게 올리는 편이 낫다. 반대로 첫 화면 분량만 읽고 닫는 페이징성 cursor가 많다면 기본값이나 그보다 낮은 값이 맞다. cursor 쿼리만 유독 이상한 plan을 타는 문제의 단골 원인이므로 진단 시 먼저 의심해 볼 파라미터다.
출처: PostgreSQL 18 문서