사용자 정의 함수(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의 혁신 사항을 확인해 보세요:

 

작성자

게시자 Dhanya Gowrish, 소프트웨어 엔지니어

댓글 남기기