PostgreSQL 14 베타 써봤다. 릴리즈 노트 중 개인적으로 기대했던 B-tree 개선 체감 결과 메모.
무슨 개선인가
B-tree의 중복 키 처리 효율화. 13까지는 같은 key 값에 대해 heap ctid까지 섞어서 저장하는 식이었는데, 14에서 "bottom-up index deletion"이 들어감. 업데이트가 자주 일어나는 테이블에서 인덱스 비대화(bloat) 속도가 많이 줄어든다.
테스트 시나리오
주문 테이블 유사본. status 컬럼 자주 업데이트(pending → paid → shipped 등), 이 컬럼에 B-tree index. 100만 행 기준 24시간 부하 돌림.
-- 인덱스 사이즈 변화
SELECT pg_size_pretty(pg_relation_size('orders_status_idx'));
결과:
| 버전 | 시작 | 24h 후 |
|---|---|---|
| PG 13.3 | 42 MB | 186 MB |
| PG 14b1 | 42 MB | 78 MB |
즉 vacuum 주기가 같을 때 블로팅 폭이 눈에 띄게 줄었다. 이건 꽤 큰 변화다. 다음으로 vacuum 빈도 낮추고도 공간 회수 잘 되는지 볼 예정.
다른 14 변화
- 파이프라인 모드(extended protocol 기반) — libpq 수준에서 여러 쿼리 한 번에 보내고 응답을 나중에 받을 수 있음. 배치 INSERT 쓸 때 유리.
- VACUUM이 emergency 모드로 autovacuum 실패 시 aggressive하게 동작
- LZ4 column compression — TOAST 쪽. 압축률은 조금 떨어져도 해제 속도가 빠름.
정식 GA는 가을쯤 될 듯. 지금은 스테이지에서만 돌리는 중.