PieCloudDB 데이터베이스의 차세대 옵티마이저 "Daqi": 클라우드 네이티브 및 분산 시나리오용으로 설계

최근 PostgreSQL 중국 기술 회의가 항저우에서 시작되었습니다. PostgreSQL 기술 분야의 연례 행사인 PostgreSQL 중국 기술 컨퍼런스는 12년 연속 개최되어 데이터베이스 기술을 사랑하는 모든 소규모 파트너에게 협력, 공유 및 상호 지원을 위한 개방형 플랫폼을 제공합니다. 그리고 안전과 신뢰성, 돌파구, 진화 등을 주제로 한 이번 컨퍼런스에는 많은 산업 전문가와 기술 전문가가 모여 기술에 대해 논의하고 아이디어를 충돌시켰습니다.  

중국 클라우드 데이터 및 데이터 컴퓨팅 분야의 Day-1 quasi-unicorn으로서 Tuoshupai의 기술 전문가인 Guo Feng이 이 컨퍼런스에 초청되어 기조 연설을 했습니다. 

그의 연설에서 Guo Feng은 PieCloudDB 데이터베이스 - "Daqi"로 구축된 새로운 옵티마이저를 소개했습니다. "Daqi"라는 이름은 젊은이들 사이에서 인기 있는 게임인 "Red Dead Redemption"에서 유래되었습니다. 게임에서 "Daqi"라는 NPC 캐릭터의 진언은 "I have a plan"이며, 이는 옵티 마이저의 주요 역할과 "우연히 일치"합니다.

옵티마이저는 데이터베이스 시스템의 중요한 구성 요소로 사용자 쿼리 요청에 대한 실행 계획을 구문 분석, 최적화 및 생성하여 쿼리 결과가 가장 빠른 속도와 최고의 효율성으로 반환될 수 있도록 합니다. 옵티마이저는 최적의 쿼리 실행 계획을 생성하여 쿼리 성능을 최적화하는 목적을 달성합니다. 실행 계획의 품질은 종종 수백 가지의 성능 차이를 초래합니다. PieCloudDB가 구축한 옵티마이저 "Daqi"는 많은 최적화 기능을 구현했으며 데이터베이스 시스템의 "씽크 탱크"로서 PieCloudDB의 성능 향상을 돕습니다.

PostgreSQL과 유사하게 PieCloudDB의 쿼리 최적화 과정은 일반적으로 전처리 단계, 스캐닝/조인 최적화 단계, 스캐닝/조인 이외의 최적화 단계, 후처리 단계의 4단계로 나뉩니다. "Daqi"는 이 네 가지 처리 단계에서 많은 최적화를 수행했습니다. 

전처리 단계에서 옵티마이저 "Daqi"는 논리적으로 동등한 변경을 통해 쿼리 트리를 더 간단하고 효율적인 방정식으로 변환합니다. 비용 정보를 계산하는 데 도움이 되는 일부 통계 정보를 얻지 못했기 때문에 이 단계에서는 일반적으로 일부 입증된 규칙을 사용하여 쓸모 없는 연결을 제거하기 위한 분포 제약 조건, 단순화된 표현 및 연결 트리와 같은 작업을 수행합니다. 

  • IN, EXISTS 및 기타 유형의 하위 쿼리를 세미 조인으로 변환 

PieCloudDB는 하위 쿼리의 위치와 역할에 따라 하위 쿼리를 하위 링크(SubLink)와 하위 쿼리(SubQuery)로 구분합니다. 하위 연결은 WHERE/ON과 같은 제약 조건에 나타나기 때문에 ANY/ALL/EXISTS와 같은 술어 동사가 동반되는 경우가 많습니다. 실행자가 하위 연결 방식으로 처리하면 쿼리 효율성에 영향을 미칩니다. 그리고 하위 계획(SubPlan) 생성으로 인해 최적화 공간이 제한됩니다. 따라서 쿼리 최적화의 전처리 단계에서 PieCloudDB는 하위 조인을 가능한 한 세미 조인 또는 안티 조인으로 변환하여 최적화의 여지를 더 많이 확보합니다. 

