Servidor Couchbase

Mejora de la depuración de funciones SQL++ definidas por el usuario

Funciones definidas por el usuario (UDF) son una característica muy útil soportada en SQL++. Couchbase 7.6 introduce mejoras que permiten una mayor depuración y visibilidad en la ejecución de UDF.

Este blog explorará dos nuevas características de Couchbase 7.6 en el mundo de las UDFs.

    1. Perfilado de sentencias SQL++ ejecutadas en UDFs JavaScript
    2. EXPLAIN FUNCTION para acceder a planes de consulta de sentencias SQL++ dentro de UDFs

Los ejemplos de este post requieren el conjunto de datos de muestras de viajes a instalar.

Creación de perfiles de SQL++ ejecutado en UDF de JavaScript

El perfilado de consultas es una característica de depuración que ofrece SQL++.

Cuando se activa la creación de perfiles para la ejecución de una sentencia, el resultado de la petición incluye un árbol de ejecución detallado con el tiempo y las métricas de cada paso de la ejecución de la sentencia. Además de la información de perfiles que se devuelve en los resultados de la sentencia, también se puede acceder a ella para la petición en el archivo sistema:solicitudes_activas y sistema:solicitudes_realizadas espacios de claves del sistema.

He aquí un post que profundiza en el perfilado de las peticiones.

En Couchbase 7.0, se incluyó la creación de perfiles para subconsultas, incluida la creación de perfiles de subconsultas de UDFs en línea.

Sin embargo, con las nuevas características de Couchbase 7.6, la creación de perfiles se amplió a las sentencias SQL++ dentro de UDF de JavaScript.

En versiones anteriores, para perfilar sentencias dentro de una UDF JavaScript, el usuario debía abrir la definición de la función, ejecutar individualmente cada sentencia dentro de la UDF y recopilar sus perfiles. Este paso adicional ya no será necesario en la versión 7.6.0.

Ahora, cuando se habilita la creación de perfiles, si la sentencia contiene la ejecución de una UDF JavaScript, también se recopilarán los perfiles de todas las sentencias SQL++ ejecutadas en la UDF. Y esta información de perfiles relacionada con UDF estará disponible en la salida de la petición, sistema:solicitudes_activas y sistema:solicitudes_realizadas del sistema.

Ejemplo 1:

Crear una UDF JavaScript js1 en una biblioteca mundial lib1 a través del punto final REST o de la interfaz de usuario.

Crear la función SQL++ correspondiente:

Ejecuta la UDF con el perfil activado:

En el perfil de la respuesta devuelta, el campo executionTimings contiene un campo ~declaracionesudf.

~declaracionesudf es una matriz de información de perfiles que contiene una entrada por cada sentencia SQL++ dentro de la UDF JavaScript.

Cada entrada dentro del ~declaracionesudf contiene:

    • executionTimings El árbol de ejecución de la sentencia. Contiene información sobre métricas y tiempos de cada paso de la ejecución de la sentencia.
    • declaraciónLa cadena de la declaración.
    • funciónEl nombre de la función donde se ejecutó la sentencia. Esto es útil para identificar la UDF que ejecutó la sentencia cuando hay ejecuciones UDF anidadas.

Planes de consulta con EXPLAIN FUNCTION

SQL++ ofrece otra maravillosa capacidad para acceder al plan de una sentencia con la sentencia EXPLAIN. Pero la sentencia EXPLAIN no se extiende a los planes de sentencias dentro de UDFs-ni Inline ni JavaScript UDFs.

En versiones anteriores, para analizar los planes de consulta de SQL++ dentro de una UDF era necesario que el usuario abriera la definición de la función y ejecutara individualmente un EXPLAIN en todas las sentencias de la UDF.

Estos pasos adicionales se reducen al mínimo en Couchbase 7.6 con la introducción de una nueva declaración.EXPLICAR LA FUNCIÓN. Esta sentencia hace exactamente lo mismo que EXPLAIN, pero para sentencias SQL++ dentro de una UDF.

