모든 종류의 데이터베이스 사용자는 비용 기반 최적화를 기대하게 되었습니다. 를 입력하세요.

이는 모든 기존 관계형 데이터베이스(RDBMS)의 표준 기능이지만, 아직까지 NoSQL 문서 데이터베이스를 위한 비용 기반 최적화 도구(CBO)는 없었습니다. 즉, 지금까지는 말이죠.

카우치베이스 쿼리에 대한 비용 기반 최적화는 카우치베이스 6.5의 개발자 프리뷰로 출시되었습니다. 이제 카우치베이스 7.0과 함께 정식 버전으로 출시되었습니다..

Couchbase Server 7.0의 새로운 CBO 기능에 대해 자세히 살펴보겠습니다.

기존 방식: 기존 방식: 규칙 기반 최적화

데이터베이스 쿼리 최적화에 대한 이전 접근 방식인 규칙 기반 최적화(RBO)를 언급하지 않고 비용 기반 최적화를 논하는 것은 불가능합니다.

규칙 기반 최적화를 사용하면 쿼리 최적화 도구는 다음을 사용하는 것을 고려합니다. any 인덱스에 쿼리 결과를 검색할 수 있는 경로를 제공합니다. 그러나 최적화 도구에 쿼리를 처리할 경로가 두 개 이상 제공될 때, 즉 쿼리가 여러 인덱스를 사용할 수 있을 때 최적화 도구는 모두 인덱스.

비용 기반 최적화를 사용하면 쿼리 최적화 도구가 각 인덱스 사용 비용을 계산한 다음 가장 낮은 비용으로 실행 계획을 결정합니다.

비용 기반 최적화란 무엇인가요?

비용 기반 최적화를 사용하면 데이터베이스 쿼리 최적화 도구가 쿼리를 처리하는 데 가장 적합한(가장 비용이 적게 드는) 계획을 선택할 수 있습니다.

이는 쿼리에 둘 이상의 잠재적 실행 경로, 즉 둘 이상의 정규화된 인덱스가 있는 경우 가장 중요합니다. 각 쿼리 계획 경로에는 쿼리가 수행해야 하는 모든 작업에 대한 총 비용이 할당됩니다. 이러한 비용은 특히 지정된 술어의 선택성에 따라 달라집니다. 술어의 선택성 값에 도달하려면 술어 필드의 통계가 미리 계산되어 있어야 합니다.

비용 값은 통계 계산의 임의 단위로, 리소스 비용이나 CPU 사용량과 동일하지 않다는 점에 유의하세요.

비용 기반 최적화 대 규칙 기반 최적화

비용 기반 쿼리 최적화는 최적화 도구에 두 가지 이상의 옵션이 제시될 때 항상 더 나은 실행 경로를 제공합니다. 계산된 통계를 통해 최적화 도구는 데이터 분포에 대한 지식과 그에 따른 한 쿼리 계획과 다른 쿼리 계획의 효율성을 파악할 수 있습니다.

예를 들어 다음과 같이 상상해 보세요. 카우치베이스 컬렉션 에 고객 정보와 주소가 포함된 인덱스가 있습니다. ix1(우편번호) 그리고 ix2(도시). 통계적으로 미국에는 도시 수보다 우편 번호가 더 많지만 그렇다고 해서 반드시 ix1(우편번호) 인덱스가 더 낮은 비용(따라서 더 나은 성능)을 제공합니다. ix2(도시) 색인. 왜 그럴까요? 시스템 내 고객이 미국의 모든 도시와 우편 번호에 고르게 분포되어 있는지 아직 알 수 없기 때문입니다. 그렇지 않을 가능성이 높습니다.

이 시나리오에서는 비용 기반 최적화 도구가 사전에 수집한 통계가 런타임에 가장 낮은 비용의 쿼리 경로를 결정하는 데 도움이 됩니다.

규칙 기반 최적화를 사용하면 쿼리에 도시와 우편번호 술어가 모두 있는 경우 쿼리 최적화 도구는 교차 스캔을 통해 두 인덱스를 모두 사용합니다. 그러나 CBO는 컬렉션 내의 데이터를 기준으로 비용이 가장 낮은 인덱스 하나만 사용합니다.

Couchbase에서 비용 기반 최적화를 활성화하는 방법

Couchbase Server 7.0에서 비용 기반 최적화를 사용하기 위해 수행해야 하는 두 가지 중요한 단계가 있습니다:

1. CBO 기능 활성화

현재 비용 기반 최적화 도구는 Couchbase 7.0에서 기본적으로 활성화되어 있습니다.

그러나 이 기능을 비활성화하려면 N1QL 설정->쿼리 설정에서 기능 제어 값을 선택합니다. 비용 기반 최적화를 사용하려는 경우 이 기능이 활성화되어 있는지 확인하세요.

2. 통계 수집

클러스터에서 비용 기반 최적화 도구를 사용하도록 설정하는 것 외에도 쿼리에 사용되는 인덱스의 기본 필드에 대한 통계도 수집해야 합니다. 다음은 이를 수행하는 방법에 대한 샘플 쿼리입니다:

예를 들어 여행 샘플 데이터 집합을 사용하는 경우 위의 쿼리는 다음과 같이 표시됩니다:

인덱스 이름에 따라 통계를 수집할 수도 있습니다:

비용 기반 옵티마이저를 비활성화할 수도 있습니다. cbo_flag 를 사용하여 통계를 삭제하거나, API에서 통계 업데이트 삭제 (,..).

CBO 시스템 버킷