다음 SQL 쿼리를 예로 들어 보겠습니다.

SELECT … FROM foo WHERE EXISTS (SELECT 1 FROM bar WHERE foo.a = bar.c);

그 중 EXISTS는 하위 쿼리이며 PieCloudDB는 전처리 단계에서 이를 Semi-Join으로 변환합니다.

SELECT ... FROM foo *SEMI JOIN* bar ON foo.a = bar.c;
  • 하위 쿼리 부스트 

FROM 키워드 뒤에 나오는 절은 하위 쿼리 문입니다. 이런 형태의 서브쿼리를 수행할 때 최적화를 하지 않으면 먼저 별도의 계획을 세우고 서브쿼리 스캔을 한 후 상위쿼리와 연결하여 최적의 솔루션을 찾지 못하는 경우가 많다. 더 큰 쿼리 비용. 

다음 예를 예로 들면, 최적화가 되지 않으면 bar와 baz가 먼저 JOIN 연결되고, 연결 조건이 없기 때문에 bar와 baz는 직교곱이 되고, 그 다음 외부에서 foo와 JOIN 연결이 됩니다.

​​​​​​​​​​​​​​SELECT * FROM foo JOIN (SELECT bar.c FROM bar JOIN baz ON TRUE) AS sub ON foo.a = sub.c;

업그레이드 후 bar와 baz는 같은 수준에 있으며 foo와 bar의 조인을 먼저 생성한 다음 baz와 조인하여 비용을 낮출 수 있습니다.

SELECT * FROM foo JOIN (bar JOIN baz ON TRUE) ON foo.a = bar.c;
  • 외부 조인을 내부 조인/안티 조인으로 변환 

외부 조인은 조건자 푸시다운 및 연결 순서 검색에 많은 제한이 있으므로 "Daqi"는 전처리 단계에서 외부 조인을 내부 조인(Inner Join) 또는 안티 조인(Anti Join)으로 변환하려고 합니다. 

다음 SQL 문에서 LEFT JOIN의 결과는 일부 NULL 종료 튜플을 생성하고 WHERE 조건의 등호는 엄격한 제약 조건입니다. 즉, 입력이 NULL이면 출력도 NULL 또는 FALSE여야 합니다. bar의 열이 NULL인 경우 bar.d = 42는 FALSE로 필터링됩니다. 즉, LEFT JOIN에 의해 ​​생성된 NULL로 채워진 튜플은 WHERE 조건에 의해 필터링되고 이때 LEFT JOIN은 의미상 INNER JOIN이 됩니다. ​​​​​​​​

SELECT ... FROM foo LEFT JOIN bar ON (...) WHERE bar.d = 42;

이 경우 PieCloudDB "Daqi" 최적화 프로그램은 이러한 쿼리를 자동으로 인식하고 이러한 최적화 기회를 활용하여 외부 조인을 내부 조인으로 변환합니다. ​​​​​​​​

SELECT ... FROM foo INNER JOIN bar ON (...) WHERE bar.d = 42; 

경우에 따라 외부 조인의 경우 PieCloudDB 옵티마이저는 전처리 단계에서 외부 조인을 안티 조인으로 변환합니다. 다음 SQL 문을 예로 들어 보겠습니다.

SELECT * FROM foo LEFT JOIN bar ON foo.a = bar.c WHERE bar.c IS NULL; 

이전 예제와 마찬가지로 LEFT JOIN도 NULL로 채워진 튜플 결과 집합을 많이 생성합니다. 이때 WHERE 조건은 bar.c만 NULL 결과로 받습니다. . PieCloudDB는 전처리 단계에서 이 최적화 기회를 자동으로 감지하고 외부 연결을 내부 연결로 변환합니다.

