Visão geral
Como o segundo recurso do Index Advisor lançado no servidor Couchbase 6.5 (Developer Preview), a função Advisor amplia o escopo do aconselhamento em uma única consulta para fornecer recomendações de índice para a carga de trabalho da consulta e suporte no tratamento da sessão. Neste artigo, faremos uma breve análise de como ele funciona dessas duas maneiras diferentes.
Função de consultor sobre carga de trabalho
A função Advisor funciona nas seguintes etapas:
-
- Tome como entrada uma única consulta ou uma carga de trabalho de consulta que consista em várias consultas.
- Processar cada consulta individual exclusiva com recomendação de índice.
- Mesclar e gerar os índices atuais/recomendados para toda a carga de trabalho.
Sintaxe:
SELECT ADVISOR("query")
SELECT ADVISOR(["consulta1", "consulta2", "consulta3″...])
O exemplo abaixo mostra o cenário em que a carga de trabalho da consulta é de system:completed_requests:
|
1 2 3 |
SELECIONAR CONSULTOR(( SELECIONAR RAW declaração DE sistema:completed_requests)); |
|
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 `travel-sample`(`type`)", "declarações": [ { "run_count": 2, "declaração": "select * from `travel-sample` where type is not null" } ] }, { "índice": "CREATE PRIMARY INDEX def_primary ON `travel-sample`", "declarações": [ { "run_count": 1, "declaração": "select id from `travel-sample` where id < 10" } ] } ], "recommended_covering_indexes" (índices de cobertura recomendados): [ { "índice": "CREATE INDEX adv_id ON `travel-sample`(`id`)", "declarações": [ { "run_count": 1, "declaração": "select id from `travel-sample` where id < 10" } ] } ], "recommended_indexes" (índices recomendados): [ { "índice": "CREATE INDEX adv_id ON `travel-sample`(`id`)", "declarações": [ { "run_count": 1, "declaração": "select id from `travel-sample` where id < 10" } ] } ] } } ] |
Semelhante ao comando ADVISE, a saída da função ADVISOR() consiste em três partes:
-
- Current_used_indexes
Essa sessão resume os índices usados atualmente com a lista correspondente de instruções de consulta e a contagem de execução de cada consulta.
-
- Índices recomendados
Esta sessão fornece informações sobre os índices recomendados com base em predicados na cláusula WHERE/ON para toda a carga de trabalho.
-
- Índices_de_cobertura recomendados
A recomendação do índice de cobertura que se aplica à carga de trabalho da consulta será listada aqui.
Função de consultor sobre o tratamento de sessões
A função de tratamento de sessão permite que os usuários configurem o consultor de índices com antecedência para a carga de trabalho da consulta recebida nas etapas a seguir.
-
- Defina as consultas de interesse com propriedades específicas.
- Inicialize uma sessão para monitorar e coletar a carga de trabalho de consulta em execução em um cluster por um período de tempo.
- Invoque o consultor de índice para realizar a análise da carga de trabalho da consulta coletada de forma assíncrona posteriormente.
- Extrair e processar as recomendações do índice após a conclusão de todo o processo.
Sintaxe de uso:
1. ADVISOR( { "action" : "start",
"profile": "john",
"resposta" : "3s",
"duração" : "1m" ,
"query_count" : 200 } )
-
- "action"- usuários a serem definidos para que a sessão prossiga: "start" (iniciar), "stop" (parar), "get" (obter), "list" (listar), "purge" (limpar), "abort" (abortar).
- "profile"(opcional) - o perfil de usuário especificado cuja consulta será de interesse. Se não for definido, coletará as consultas executadas por qualquer pessoa.
- "response" (opcional) - o limite de tempo definido para que a consulta seja executada por mais tempo; a configuração padrão é 0s.
- "duration" (obrigatório) - por quanto tempo a sessão deve estar em execução para coletar a consulta. As unidades de tempo válidas são "ns", "us" (ou "µs"), "ms", "s", "m", "h".
- "query_count"(opcional) - O limite superior para o número de consultas que a sessão coletará. O query_limit é 4000 por nó de consulta. Se os usuários esperam coletar mais do que isso, eles precisam modificar a configuração global antes de inicializar a sessão:
“curl http://localhost:port/admin/settings -d '{"completed-limit":10000}' -u user:password"
Após a inicialização bem-sucedida da sessão, um nome de sessão exclusivo será retornado para referência, conforme mostrado abaixo, em Ao mesmo tempo, uma tarefa assíncrona de invocar o consultor de índices para fazer a análise será programada para ser executada imediatamente após a conclusão da coleta da carga de trabalho.
|
1 2 3 4 5 6 7 |
[ { "$1": { "sessão": "06fcdefe-f864-48f5-a79b-b2f3345a6745" } } ] |
2. ADVISOR( { "action" : "get",
"session": “06fcdefe-f864-48f5-a79b-b2f3345a6745” } )
Após a conclusão do processo de análise, o usuário pode executar outra função advisor() para recuperar os resultados da recomendação de índice usando o nome da sessão correspondente.
3. ADVISOR( { "action" : "purge",
"session": “06fcdefe-f864-48f5-a79b-b2f3345a6745” } )
Quando o índice que recomenda resultados para uma determinada sessão não for mais necessário, o usuário poderá optar por eliminá-lo para economizar espaço.
A sessão menos recente também será liberada automaticamente quando atingir a capacidade do cache.
4. ADVISOR({ "action" (ação): "list",
"status": "completed"})
Essa função pode fornecem a lista de sessões ativas no momento, sessões concluídas no momento e todas as sessões existentes. A entrada para "status" pode ser uma das opções "active", "completed" e "all".
As informações de saída são de system:tasks_cache. Vamos dar um exemplo para entender as informações relevantes sobre o Index Advisor:
-
- classe: essa tarefa vem do consultor de índices.
- delay: quanto tempo durará a fase de coleta de consultas.
- name: nome da sessão igual ao anterior.
- estado: o status da sessão: ["completed", "schedule", "running"].
|
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": { "classe": "consultor", "delay" (atraso): "1m0s", "id": "ea673d76-086f-5f27-86b2-9b016f56f2a0", "name" (nome): "<span style="fonte-peso: 400;">06fcdefe-f864-48f5-a79b-b2f3345a6745<\/span>", "nó": "127.0.0.1:8091", "resultados": [ {} ], "startTime": "2019-07-23 16:11:13.616100068 -0700 PDT m=+96637.000928100", "estado": "concluído", "stopTime": "2019-07-23 16:11:14.186697742 -0700 PDT m=+96637.571525466", "subClass": "analisar", "submitTime": "2019-07-23 16:10:13.615964874 -0700 PDT m=+96577.000792768" } } ] } ] |
5. ADVISOR( { "action" : "stop",
"session": “06fcdefe-f864-48f5-a79b-b2f3345a6745” } )
O usuário pode interromper antecipadamente a coleta de consultas e antecipar a análise do índice para execução imediata.
6. ADVISOR( { "ação" : "abortar",
"session": “06fcdefe-f864-48f5-a79b-b2f3345a6745” } )
Os usuários também podem cancelar uma sessão sem executar a análise.
Resumo
A função Advisor funciona com uma única consulta e com várias consultas e fornece informações sobre os índices usados atualmente, os índices recomendados e os índices de cobertura recomendados para toda a carga de trabalho da consulta.
O manuseio da sessão do consultor permite que os usuários criem uma sessão para coletar as consultas que atendem aos requisitos especificados por um período de tempo e invocar o consultor de índice para fornecer recomendações para elas.
Como há muito espaço para melhorias na funcionalidade e no desempenho de ambas as funções, continuaremos a explorar e receber feedbacks para otimizar o design na próxima etapa.