[논문 리뷰] Bao: Learning to Steer Query Optimizers
Bao는 강화학습 기반 시스템으로, 기존 쿼리 최적화기의 성능을 향상시키기 위해 조잡한 힌트(예: 특정 조인 연산자 비활성화)를 학습하여 제공한다. 구조적 특징을 추출하기 위해 트리 컨volution 신경망과 톰슨 샘플링을 융합한 문맥 기반 다중 손잡이 슬롯머신 프레임워크를 사용함으로써, Bao는 약 1시간 이내에 신속한 학습을 달성하고 중앙값 및 꼬리 지연 시간을 감소시키며, 워크로드, 데이터, 스키마 변화에 대비해 성능을 유지한다. 이는 오픈소스 및 상용 최적화기보다 뛰어난 성능을 발휘한다.
Query optimization remains one of the most challenging problems in data management systems. Recent efforts to apply machine learning techniques to query optimization challenges have been promising, but have shown few practical gains due to substantive training overhead, inability to adapt to changes, and poor tail performance. Motivated by these difficulties and drawing upon a long history of research in multi-armed bandits, we introduce Bao (the BAndit Optimizer). Bao takes advantage of the wisdom built into existing query optimizers by providing per-query optimization hints. Bao combines modern tree convolutional neural networks with Thompson sampling, a decades-old and well-studied reinforcement learning algorithm. As a result, Bao automatically learns from its mistakes and adapts to changes in query workloads, data, and schema. Experimentally, we demonstrate that Bao can quickly (an order of magnitude faster than previous approaches) learn strategies that improve end-to-end query execution performance, including tail latency. In cloud environments, we show that Bao can offer both reduced costs and better performance compared with a sophisticated commercial system.
연구 동기 및 목표
- 기존의 학습 기반 쿼리 최적화기의 한계를 해결하기 위해, 높은 훈련 오버헤드, 데이터/스키마 변화에 대한 취약성, 열악한 꼬리 성능을 해결한다.
- 기존 쿼리 최적화기를 대체하지 않고도 종단 간 쿼리 실행 성능(특히 꼬리 지연 시간)을 향상시키는 것을 목표로 한다.
- 효율적이고 점진적인 학습을 통해 동적 워크로드, 데이터, 스키마 변화에 신속하게 적응할 수 있도록 한다.
- 멀티테넌트 클라우드 환경에서 사용자 정의 가능한 최적화 목표(예: CPU 시간, I/O)를 제공한다.
- 기존 최적화기 위에 머신러닝 기반 개선 사항을 통합함으로써, 수십 년에 걸친 수작업 최적화의 지혜를 유지한다.
제안 방법
- Bao는 각 힌트 세트를 '손잡이'로 간주하고, 예측된 성능에 기반해 쿼리 계획을 선택하는 문맥 기반 다중 손잡이 슬롯머신 문제로 쿼리 힌트 선택을 정의한다.
- 쿼리 논리 계획의 구조적 특징을 추출하기 위해 트리 컨volution 신경망을 사용하여 문맥 표현을 생성한다.
- 탐색과 이용의 균형을 확보하기 위해 톰슨 샘플링을 활용하여, 낮은 실망도로 효율적인 학습을 보장한다.
- 각 도착한 쿼리에 대해 Bao는 힌트 세트를 선택하고, 기반 최적화기를 통해 쿼리를 실행하며 보상(예: 실행 시간, I/O 수)을 관측하여 정책을 업데이트한다.
- 시스템은 쿼리 구조에서 최적의 힌트 세트로의 매핑 정책을 학습하여, 각 쿼리에 대해 가능한 최고의 힌트 세트에 비해 실망도를 최소화한다.
- 훈련은 효율적이다: Bao는 실제 워크로드에서 약 1시간의 훈련만으로도 상당한 성능 향상을 달성한다.
실험 결과
연구 질문
- RQ1학습 기반 시스템이 기존 최적화기를 대체하지 않고도 최소한의 훈련 시간으로 쿼리 최적화기 성능을 향상시킬 수 있는가?
- RQ2이러한 시스템이 데이터, 스키마, 또는 쿼리 워크로드의 변화가 발생하더라도 성능 향상을 유지할 수 있는가?
- RQ3희소한 훈련 데이터 상황에서도 중앙값 및 꼬리 지연 시간을 모두 감소시킬 수 있는가?
- RQ4다양한 성능 메트릭(예: CPU 시간, I/O)을 최적화하기 위해 사용자 정의가 가능한가?
- RQ5일반적으로 학습 기반 최적화기에 기인하는 치명적인 성능 저하를 피할 수 있는가?
주요 결과
- Bao는 단지 1시간의 훈련 후에도 PostgreSQL보다 중앙값 실망도를 낮추며, IMDb 및 Stack 워크로드 전반에서 성능 향상을 달성한다.
- 꼬리 성능 측면에서 Bao는 어떤 경우에도 30초 이상 소요되는 계획을 선택하지 않으며, 반면 PostgreSQL은 일부 케이스에서 720초 이상 소요되는 계획을 선택한다.
- 조인 순서 벤치마크에서 Bao는 113개 쿼리 중 3개에 대해 레지레션을 보였고, 모두 3초 이내였으며, 10개 쿼리에 대해서는 20초 이상 성능 향상을 달성한다.
- CPU 시간과 I/O 메트릭 모두에서 Bao는 훈련에 사용된 메트릭이 무엇이든 간에 PostgreSQL보다 중앙값 실망도가 낮다.
- CPU 시간 최소화를 위해 훈련했을 때, Bao는 따뜻한 캐시 상황에서도 PostgreSQL보다 중앙값 및 꼬리 실망도가 유의미하게 낮다.
- Bao의 최적화 목표 사용자 정의 기능은 멀티테넌트 클라우드 환경에서 비용을 줄이고 성능을 향상시키는 데 기여한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.