SELECT * FROM foo *ANTI JOIN* bar on foo.a = bar.c; 

이러한 최적화 외에도 전처리 단계에서 옵티마이저 "Daqi"는 다음과 같은 여러 최적화를 구현합니다. 

  • 분포 제약

  • 등가 클래스 빌드 

  • 외부 연결 정보 수집 

  • 쓸모없는 연결 제거 

  • 단순화 표현 

      기다리다…

스캔/조인 최적화 단계는 틀림없이 옵티마이저 처리의 가장 복잡한 단계입니다. 이 단계에서 옵티마이저 "Daqi"는 쿼리 문의 FROM 및 WHERE 부분을 처리하는 비용에 의해 구동되며 ORDER BY 정보도 고려합니다. 

이 단계에서 옵티마이저 "Daqi"의 처리는 주로 두 단계로 나눌 수 있습니다. 먼저 기본 테이블에 대한 스캔 경로를 생성하고 스캔 경로의 비용과 결과 집합의 크기를 계산하여 후속 조인 작업의 비용을 구합니다. 두 번째 단계에서 "Daqi"는 연결 작업을 위한 최적의 연결 경로를 생성하기 위해 전체 연결 시퀀스 공간을 검색합니다. 이 단계의 복잡성은 매우 높으며(n! 수준) PieCloudDB는 동적 프로그래밍과 유전자 알고리즘의 두 가지 알고리즘을 사용하여 처리하고 GUC 값에 따라 알고리즘을 선택합니다. 질의문에 외부 조인이 포함된 경우 연결 순서에 대한 외부 조인의 제한을 고려할 때 내부 조인과 같이 연결 순서를 임의로 전환할 수 없으므로 이 단계의 복잡성이 증가합니다. 

두 번째 단계와 비교할 때 이 단계는 많은 것을 다루지만 복잡도는 상대적으로 낮습니다. 이 단계에서 "Daqi"는 먼저 Group By, 집계, 창 기능, DISTINCT를 처리한 다음 집합 작업을 처리하고 마지막으로 ORDER BY를 처리합니다. 위의 각 작업은 하나 이상의 경로를 생성하고 "Daqi"는 비용에 따라 이러한 경로를 필터링하고 필터링된 경로에 LockRows, Limit 및 ModifyTable을 추가합니다. 

처음 세 단계 후에 "Daqi"는 대략적인 쿼리 계획을 생성했습니다. 후처리 단계에서 "Daqi"는 선택한 최적 경로를 쿼리 계획으로 변환하고 최적 계획을 일부 조정합니다. 

위에서 언급한 최적화 기능 외에도 PieCloudDB 옵티마이저 "Daqi"는 복잡한 쿼리 시나리오에 대한 많은 최적화 및 개선을 수행했으며 많은 고급 분산 및 클라우드 네이티브 기능을 실현했습니다

위의 최적화 기능을 기반으로 "Daqi" 최적화 프로그램은 배포를 위한 많은 최적화 기능을 확장했습니다. 우선, "Daqi"는 서로 다른 실행 노드(Executor) 간에 데이터를 이동할 수 있도록 모션 개념을 도입했습니다. Motion을 사용하여 "Daqi"는 분산 쿼리 계획을 생성할 수 있습니다. 이러한 쿼리 계획은 더 작은 단위로 분할되어 병렬 실행을 위해 서로 다른 실행 노드에 분산됩니다. 병렬 실행을 통해 많은 복잡한 쿼리를 더욱 최적화할 수 있으며, 예를 들어 집계 작업의 경우 분산을 활용하여 실행 노드 간의 다단계 집계를 통해 성능을 향상시킬 수 있습니다. 

이 쿼리를 예로 들어 다단계 집계를 설명합니다. 이 SQL 쿼리의 경우 "Daqi"는 이러한 쿼리 계획을 생성합니다.

