20210607

PostgreSQL 14 B-tree 개선 체감

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.342 MB186 MB
PG 14b142 MB78 MB

즉 vacuum 주기가 같을 때 블로팅 폭이 눈에 띄게 줄었다. 이건 꽤 큰 변화다. 다음으로 vacuum 빈도 낮추고도 공간 회수 잘 되는지 볼 예정.

다른 14 변화

  • 파이프라인 모드(extended protocol 기반) — libpq 수준에서 여러 쿼리 한 번에 보내고 응답을 나중에 받을 수 있음. 배치 INSERT 쓸 때 유리.
  • VACUUM이 emergency 모드로 autovacuum 실패 시 aggressive하게 동작
  • LZ4 column compression — TOAST 쪽. 압축률은 조금 떨어져도 해제 속도가 빠름.

정식 GA는 가을쯤 될 듯. 지금은 스테이지에서만 돌리는 중.