카우치베이스 서버

SQL++ 사용자 정의 함수에 대한 향상된 디버깅 기능

사용자 정의 함수(UDF) 는 SQL++에서 지원되는 매우 유용한 기능입니다. Couchbase 7.6에는 UDF 실행에 대한 디버깅 기능과 가시성을 강화하는 개선 사항이 도입되었습니다.

이 블로그에서는 Couchbase 7.6의 새로운 기능 중 UDF와 관련된 두 가지를 살펴봅니다.

    1. 자바스크립트 UDF에서 실행되는 SQL++ 문에 대한 프로파일링
    2. UDF 내에서 SQL++ 문의 쿼리 계획에 액세스하는 함수 설명하기

이 게시물의 예제에서는 여행 샘플 데이터 세트 를 설치해야 합니다.

자바스크립트 UDF에서 실행되는 SQL++ 프로파일링

쿼리 프로파일링은 SQL++가 제공하는 디버깅 기능입니다.

문 실행에 대해 프로파일링이 활성화된 경우 요청 결과에는 문 실행의 각 단계에 대한 타이밍 및 메트릭이 포함된 자세한 실행 트리가 포함됩니다. 프로파일링 정보는 문 실행 결과에서 반환되는 것 외에도 요청에 대한 액세스 권한이 있는 시스템:활성_요청 그리고 시스템:완료_요청 시스템 키 공간.

다음은 다음과 같은 게시물입니다. 요청 프로파일링에 대해 자세히 알아보기.

Couchbase 7.0에서는 다음과 같은 하위 쿼리에 대한 프로파일링이 포함되었습니다. 인라인 UDF.

그러나 Couchbase 7.6의 새로운 기능을 통해 프로파일링이 다음과 같은 SQL++ 문으로 확장되었습니다. 자바스크립트 UDF.

이전 버전에서는 JavaScript UDF 내의 문을 프로파일링하려면 사용자가 함수 정의를 열고 UDF 내에서 각 문을 개별적으로 실행한 후 프로파일을 수집해야 했습니다. 7.6.0에서는 이 추가 단계가 더 이상 필요하지 않습니다!

이제 프로파일링이 활성화되면 문에 JavaScript UDF 실행이 포함된 경우 UDF에서 실행된 모든 SQL++ 문에 대한 프로파일도 수집됩니다. 그리고 이 UDF 관련 프로파일링 정보는 요청 출력에서 확인할 수 있습니다, 시스템:활성_요청 그리고 시스템:완료_요청 시스템 키 공간도 마찬가지입니다.

예 1:

자바스크립트 UDF 생성 js1 글로벌 라이브러리에서 lib1 REST 엔드포인트 또는 UI를 통해.

해당 SQL++ 함수를 생성합니다:

프로파일링을 활성화한 상태에서 UDF를 실행합니다:

에서 프로필 섹션에 반환된 응답의 실행 타이밍 하위 섹션에 포함된 필드 ~udfStatements.

~udfStatements 는 JavaScript UDF 내의 모든 SQL++ 문에 대한 항목이 포함된 프로파일링 정보 배열입니다.

내의 모든 항목 ~udfStatements 섹션에 포함되어 있습니다:

    • 실행 타이밍 문에 대한 실행 트리입니다. 여기에는 문 실행의 모든 단계에 대한 메트릭 및 타이밍 정보가 있습니다.
    • 문 문자열입니다.
    • 함수문이 실행된 함수의 이름입니다. 중첩된 UDF 실행이 있는 경우 문을 실행한 UDF를 식별하는 데 유용합니다.

설명 함수가 있는 쿼리 플랜

SQL++는 EXPLAIN 문을 사용하여 문의 플랜에 액세스할 수 있는 또 다른 훌륭한 기능을 제공합니다. 그러나 EXPLAIN 문은 인라인이나 JavaScript UDF와 같은 UDF 내의 문 플랜에는 확장되지 않습니다.

이전 버전에서는 UDF 내에서 SQL++에 대한 쿼리 계획을 분석하려면 사용자가 함수의 정의를 열고 UDF 내의 모든 문에 대해 개별적으로 EXPLAIN을 실행해야 했습니다.

Couchbase 7.6에서는 이러한 추가 단계가 새로운 문을 도입하여 최소화되었습니다.설명 기능. 이 문은 EXPLAIN과 동일한 기능을 수행하지만 UDF 내의 SQL++ 문에 대해 수행합니다.

EXPLAIN FUNCTION 문을 사용하는 방법을 살펴봅시다!

