Kepler 매개변수화된 쿼리 최적화 방법

앞에 쓰다

본 글은 2023년 SIGMOD에 발표된 논문 "Kepler: Robust Learning for Faster Parametric Query Optimization"을 주로 소개합니다. 이 글은 쿼리 성능을 향상시키는 동시에 쿼리 계획 시간을 줄이는 것을 목표로 매개변수화된 쿼리 최적화와 매개변수화된 쿼리에 대한 쿼리 최적화를 결합합니다.

이를 위해 저자는 Kepler(K-plan Evolution for Parametric Query Optimization: Learned, Empirical, Robust)라는 엔드투엔드 딥러닝 기반 파라메트릭 쿼리 최적화 방법을 제안합니다.

수치 질의는 SQL 구조는 동일하고 바인딩된 매개변수 값만 다른 질의 유형을 말합니다. 예를 들어 다음 쿼리 구조를 고려해보세요.

쿼리 구조는 매개변수화된 쿼리의 템플릿으로 간주될 수 있으며 "?"는 서로 다른 매개변수 값을 나타냅니다. 사용자가 실행하는 SQL 문은 모두 이런 쿼리 구조를 갖고 있으나 실제 매개변수 값은 다를 수 있다. 이러한 매개변수화된 쿼리는 최신 데이터베이스에서 매우 자주 사용됩니다. 동일한 쿼리 템플릿을 반복해서 지속적으로 실행하기 때문에 쿼리 성능을 향상시킬 수 있는 기회를 제공합니다.

PQO(매개변수화된 쿼리 최적화)는 위에서 언급한 매개변수화된 쿼리의 성능을 최적화하는 데 사용됩니다. 목표는 성능 회귀를 피하면서 쿼리 계획 시간을 최대한 줄이는 것입니다. 기존 접근 방식은 시스템에 내장된 쿼리 최적화 프로그램에 너무 많이 의존하여 최적화 프로그램의 본질적인 차선책의 대상이 됩니다. 저자는 매개변수화된 쿼리를 위한 이상적인 시스템은 PQO를 통해 쿼리 계획 시간을 단축할 뿐만 아니라 QO(쿼리 최적화)를 통해 시스템의 쿼리 실행 성능을 향상시켜야 한다고 믿습니다.

쿼리 최적화(QO)는 쿼리가 최적의 실행 계획을 찾는 데 사용됩니다. 쿼리 최적화를 개선하기 위한 기존 방법의 대부분은 기계 학습 기반 카디널리티/비용 추정기와 같은 기계 학습을 적용합니다. 그러나 현재 학습 기반 쿼리 최적화 방법에는 다음과 같은 몇 가지 단점이 있습니다. (1) 추론 시간이 너무 길다. (2) 일반화 능력이 부족하다. (3) 성능 개선이 불분명하다. 성능이 저하될 수 있습니다.

위의 단점은 예측 결과의 실행 시간 향상을 보장할 수 없기 때문에 학습 기반 방법에 문제를 제기합니다. 위의 문제를 해결하기 위해 저자는 end-to-end 학습 기반의 매개변수화된 쿼리 최적화 방법인 Kepler를 제안합니다.

저자는 파라메트릭 쿼리 최적화를 후보 계획 생성과 학습 기반 예측 구조라는 두 가지 문제로 분리합니다. 이는 주로 새로운 후보 계획 생성, 훈련 데이터 수집, 강력한 신경망 모델 설계의 세 단계로 나뉩니다. 세 가지의 조합은 쿼리 계획 시간을 줄이는 동시에 쿼리 실행 성능을 향상시키는 동시에 PQO 및 QO의 목표를 충족합니다. 다음으로 먼저 Kepler의 전체 아키텍처를 소개한 다음 각 모듈의 구체적인 내용을 자세히 설명합니다.

전체 아키텍처