중복 제거 작업의 존재로 인해 "Daqi"는 3단계 집계를 수행합니다. 첫 번째 단계에서 PieCloudDB는 먼저 각 실행 노드에서 그룹 키로 a 및 b를 사용하여 로컬 집계를 수행합니다. 여기에서 부분 중복 제거 작업은 다음과 같습니다. 완전한. 그런 다음 Motion을 사용하여 재셔플 작업을 수행한 다음 이 때 집계 작업을 수행하여 전역 중복 제거를 완료합니다. 마지막으로 그룹 키에 따라 최종 집계 작업을 완료하여 쿼리 결과를 얻습니다. 

PieCloudDB의 스토리지 엔진 "Jianmo"는 이 디자인과 결합된 개체 스토리지 설계를 채택하기 때문에 PieCloudDB 최적화 프로그램 "Daqi"는 집계 푸시다운, 블록 건너뛰기, 사전 계산 등을 포함한 고급 최적화를 실현합니다. 다음은 집계 및 푸시 다운에 대한 소개입니다. "Daqi"의 다른 클라우드 네이티브 기능에 대해서는 속속 출시될 다른 콘텐츠에 주목하십시오. 

PieCloudDB는 쿼리 실행 계획에서 데이터 전송 및 처리를 효과적으로 줄이고 쿼리 효율성을 향상시킬 수 있는 Aggregate Pushdown을 구현합니다 . 분석 시나리오에서 SUM, AVG, MAX 및 MIN과 같은 집계 작업은 데이터베이스 테이블의 데이터를 집계하는 데 사용할 수 있는 일반적인 작업입니다. 대부분의 데이터 웨어하우스는 집계 작업을 처리할 때 일반적으로 먼저 테이블 스캔 및 조인 작업을 완료한 다음 집계 함수를 계산해야 합니다. 매우 많은 양의 데이터의 경우 이러한 쿼리 성능은 상대적으로 낮습니다. 

PieCloudDB 옵티마이저 "Daqi"에 의해 구현된 집계 푸시다운 최적화 전략은 연결 작업 전에 실행하기 위해 집계 작업을 푸시다운하여 연결 작업에서 처리해야 하는 데이터의 양을 크게 줄일 수 있습니다. 테스트 후 경우에 따라 성능은 수백 또는 수천 배 향상됩니다. 

다음 SQL 쿼리를 예로 들면 이 쿼리는 t1 테이블과 t2 테이블을 조인해야 하며 이를 기준으로 t1.a로 그룹화하여 t2.c의 평균값을 얻습니다. 집계 푸시다운 최적화가 없는 경우 t1과 t2의 연결 작업이 먼저 완료된 후 t1.a의 그룹화에 따라 집계 작업이 수행됩니다. 이때 t1 및 t2 테이블이 모두 크면 조인 작업 비용이 매우 높아 성능에 어느 정도 영향을 미칩니다 . aggregation 과 pushdown 의 최적화 하에서 aggregation 연산은 연결 전에 수행하게 되는데 이때 t2.b 가 많이 aggregation 된다면 데이터의 양이 많이 줄어들게 되는데 이때 연결 연산을 하게 되면 성능이 크게 향상 됩니다 .

쿼리 최적화 프로그램은 데이터베이스 시스템의 가장 중요하고 복잡한 구성 요소 중 하나입니다. 클라우드 네이티브 가상 데이터 웨어하우스인 PieCloudDB는 계속해서 옵티마이저 "Daqi"를 연마하고 데이터베이스 시스템의 효율적이고 안정적인 운영을 보장한다는 전제하에 성능 개선을 지속적으로 추진할 것입니다. 

3월 14일, 차세대 클라우드 네이티브 데이터 웨어하우스 가상화 기반의 PieCloudDB "클라우드 온 클라우드" 버전이 공식 출시되었습니다. www.openpie.com에 로그인하여 무료 평가판을 사용해  보십시오  . 

추천

출처blog.csdn.net/OpenPie/article/details/129752091