Postgres보다 81% 빠른 쿼리 실행 계획을 생성하도록 4B 모델 훈련하기

1 day ago 7

4B 모델에 지도 미세조정과 강화학습을 적용해 조인이 많은 JOB 쿼리 113개에서 기하평균 1.81배 가속과 총 실행 시간 44.7% 감소를 달성함. 쿼리당 세 번 탐색하며 생성한 최대 15개 후보 중 실행 피드백이 가장 좋은 계획을 고른 결과임 모델은 Postgres를 대체하는 대신 pg_hint_plan 힌트로 조인 순서와 스캔 방식 등을 바꾸고, 실제 실행 시간을 비교하며 더 빠른 계획을 탐색함 목표는 일회성 쿼리의 최적화 속도를 겨루는 것이 아니라 반복 실행되는 분석 쿼리를 개선하는 것임. 특정 데이터베이스를 잘 학습하고, 사전 탐색 비용을 이후 반복 실행에 걸쳐 상쇄하는 방식임 측정 잡음과 보상 설계가 학습의 핵심 과제였음. Postgres 캐시를 늘려 가짜 성능 차이를 줄이고, 기본 계획보다 나쁜 결과가 상대평가만으로 강화되지 않도록 GRPO를 수정함 초기에는 유효한 후보 계획을 만든 쿼리가 113개 중 14개뿐이었으나, 대형 모델 실행 궤적 증류와 강화학습으로 성능이 개선됨. 다른 데이터베이스로의 일반화는 실험 목표가 아니었음 쿼리 최적화가 어려운 이유와 실험의 목표 2015년 연구와 10년 뒤 후속 연구에서도 쿼리 최적화에는 상당한 개선 여지가 남아 있었음. 특히 조인 순서 결정은 NP-hard 문제임 IMDb의 title 약 100만 행, movie_companies 약 200만 행, company_name 약 10만 행을 조인하는 예에서는 필터 적용 순서만으로 후속 조인에 넘기는 행 수가 크게 달라짐 필터가 없으면 두 조인 순서 모두 첫 조인 결과가 200만 행임 일본 회사 비중을 5%, 2000년대 작품 비중을 20%로 가정하면, 회사부터 필터링할 때 중간 결과는 약 10만 행이고 작품부터 필터링하면 약 40만 행임 균등 분포를 가정할 때 최종 결과는 약 2만 행으로 같지만, 두 번째 순서는 다음 조인에 4배 많은 행을 전달함 실행 계획은 조인 순서뿐 아니라 조인 알고리듬과 스캔 방식도 선택해야 함 조인에는 해시 조인, 병합 조인, 중첩 루프 조인이 있고, 입력의 안쪽/바깥쪽 배치도 성능에 영향을 줌 순차 스캔, 인덱스 스캔, 인덱스 전용 스캔, 비트맵 스캔까지 고려하면 위의 세 테이블 쿼리에도 4,608가지 조합이 생김 병렬 실행이나 집계 방식까지 넣으면 더 많아지지만, Postgres는 동적 계획법과 12개 이상 조인에서 사용하는 유전 알고리듬으로 탐색 공간을 줄임 Postgres는 모...

Read Entire Article