Kepler의 전체 아키텍처는 위 그림에 나와 있습니다. 먼저, 데이터베이스 시스템 로그에서 매개변수화된 쿼리 템플릿과 해당 쿼리 인스턴스(즉, 실제 매개변수 값이 포함된 쿼리)를 얻어 워크로드를 구성합니다. Kepler Trainer는 이 워크로드에 대한 신경망 예측 모델을 훈련하는 데 사용됩니다. 먼저 전체 워크로드에 대한 후보 계획을 생성하고 임시 데이터베이스 시스템에서 실행하여 실제 쿼리 실행 시간을 얻습니다.

이 쿼리 시간을 사용하여 신경망 모델을 훈련합니다. 훈련이 완료되면 Kepler Client라는 프로덕션 환경의 데이터베이스 시스템에 배포됩니다. 사용자가 쿼리 인스턴스를 입력하면 Kepler 클라이언트는 이에 대한 최상의 실행 계획을 예측하고 이를 계획 힌트 형태로 옵티마이저에 전달하여 최상의 계획을 생성하고 실행할 수 있습니다.

후보 계획 생성: Row Count Evolution

후보 계획 생성의 목표는 워크로드의 각 쿼리 인스턴스에 대해 거의 최적의 실행 계획을 포함하는 계획 집합을 구성하는 것입니다. 또한 후속 학습 데이터 수집 프로세스에서 과도한 오버헤드를 피하기 위해 가능한 한 작아야 합니다. 이 둘은 서로를 제약하며, 이 두 가지 목표의 균형을 어떻게 맞추는지는 후보 계획 생성의 주요 과제입니다.

방정식 1은 구체적인 계획 생성 목표를 공식화합니다. 그 중 는 워크로드 W에 대한 쿼리 인스턴스이고, 옵티마이저가 선택한 실행 계획이며, 이상적인 상황에서 설정된 계획 중 최적의 계획이고, ExecTime은 인스턴스에서 해당 계획의 실행 시간입니다. 따라서 수학식 1의 의미는 전체 워크로드에 걸쳐 옵티마이저가 생성한 계획 세트와 비교하여 후보 계획 세트의 실행 시간이 가속화된다는 의미입니다. 알고리즘은 이러한 속도 향상을 극대화하도록 설계되었습니다.

이를 위해 본 논문에서는 옵티마이저 카디널리티 추정을 무작위로 교란하여 새로운 계획을 생성하는 알고리즘인 RCE(Row Count Evolution)를 제안합니다. 전체 워크로드에 대한 후보 계획 세트로 결합된 각 쿼리 인스턴스에 대한 일련의 계획을 생성합니다. 이 알고리즘의 기본 아이디어는 베이스의 잘못된 추정이 최적화 프로그램의 차선책의 주요 원인이라는 것입니다. 동시에 후보 계획 생성 단계에서는 각 쿼리 인스턴스에 대해 특정 단일(거의) 최적 계획을 찾을 필요가 없고, (거의) 최적 계획만 포함하면 됩니다.

RCE 알고리즘은 반복을 통해 지속적으로 새로운 계획을 생성합니다. 첫째, 초기 반복 계획은 최적화 프로그램이 생성한 계획입니다. 후속 반복을 구축하려면 먼저 이전 세대 계획에서 균일한 무작위 샘플링이 필요합니다. 샘플링된 각 계획에 대해 해당 조인 하위 계획의 카디널리티를 교란(변경)합니다.

섭동 방법은 현재 추정 카디널리티의 지수 간격 내에서 무작위로 샘플링하는 것입니다. 교란된 카디널리티는 최적화 프로그램에 전달되어 해당 최적 계획을 생성합니다. 각 계획을 N회 반복하여 많은 실행계획을 생성하고, 그 중 아직 나타나지 않은 실행계획은 차세대 계획으로 유지하며 위의 과정을 반복한다.

아래 그림과 같이 위의 알고리즘을 시각적으로 설명하기 위해 구체적인 예를 제공합니다. 우선, Base Plan은 옵티마이저가 선택한 최적의 플랜으로, A 조인 B와 C 조인 D라는 두 개의 조인 하위 플랜이 있습니다. 각각의 예상 베이스는 40개와 17개입니다.