Exploremos cómo utilizar la sentencia EXPLAIN FUNCTION.

Sintaxis

Toma, función se refiere al nombre de la función.

Para obtener información más detallada sobre la sintaxis, consulte la documentación.

Requisitos previos

Para ejecutar EXPLAIN FUNCTION en una UDF, el usuario debe tener suficiente Permisos RBAC a ejecutar la función.

El usuario también debe tener los permisos RBAC necesarios para ejecutar las sentencias SQL++ dentro del cuerpo de la función UDF.

Aquí están los roles soportados en Couchbase.

UDF en línea

EXPLAIN FUNCTION en una UDF en línea devolverá los planes de consulta de todas las subconsultas dentro de su definición.

Ejemplo 2 - EXPLAIN FUNCTION en una función en línea

Cree una UDF en línea y ejecute EXPLAIN FUNCTION en ella:

Los resultados de la declaración anterior contendrán:

    • función - El nombre de la función sobre la que se ha ejecutado EXPLAIN FUNCTION.
    • planos - Una matriz de información del plan que contiene una entrada para cada subconsulta dentro de la UDF en línea.

JavaScript UDF

Las sentencias SQL++ dentro de las UDFs de JavaScript pueden ser de dos tipos y EXPLAIN FUNCTION funciona de forma diferente basándose en la forma en que se llama a la sentencia SQL++.

Aquí está la referencia documental a Llamada a SQL++ en funciones JavaScript.

SQL++ integrado

    • SQL++ incrustado está "incrustado" en el cuerpo de la función y su detección es gestionada por el transpilador de JavaScript.
    • EXPLAIN FUNCTION puede devolver planes de consulta para sentencias SQL++ incrustadas.

 SQL++ ejecutado por la llamada a la función N1QL()

    • SQL++ también puede ejecutarse pasando una sentencia en forma de cadena como argumento a la función N1QL().
    • Cuando se analiza la función para posibles sentencias SQL++ sobre las que ejecutar EXPLAIN, es difícil obtener la cadena dinámica en el argumento de la función. Esto sólo se puede resolver de forma fiable en tiempo de ejecución.
    • Con este razonamiento, EXPLAIN FUNCTION no devuelve los planes de consulta para sentencias SQL++ ejecutadas mediante llamadas a N1QL(). Sino que devuelve los números de línea donde se han realizado las llamadas a la función N1QL(). Este número de línea se calcula desde el principio de la definición de la función.
    • A continuación, el usuario puede asignar los números de línea en la definición real de la función e investigar más a fondo.

Ejemplo 3 - EXPLAIN FUNCTION en una función JavaScript externa

Crear una UDF JavaScript js2 en una biblioteca mundial lib1 a través del punto final REST o de la interfaz de usuario:

Crear la función SQL++ correspondiente:

Ejecute EXPLAIN FUNCTION en la función SQL++:

Los resultados de la declaración anterior contendrán:

    1. función - El nombre de la función sobre la que se ha ejecutado EXPLAIN FUNCTION.
    2. números_de_línea - Una matriz de números de línea calculados desde el principio de la definición de la función JavaScript donde hay llamadas a la función N1QL().
    3. planos - Una matriz de información del plan que contiene una entrada por cada incrustado SQL++ dentro de la UDF JavaScript.

Restricciones

Si la función N1QL() ha sido aliasada en una definición de función JavaScript, EXPLAIN FUNCTION no podrá devolver los números de línea donde esta función aliasada fue llamada. Por ejemplo:

Si la UDF contiene ejecuciones UDF anidadas, EXPLAIN FUNCTION no soporta la generación de planes de consulta de sentencias SQL++ dentro de estas UDFs anidadas.

Resumen

Couchbase 7.6 introduce nuevas características para la depuración UDF que ayudarán a los usuarios a echar un vistazo a la ejecución UDF fácilmente.

Consulte los siguientes enlaces de documentación para obtener más información, o eche un vistazo a las demás novedades de Couchbase 7.6:

 

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Author

Posted by Dhanya Gowrish, Ingeniero de Software

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.