비용 기반 최적화를 사용하도록 설정하고 통계를 수집하면 클러스터에 다음과 같은 추가 버킷이 표시됩니다. n1ql_system_bucket.n1ql_system_scope.n1ql_cbo_stat. 이 버킷에 직접 액세스할 수 있는 권한은 시스템 관리자로 제한됩니다.

사용 통계 업데이트 명령으로 버킷에 통계를 추가하거나 통계를 삭제할 수 있습니다. 에 대한 통계 업데이트 삭제.

비용 기반 최적화 도구의 실제 사용

Couchbase 7.0에서 비용 기반 최적화가 어떻게 작동하는지 자세히 살펴보겠습니다. 여행 샘플 데이터 집합을 사용합니다.

비용 기반 최적화를 통한 인덱스 선택 개선

에 대해 두 개의 인덱스를 정의했다고 가정해 보겠습니다. 여행 샘플._default.airport 컬렉션.

아래에 쿼리가 있습니다:

위의 비용 기반 최적화를 사용하지 않았다면, 위 쿼리에 대한 규칙 기반 최적화 도구 실행 계획은 다음과 같습니다:

rules-based optimization execution plan for Couchbase N1QL query

쿼리 술어가 양쪽 모두에 있기 때문에 도시 그리고 faa 필드를 사용하면 교차 스캔에 두 인덱스가 모두 사용됩니다. 이 문서에서 교차 스캔에 대해 자세히 알아보세요: NoSQL의 성능 요소: N1QL의 교차 스캔.

다음으로 데이터베이스 쿼리에 대해 비용 기반 최적화를 활성화합니다. CBO는 이미 기본적으로 활성화되어 있으므로 통계를 수집하기만 하면 됩니다.

통계가 수집되면 선택 다시 쿼리합니다.

실행 계획이 다음과 같이 변경되는 것을 볼 수 있습니다. airport.faa 인덱스로 변경됩니다. 이 변경은 통계가 최적화 프로그램에서 faa 필드에 비해 선택성이 더 좋습니다. 도시 필드입니다. 따라서 airport.faa 인덱스는 쿼리가 사용하기에 더 효율적인 인덱스입니다.

Couchbase cost-based optimization execution plan for N1QL query

비용 기반 최적화를 통한 더 나은 조인

비용 기반 옵티마이저가 다음 중 더 나은 조인 유형을 선택하는 방법을 보여주는 또 다른 비용 기반 쿼리 최적화 예제를 살펴보겠습니다. 공항 그리고 경로.

먼저 소스 공항을 추적하기 위한 인덱스를 생성합니다:

그런 다음 아래 쿼리를 사용합니다:

기존 규칙 기반 옵티마이저를 사용하면 위 쿼리의 실행 계획은 다음과 같습니다:

rules-based optimization execution plan for database JOIN

위의 RBO 실행 계획은 중첩 루프를 사용하여 공항 컬렉션을 경로 컬렉션에 조인합니다.

다음으로 쿼리에 대해 비용 기반 최적화를 사용 설정해야 합니다. CBO는 기본적으로 이미 사용 설정되어 있으므로 컬렉션에서 필드에 대한 통계를 수집하기만 하면 됩니다.

인덱스에 대한 두 개의 기본 필드에서 비용 기반 최적화 통계를 사용할 수 있게 되면 최적화 도구는 HASH 를 컬렉션 조인에 사용합니다.

Couchbase CBO optimizer query execution plan using a HASH for the Collection JOIN

Couchbase의 비용 기반 옵티마이저 문제 해결

  1. 비용 기반 최적화는 Couchbase 7.0에서 기본적으로 활성화되어 있습니다. 그러나 비용 기반 최적화 도구가 효과적으로 작동하려면 버킷/컬렉션의 특정 필드에 대한 통계가 있어야 합니다.
  2. N1QL 기능 제어 필드를 사용하여 클러스터 수준에서 비용 기반 최적화를 비활성화하려면 값에 16을 더하면 됩니다. x10 비트의 세트입니다.
  3. CBO 통계는 쿼리 서비스에 의해 자동으로 업데이트되지 않습니다. 정기적으로 또는 수집 콘텐츠가 크게 변경된 후에 통계를 수집해야 합니다. 대량의 데이터가 업로드된 후에는 통계를 수집하는 것이 좋으며, 그렇지 않은 경우에는 매주 실행하는 것으로 충분합니다.
  4. 비용 기반 최적화는 다음에 대한 통계를 사용할 수 있는 경우에만 쿼리에 대해 고려됩니다. 옵티마이저가 고려하고 있던 모든 인덱스에 대해. 다음을 사용하여 지정된 키 공간의 모든 인덱스에 대한 통계를 수집할 수 있습니다:

추가 리소스

JSON용 비용 기반 옵티마이저 및 Couchbase 7.0 릴리스 전반에 대해 자세히 알아보려면 다음 리소스를 확인하세요:

카우치베이스로 비용 기반 최적화에 대해 알아보고 싶으신가요?Couchbase 7.0 시작하기

 

작성자

게시자 Binh Le

Binh Le는 Couchbase 쿼리 서비스의 수석 제품 관리자입니다. Couchbase에 입사하기 전에는 Oracle에서 근무하며 Sales Cloud Analytics 및 CRM OnDemand의 제품 관리 팀을 이끌었습니다. 영국 브라이튼 대학교에서 컴퓨터 공학 학사 학위를 받았습니다.

댓글 하나

  1. 좋은 글 감사합니다. "CBO와의 더 나은 조인" 섹션의 마지막 단락에 사소한 오타가 있습니다. NOT이라는 단어는 지금이어야 합니다. 다음과 같이

    ...를 입력하면 옵티마이저가 컬렉션 JOIN에 HASH를 사용하도록 전환하지 않습니다.

댓글 남기기