다음으로, 지수 간격 범위 10-1~101(각각 [4,40,400] 및 [1,17,170])의 두 조인 하위 계획에 대해 섭동 세트가 생성됩니다. 무작위 샘플은 섭동 세트에서 추출되어 계획 선택을 위해 최적화 프로그램으로 전달됩니다. 계획 1은 카디널리티가 각각 400과 17일 때 최적화 프로그램이 선택한 새 계획입니다. N번 반복하면 최종적으로 C1 계획이 다음 세대로 생성됩니다. 다음으로, 이들로부터 S 계획을 샘플링하고 각 계획에 대해 위의 과정을 반복하여 2세대 계획을 구성합니다.

저자가 섭동 세트로 지수적 간격 범위를 채택한 이유는 옵티마이저의 카디널리티 추정 오차 분포를 맞추기 위함입니다. 위의 알고리즘을 통해 섭동의 수가 충분히 크면 많은 카디널리티와 해당 계획이 생성된다는 것을 알 수 있습니다. 이런 방식으로 쿼리 인스턴스가 도착하면 계획 세트에 실제 카디널리티에 가까운 계획이 있어야 하며, 이는 인스턴스에 대한 (거의) 최적의 계획으로 간주될 수 있습니다.

훈련 데이터 수집

후보 계획 세트를 생성한 후 워크로드에 대해 각 계획을 실행하고 지도된 최적 계획 예측을 위한 실행 시간 데이터를 생성했습니다. 옵티마이저가 추정한 비용이 아닌 실제 실행 데이터를 사용하면 옵티마이저의 차선으로 인한 제한을 피할 수 있습니다. 실행 프로세스는 병렬화 가능합니다. 그러나 모든 계획을 실행하는 데에는 상당한 비용이 듭니다. 따라서 저자는 불필요한 차선책 실행으로 인한 자원 낭비를 줄이기 위해 두 가지 전략을 제안합니다.

적응형 시간 초과 및 계획 실행 재정렬, 적응형 시간 초과 및 계획 실행 재정렬. 저자는 최적이 아닌 계획의 실행을 제한하기 위해 시간 초과 메커니즘을 사용합니다. 각 쿼리 인스턴스에 대해 각 계획을 실행할 때 현재 최소 실행 시간이 기록될 수 있습니다.

계획의 실행 시간이 최소 실행 시간의 일정 범위를 초과하면 최적의 실행 계획이 아니기 때문에 더 이상 실행할 수 없습니다. 동시에 최소 실행 시간은 지속적으로 업데이트됩니다. 또한 다른 쿼리 인스턴스에 대한 각 계획의 실행을 기반으로 실행 시간의 오름차순으로 쿼리 계획을 실행하는 것은 시간 초과 메커니즘의 속도를 높이기 위한 휴리스틱으로 사용될 수 있습니다.

가지치기를 다루는 온라인 계획, 온라인 계획 세트 가지치기. 첫 번째 N개의 쿼리 인스턴스에 대해 모든 계획이 실행된 후 Set Cover 문제를 사용하여 K개의 계획으로 정리됩니다. 후속 데이터 수집 및 모델 교육에서는 이러한 K 계획을 사용합니다. Set Cover 문제는 아래와 같이 정의됩니다.

이 문서의 맥락에서 는 다양한 계획으로 표시될 수 있는 모든 쿼리 인스턴스를 나타내며, 각 계획은 일부 쿼리 인스턴스에 대해 거의 최적의 계획입니다. 따라서 문제는 모든 쿼리 인스턴스에 대해 거의 최적에 가까운 계획을 제공하기 위해 가능한 가장 작은 계획 집합을 사용하는 것으로 공식화될 수 있습니다. 문제는 NP이므로 저자는 탐욕 알고리즘을 사용하여 이를 해결합니다.

강력한 최선의 계획 예측

후보 계획 세트의 실제 실행 시간에 대한 훈련 데이터를 수집한 후 지도 머신러닝을 사용하여 모든 쿼리 인스턴스에 대한 최상의 계획을 예측합니다. 훈련 목표는 다음 방정식으로 논리적으로 표현될 수 있습니다. 여기서는 쿼리 인스턴스에 대해 모델이 선택한 최상의 계획을 나타냅니다. 이 방정식의 의미는 최적화 프로그램이 선택한 계획과 비교하여 모델이 선택한 계획으로 인한 속도 향상입니다. 상한은 방정식 1입니다. 즉, 모델은 RCE가 생성한 후보 계획이 가져오는 가속도를 최대한 포착해야 합니다.

