geqo_threshold
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | 12 | user | integer |
| 15 | 12 | user | integer |
| 16 | 12 | user | integer |
| 17 | 12 | user | integer |
| 18 | 12 | user | integer |
| 19 | 12 | user | integer |
FROM 항목이 이 개수 이상인 쿼리에 genetic query optimization을 적용한다. 기본값은 12이다.
PostgreSQL은 FROM 항목이 많은 쿼리에서 가능한 join 순서를 전부 따져보는 대신 genetic query optimizer(GEQO)를 사용한다. GEQO는 유전 알고리즘으로 join 순서 탐색 공간을 확률적으로 탐색해, 최적 plan 보장을 포기하는 대신 planning 시간을 억제한다. 이 파라미터는 그 전환점을 정한다. FULL OUTER JOIN 구문은 FROM 항목 하나로 계산한다.
단순한 쿼리는 일반적인 exhaustive 탐색 planner가 최적 plan을 찾으므로 그쪽이 낫고, 테이블이 많은 쿼리는 exhaustive 탐색 자체가 너무 오래 걸려 — 비최적 plan을 실행하는 손해보다 클 정도로 — GEQO가 낫다. 쿼리 크기에 대한 임계값은 이 둘을 구분하는 간편한 기준이다. from_collapse_limit나 join_collapse_limit을 이 값 이상으로 올리면 병합된 쿼리가 GEQO로 넘어갈 수 있다는 점도 함께 기억해 둔다.
운영 노트: join이 12개를 넘는 쿼리의 plan이 실행할 때마다 미묘하게 흔들리거나 품질이 아쉽다면 GEQO 구간에 들어간 것일 수 있다. planning 시간을 감수할 수 있는 세션에서는
geqo_threshold를 올려 exhaustive 탐색을 강제하고 plan을 비교해 본다.출처: PostgreSQL 18 문서