Funções definidas pelo usuário (UDFs) são um recurso muito útil suportado no SQL++. O Couchbase 7.6 apresenta aprimoramentos que permitem maior capacidade de depuração e visibilidade da execução de UDFs.

Este blog explorará dois novos recursos do Couchbase 7.6 no mundo das UDFs.

    1. Criação de perfil para instruções SQL++ executadas em UDFs JavaScript
    2. EXPLAIN FUNCTION para acessar planos de consulta de instruções SQL++ em UDFs

Os exemplos nesta postagem requerem o conjunto de dados de amostra de viagens a ser instalado.

Criação de perfil do SQL++ executado em UDFs JavaScript

A criação de perfil de consulta é um recurso de depuração que o SQL++ oferece.

Quando a criação de perfil está ativada para a execução de uma instrução, o resultado da solicitação inclui uma árvore de execução detalhada com o tempo e as métricas de cada etapa da execução da instrução. Além de as informações de criação de perfil serem retornadas nos resultados da instrução, elas também podem ser acessadas para a solicitação na função system:active_requests e system:completed_requests espaços de chaves do sistema.

Aqui está uma postagem que aprofunda-se na criação de perfis de solicitação.

No Couchbase 7.0, a criação de perfil foi incluída para subconsultas, incluindo a criação de perfil de subconsultas de UDFs em linha.

No entanto, com os novos recursos do Couchbase 7.6, a criação de perfil foi estendida para instruções SQL++ dentro de UDFs de JavaScript.

Nas versões anteriores, para criar perfis de instruções em um UDF JavaScript, o usuário precisava abrir a definição da função, executar individualmente cada instrução no UDF e coletar seus perfis. Essa etapa adicional não será mais necessária na versão 7.6.0!

Agora, quando a criação de perfil estiver ativada, se a instrução contiver a execução do UDF JavaScript, os perfis de todas as instruções SQL++ executadas no UDF também serão coletados. E essas informações de criação de perfil relacionadas ao UDF estarão disponíveis na saída da solicitação, system:active_requests e system:completed_requests espaços de chaves do sistema também.

Exemplo 1:

Criar um UDF JavaScript js1 em uma biblioteca global lib1 por meio do ponto de extremidade REST ou da interface do usuário.

Crie a função SQL++ correspondente:

Execute o UDF com a criação de perfil ativada:

No perfil da resposta retornada, a seção executionTimings A subseção contém um campo ~udfStatements.

~udfStatements é uma matriz de informações de criação de perfil que contém uma entrada para cada instrução SQL++ dentro do UDF JavaScript.

Cada entrada no ~udfStatements A seção contém:

    • executionTimings A árvore de execução da declaração. Ela contém informações de métricas e tempos de cada etapa da execução da instrução.
    • declaraçãoA string de declaração.
    • funçãoO nome da função em que a instrução foi executada. Isso é útil para identificar o UDF que executou o comando quando há execuções de UDFs aninhadas.

Planos de consulta com EXPLAIN FUNCTION

O SQL++ oferece outro recurso maravilhoso para acessar o plano de uma instrução com a instrução EXPLAIN. Porém, o comando EXPLAIN não se estende a planos de comandos dentro de UDFs - nem UDFs Inline nem JavaScript.

Nas versões anteriores, para analisar os planos de consulta do SQL++ em uma UDF, era necessário que o usuário abrisse a definição da função e executasse individualmente um EXPLAIN em todas as instruções da UDF.

Essas etapas extras são minimizadas no Couchbase 7.6 com a introdução de uma nova declaração-EXPLICAR A FUNÇÃO. Essa instrução faz exatamente o que o EXPLAIN faz, mas para instruções SQL++ em um UDF.

Vamos explorar como usar a instrução EXPLAIN FUNCTION!

Sintaxe

Aqui, função refere-se ao nome da função.

Para obter informações mais detalhadas sobre a sintaxe, consulte a documentação.

Pré-requisitos

Para executar o EXPLAIN FUNCTION em um UDF, o usuário deve ter Permissões RBAC para executar a função.

O usuário também deve ter as permissões RBAC necessárias para executar as instruções SQL++ no corpo da função UDF.

Aqui estão os funções compatíveis com o Couchbase.

UDF em linha

EXPLAIN FUNCTION em uma UDF em linha retornará os planos de consulta de todas as subconsultas dentro de sua definição.

Exemplo 2 - EXPLAIN FUNCTION em uma função inline

Crie uma UDF em linha e execute EXPLAIN FUNCTION nela:

Os resultados da declaração acima conterão:

    • função - O nome da função em que EXPLAIN FUNCTION foi executado.
    • planos - Uma matriz de informações do plano que contém uma entrada para cada subconsulta dentro do UDF Inline.

JavaScript UDF

As instruções SQL++ dentro dos UDFs JavaScript podem ser de dois tipos e o EXPLAIN FUNCTION funciona de forma diferente com base na maneira como a instrução SQL++ é chamada.

Aqui está a referência da documentação para Chamada de SQL++ em funções JavaScript.

SQL++ incorporado

    • O SQL++ incorporado é "incorporado" no corpo da função e sua detecção é tratada pelo transpilador JavaScript.
    • A EXPLAIN FUNCTION pode retornar planos de consulta para instruções SQL++ incorporadas.

 SQL++ executado pela chamada da função N1QL()

    • O SQL++ também pode ser executado passando uma instrução na forma de uma cadeia de caracteres como argumento para a função N1QL().
    • Ao analisar a função para possíveis instruções SQL++ para executar o EXPLAIN, é difícil obter a string dinâmica no argumento da função. Isso só pode ser resolvido de forma confiável em tempo de execução.
    • Com esse raciocínio, o EXPLAIN FUNCTION não retorna os planos de consulta para instruções SQL++ executadas por meio de chamadas N1QL(). Em vez disso, retorna os números de linha em que as chamadas de função N1QL() foram feitas. Esse número de linha é calculado a partir do início da definição da função.
    • O usuário pode então mapear os números de linha na definição real da função e investigar mais a fundo.

Exemplo 3 - EXPLAIN FUNCTION em uma função JavaScript externa

Criar um UDF JavaScript js2 em uma biblioteca global lib1 por meio do ponto de extremidade REST ou da interface do usuário:

Crie a função SQL++ correspondente:

Execute EXPLAIN FUNCTION na função SQL++:

Os resultados da declaração acima conterão:

    1. função - O nome da função em que EXPLAIN FUNCTION foi executado.
    2. números_linha - Uma matriz de números de linha calculada a partir do início da definição da função JavaScript em que há chamadas de função N1QL().
    3. planos - Uma matriz de informações do plano que contém uma entrada para cada incorporado instrução SQL++ dentro do UDF JavaScript.

Restrições

Se a função N1QL() tiver sido usada como alias em uma definição de função JavaScript, o EXPLAIN FUNCTION não poderá retornar os números de linha em que essa função com alias foi chamada. Por exemplo:

Se o UDF contiver execuções de UDFs aninhados, o EXPLAIN FUNCTION não suportará a geração de planos de consulta de instruções SQL++ dentro desses UDFs aninhados.

Resumo

O Couchbase 7.6 apresenta novos recursos para a depuração de UDFs, que ajudarão os usuários a examinar facilmente a execução de UDFs.

Consulte os links da documentação a seguir para saber mais ou confira as outras inovações do Couchbase 7.6:

 

Autor

Postado por Dhanya Gowrish, engenheiro de software

Deixar uma resposta