모델의 구조는 순방향 신경망을 채택하고 기계 학습 불확실성의 최신 발전, 즉 SNGP(Spectral-normalized Neural Gaussian Processes)를 적용합니다. 이를 신경망에 결합하면 모델의 수렴성을 향상시키는 동시에 신경망에서 예측의 불확실성을 출력할 수 있습니다. 불확실성이 임계값보다 높으면 계획 예측 작업이 최적 계획으로 반환되어 최상의 계획을 결정합니다.

모델은 각 매개변수의 실제 값을 사용하여 특성화됩니다. 매개변수의 실제 값을 신경망에 입력하기 위해서는 일부 전처리가 필요하며, 특히 문자열 유형 데이터의 경우 더욱 그렇습니다. 문자열 형태의 데이터에 대해서는 고정된 크기의 어휘와 어휘에 없는 버킷을 이용하여 원-핫 벡터로 표현하고, 임베딩 레이어를 추가하여 원-핫 벡터의 임베딩을 학습한 후, 문자열 유형의 데이터를 처리할 수 있습니다.

실험적 효과

이 기사의 저자는 Kepler를 PostgreSQL에 통합하고 일련의 실험을 조직했습니다. 실험의 요약은 위 그림에 나와 있습니다. 케플러가 가져온 총 가속 효과는 2.41배입니다. 그 중 RCE가 생성한 후보 계획 세트는 약 2.92배의 가속을 가져올 수 있으며, SNGP 예측 모델은 80.8%를 포착하고 회귀는 0.4%만 달성합니다. 게다가 모델의 추론 시간은 평균 0.15ms에 불과합니다.

요약하다

이 문서에서는 매개변수화된 쿼리를 강력하게 가속화하는 학습 기반 접근 방식인 Kepler를 제안합니다. RCE(Row Count Evolution) 알고리즘을 통해 후보 계획 세트를 생성하고 이를 워크로드에서 실행하여 실제 실행 시간을 얻은 다음, 실제 실행 시간을 사용하여 예측 모델을 학습합니다.

예측 모델은 기계 학습 불확실성 추정의 최신 기술인 SNGP(Spectral-normalized Neural Gaussian Processes)를 채택하여 예측의 불확실성을 출력하면서 수렴성을 향상시킵니다. 이러한 불확실성을 기반으로 모델이 완료되는지 아니면 최적화 프로그램이 완료되는지가 선택됩니다. 계획 예측. RCE는 높은 가속 효과를 가져올 수 있으며, SNGP는 회귀를 피하면서 RCE가 가져오는 가속 효과를 최대한 포착할 수 있다는 것이 실험을 통해 입증되었습니다. 따라서 PQO와 QO의 목표가 동시에 달성된다. 즉, 쿼리 계획 시간을 줄이면서 쿼리 실행 성능이 향상된다.

오픈 소스 산업용 소프트웨어를 포기하기로 결정했습니다 . 주요 이벤트 - OGG 1.0 출시, Huawei가 모든 소스 코드를 제공했습니다. Google Python Foundation 팀이 "코드 똥산"에 의해 해고되었습니다 . ". Fedora Linux 40이 정식 출시되었습니다. 유명 게임 회사가 출시했습니다. 새로운 규정: 직원의 결혼 선물은 100,000위안을 초과할 수 없습니다. China Unicom은 세계 최초로 오픈 소스 모델의 Llama3 8B 중국어 버전을 출시했습니다. Pinduoduo는 보상금을 선고 받았습니다 . 불공정 경쟁에 500만 위안 국내 클라우드 입력 방식 - 화웨이만 클라우드 데이터 업로드 보안 문제 없음
{{o.이름}}
{{이름}}

추천

출처my.oschina.net/u/5148943/blog/11044955