구문

여기, 함수 는 함수의 이름을 나타냅니다.

구문에 대한 자세한 내용은 문서를 참조하세요.

전제 조건

UDF에서 설명 함수를 실행하려면 사용자에게 충분한 RBAC 권한실행 기능을 사용할 수 있습니다.

또한 사용자는 UDF 함수 본문 내에서 SQL++ 문을 실행하는 데 필요한 RBAC 권한이 있어야 합니다.

다음은 카우치베이스에서 지원되는 역할.

인라인 UDF

인라인 UDF의 EXPLAIN FUNCTION은 정의 내에 있는 모든 하위 쿼리의 쿼리 계획을 반환합니다.

예제 2 - 인라인 함수에 함수 설명하기

인라인 UDF를 생성하고 EXPLAIN FUNCTION을 실행합니다:

위 문장의 결과에는 다음이 포함됩니다:

    • 함수 - 실행된 함수의 이름은 EXPLAIN FUNCTION입니다.
    • 요금제 - 인라인 UDF 내의 모든 하위 쿼리에 대한 항목이 포함된 플랜 정보 배열입니다.

자바스크립트 UDF

JavaScript UDF 내의 SQL++ 문은 두 가지 유형이 있을 수 있으며, SQL++ 문이 호출되는 방식에 따라 EXPLAIN FUNCTION이 다르게 작동합니다.

다음에 대한 문서 참조는 다음과 같습니다. 자바스크립트 함수에서 SQL++ 호출.

임베디드 SQL++

    • 임베디드 SQL++는 함수 본문에 '임베디드'되며, 그 감지는 자바스크립트 트랜스파일러가 처리합니다.
    • 설명 함수는 내장된 SQL++ 문에 대한 쿼리 계획을 반환할 수 있습니다.

 N1QL() 함수 호출로 실행되는 SQL++

    • SQL++는 문자열 형식의 문을 N1QL() 함수에 인수로 전달하여 실행할 수도 있습니다.
    • 함수를 구문 분석할 때 EXPLAIN을 실행할 잠재적인 SQL++ 문에 대해 함수 인수의 동적 문자열을 가져오기가 어렵습니다. 이 문제는 런타임에만 안정적으로 해결할 수 있습니다.
    • 이러한 추론에 따라 EXPLAIN FUNCTION은 N1QL() 호출을 통해 실행된 SQL++ 문에 대한 쿼리 계획을 반환하지 않습니다. 대신 N1QL() 함수 호출이 수행된 줄 번호를 반환합니다. 이 줄 번호는 함수 정의의 시작 부분에서 계산됩니다.
    • 그런 다음 사용자는 실제 함수 정의에서 줄 번호를 매핑하고 더 자세히 조사할 수 있습니다.

예제 3 - 외부 자바스크립트 함수에 대한 함수 설명

자바스크립트 UDF 생성 js2 글로벌 라이브러리에서 lib1 REST 엔드포인트 또는 UI를 통해:

해당 SQL++ 함수를 생성합니다:

SQL++ 함수에서 EXPLAIN FUNCTION을 실행합니다:

위 문장의 결과에는 다음이 포함됩니다:

    1. 함수 - 실행된 함수의 이름은 EXPLAIN FUNCTION입니다.
    2. 라인 번호 - N1QL() 함수 호출이 있는 JavaScript 함수 정의의 시작 부분에서 계산된 줄 번호 배열입니다.
    3. 요금제 - 모든 항목이 포함된 요금제 정보의 배열입니다. 임베디드 SQL++ 문을 사용합니다.

제약 조건

JavaScript 함수 정의에서 N1QL() 함수가 별칭이 지정된 경우, EXPLAIN FUNCTION은 이 별칭이 지정된 함수가 호출된 줄 번호를 반환할 수 없습니다. 예를 들어

UDF에 중첩된 UDF 실행이 포함된 경우, EXPLAIN FUNCTION은 이러한 중첩된 UDF 내에서 SQL++ 문의 쿼리 계획 생성을 지원하지 않습니다.

요약

Couchbase 7.6은 UDF 디버깅을 위한 새로운 기능을 도입하여 사용자가 UDF 실행을 쉽게 들여다볼 수 있도록 도와줍니다.

자세한 내용은 다음 문서 링크를 참조하거나 다른 Couchbase 7.6의 혁신 사항을 확인해 보세요:

 

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

Author

Posted by Dhanya Gowrish, 소프트웨어 엔지니어

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.