Visión general
Como la segunda característica de Index Advisor lanzada en Couchbase server 6.5 (Developer Preview), la función Advisor extiende el alcance de asesorar en una sola consulta a proporcionar recomendaciones de índice para la carga de trabajo de consulta y soporte en el manejo de sesiones. En este artículo, haremos un breve repaso de cómo funciona de estas dos formas diferentes.
Función de asesor sobre la carga de trabajo
La función de asesor funciona en los siguientes pasos:
-
- Tome como entrada una sola consulta o una carga de trabajo compuesta por varias consultas.
- Procesar cada consulta individual única con recomendación de índice.
- Fusiona y genera los índices actuales/recomendados para toda la carga de trabajo.
Sintaxis:
SELECCIONE ASESOR("consulta")
SELECT ASESOR(["consulta1", "consulta2", "consulta3″...])
El ejemplo siguiente muestra el escenario en el que la carga de trabajo de la consulta procede de system:completed_requests:
1 2 3 |
SELECCIONE ASESOR(( SELECCIONE RAW declaración DESDE sistema:solicitudes_realizadas)); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
[ { "$1": { "current_used_indexes": [ { "índice": "CREATE INDEX def_type ON `viaje-muestra`(`tipo`)", "declaraciones": [ { "run_count": 2, "declaración": "select * from `viaje-muestra` where type is not null" } ] }, { "índice": "CREATE PRIMARY INDEX def_primary ON `viaje-muestra`", "declaraciones": [ { "run_count": 1, "declaración": "select id from `viaje-muestra` where id < 10" } ] } ], "índices_de_cobertura_recomendados": [ { "índice": "CREATE INDEX adv_id ON `viaje-muestra`(`id`)", "declaraciones": [ { "run_count": 1, "declaración": "select id from `viaje-muestra` where id < 10" } ] } ], "índices_recomendados": [ { "índice": "CREATE INDEX adv_id ON `viaje-muestra`(`id`)", "declaraciones": [ { "run_count": 1, "declaración": "select id from `viaje-muestra` where id < 10" } ] } ] } } ] |
De forma similar a la sentencia ADVISE, la salida de la función ADVISOR() consta de tres partes:
-
- Índices_actuales_utilizados
Esta sesión resume los índices utilizados actualmente con la correspondiente lista de sentencias de consulta y el recuento de ejecuciones de cada consulta.
-
- Índices_recomendados
Esta sesión proporciona información sobre los índices recomendados en función de los predicados de la cláusula WHERE/ON para toda la carga de trabajo.
-
- Índices de cobertura recomendados
Aquí se enumerarán las recomendaciones de índices de cobertura aplicables a la carga de trabajo de la consulta.
Función asesora en la gestión de sesiones
La función de gestión de sesiones permite a los usuarios configurar por adelantado el asesor de índices para la carga de trabajo de la consulta entrante en los siguientes pasos.
-
- Definir las consultas de interés con propiedades específicas.
- Inicializar una sesión para supervisar y recopilar la carga de trabajo de consulta que se ejecuta en un clúster durante un período de tiempo.
- Invocar al asesor de índices para que realice un análisis posterior asíncrono de la carga de trabajo de consulta recopilada.
- Extraer y procesar las recomendaciones de índices una vez finalizado todo el proceso.
Sintaxis de uso:
1. ASESOR( { "acción" : "inicio",
"perfil": "john",
"respuesta" : "3s",
"duración" : "1m" ,
"query_count" : 200 } )
-
- "acción": usuarios que deben configurarse para que la sesión continúe: "iniciar", "detener", "obtener", "listar", "purgar", "abortar".
- "profile"(opcional) - el perfil de usuario especificado cuya consulta será de interés. Recogerá las consultas ejecutadas por cualquiera si no se establece.
- "response"(opcional) - el umbral de tiempo establecido para que la consulta se ejecute más de, por defecto es 0s.
- "duration"(obligatorio) - cuánto tiempo debe estar funcionando la sesión para recoger la consulta. Las unidades de tiempo válidas son "ns", "us" (o "µs"), "ms", "s", "m", "h".
- "query_count"(opcional) - El límite superior para el número de consultas que recogerá la sesión. El límite de consultas es 4000 por nodo de consulta. Si los usuarios esperan recopilar más que eso, necesitan modificar la configuración global antes de inicializar la sesión por:
“curl http://localhost:port/admin/settings -d '{"completed-limit":10000}' -u usuario:contraseña"
Una vez que la sesión se haya inicializado correctamente, se devolverá un nombre de sesión único como referencia, tal y como se muestra a continuación, en al mismo tiempo, se programará una tarea asíncrona de invocación al asesor de índices para realizar el análisis, que se ejecutará inmediatamente después de la finalización de la recopilación de la carga de trabajo.
1 2 3 4 5 6 7 |
[ { "$1": { "sesión": "06fcdefe-f864-48f5-a79b-b2f3345a6745" } } ] |
2. ASESOR( { "acción" : "obtener",
"sesión": “06fcdefe-f864-48f5-a79b-b2f3345a6745” } )
Una vez finalizado el proceso de análisis, el usuario puede ejecutar otra función advisor() para recuperar los resultados de recomendación de índices utilizando el nombre de sesión correspondiente.
3. ASESOR( { "acción" : "purgar",
"sesión": “06fcdefe-f864-48f5-a79b-b2f3345a6745” } )
Cuando el índice que recomienda resultados para una sesión concreta ya no es necesario, el usuario puede optar por purgarlo para ahorrar espacio.
La sesión menos reciente también se vaciará automáticamente una vez alcanzada la capacidad de la caché.
4. ASESOR({ "acción": "lista",
"status": "completado"})
Esta función puede proporciona la lista de sesiones activas, sesiones completadas y todas las sesiones existentes. La entrada "estado" puede ser "activo", "finalizado" o "todos".
La información de salida procede de system:tasks_cache. Veamos un ejemplo para comprender la información relevante sobre Index Advisor:
-
- clase: esta tarea procede del asesor de índices.
- retraso: cuánto durará la fase de recogida de consultas.
- name: nombre de la sesión igual al anterior.
- estado: el estado de la sesión: ["completada", "programada", "en ejecución"].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[ { "$1": [ { "tasks_cache": { "clase": "asesor", "retraso": "1m0s", "id": "ea673d76-086f-5f27-86b2-9b016f56f2a0", "nombre": "<span style="fuente-peso: 400;">06fcdefe-f864-48f5-a79b-b2f3345a6745<\/span>", "nodo": "127.0.0.1:8091", "resultados": [ {} ], "startTime": "2019-07-23 16:11:13.616100068 -0700 PDT m=+96637.000928100", "estado": "completado", "stopTime": "2019-07-23 16:11:14.186697742 -0700 PDT m=+96637.571525466", "subClase": "analizar", "submitTime": "2019-07-23 16:10:13.615964874 -0700 PDT m=+96577.000792768" } } ] } ] |
5. ASESOR( { "acción" : "detener",
"sesión": “06fcdefe-f864-48f5-a79b-b2f3345a6745” } )
El usuario puede dejar de recoger consultas y adelantar el análisis del índice para que se ejecute inmediatamente.
6. ASESOR( { "acción" : "abortar",
"sesión": “06fcdefe-f864-48f5-a79b-b2f3345a6745” } )
Los usuarios también pueden cancelar una sesión sin ejecutar el análisis.
Resumen
La función Advisor funciona con una sola consulta y con varias consultas, y proporciona información sobre los índices utilizados actualmente, los índices recomendados y los índices de cobertura recomendados para toda la carga de trabajo de la consulta.
La gestión de sesiones del asesor permite a los usuarios crear una sesión para recopilar las consultas que cumplan los requisitos especificados durante un periodo de tiempo e invocar al asesor de índices para que les proporcione recomendaciones.
Como hay mucho margen de mejora en la funcionalidad y el rendimiento de ambas funciones, seguiremos explorando y recibiendo comentarios para optimizar el diseño en el próximo paso.