Como desenvolvedores de aplicativos, seu foco principal é projetar as consultas mais eficientes para o seu aplicativo. Você quer garantir a integridade dos dados que o aplicativo envia para o banco de dados e criar as consultas mais eficientes para recuperar os dados necessários para o aplicativo. Em muitos casos, o desempenho do aplicativo é adiado para um estágio posterior do ciclo de desenvolvimento. Muitas vezes, isso é deixado para os especialistas em desempenho de banco de dados, que podem fornecer as recomendações para o design do índice, que também pode incluir a reescrita da consulta, a fim de atender aos requisitos de desempenho. No entanto, compreender o desempenho da consulta pode aumentar muito a produtividade e ajudar os desenvolvedores a buscar uma solução de melhor desempenho no início do ciclo de desenvolvimento.

Os fornecedores de banco de dados entendem esse desafio e os RDBMSs de classe empresarial incluem o recurso de ajuste de desempenho como parte de seus conjuntos de ferramentas de banco de dados.

O Couchbase N1QL Index Advisor, um novo recurso do Couchbase 6.5 (DP), agora fornece recomendações de índices GSI para instruções de consulta N1QL. Seu principal objetivo é recomendar o índice para otimizar o tempo de resposta da consulta. Isso permite que os desenvolvedores se tornem mais produtivos, pois podem criar o(s) índice(s) recomendado(s) e ver o desempenho da consulta no início do ciclo de desenvolvimento. Também permite que os DBAs melhorem o desempenho do sistema revisando periodicamente as consultas de execução lenta.

Você pode aprender a usar o Couchbase Index Advisor lendo o Entendendo o Index Advisor e Comece a usar o Index Advisor seções abaixo. As seções restantes fornecem mais detalhes sobre como o Index Advisor chega às recomendações, incluindo dicas sobre como usar o Index Advisor em solicitações concluídas e como identificar índices usados com pouca frequência.

Entendendo o Index Advisor

Desempenho do banco de dadosEmbora seja uma tarefa difícil de gerenciar bem, é um problema bem compreendido pelos fornecedores de bancos de dados. O advento do SaaS e do DBasS também significa que o desafio do desempenho do banco de dados é apenas parte do serviço e precisa ser automatizado em relação à sua capacidade de diagnosticar e corrigir o problema. Nossa equipe de desenvolvimento tem trabalhado arduamente para criar os blocos de construção para essa visão.

O Couchbase Index Advisor faz parte da construção N1QL ADVISE que permite que os desenvolvedores e DBAs gerenciem o aspecto de ajuste de desempenho de seus aplicativos. Para entender como o Index Advisor funciona, você precisa entender as principais técnicas de recuperação de dados na plataforma de dados do Couchbase:

  • Chave-valor - Um acesso rápido e direto aos dados para o serviço de dados quando as chaves estão disponíveis. Esse método de acesso não envolve o serviço de indexação do Couchbase.
  • Serviço de indexação (GSI) - Um serviço dimensionável que permite que os aplicativos executem consultas N1QL rápidas. O GSI aproveita uma arquitetura distribuída e armazena os índices em um conjunto independente de nós no cluster do Couchbase.
  • Pesquisa (FTS) - Um serviço de pesquisa de texto completo que oferece pesquisa por palavra-chave e pesquisa difusa. O FTS, como todos os serviços do Couchbase, é um serviço distribuído que pode ser configurado no cluster do Couchbase.

O N1QL Query aproveita todos os serviços acima para fornecer o resultado da consulta aos aplicativos. No entanto, o Index Advisor na versão 6.5 (DP) recomenda apenas os índices gerenciados pelo serviço Index (GSI). O Index Advisor não avalia a técnica de recuperação do serviço Data por meio de USE KEYS, nem o serviço Search (FTS) por meio da função N1QL SEARCH_QUERY() e SEARCH().

Comece a usar o Index Advisor

Como mencionei anteriormente, o Index Advisor é o primeiro de uma série de recursos que apresentamos para o ajuste de desempenho do banco de dados. O Index Advisor ajuda a identificar sistematicamente os índices que podem otimizar o desempenho do aplicativo e a garantir que os índices sejam criados usando a prática recomendada para a ordem das chaves. Na verdade, o Index Advisor pode oferecer recomendações mesmo quando você já tem índices em funcionamento para suas consultas.

Você pode começar a usar o N1QL Index Advisor usando:

N1QL - ADVISE [INDEX]

Índices atuais - A seção lista todos os índices existentes que o planejador de consultas usará para essa consulta. Ela também fornece informações adicionais sobre qualquer índice que o planejador de consultas use como índice de cobertura.

Índices recomendados - Esta seção lista todos os índices recomendados pelo Index Advisor. As recomendações de índice de cobertura são aquelas que permitiriam que a consulta funcionasse sem a busca adicional do serviço de dados. Já a seção de índices mostra apenas aqueles que ajudam com a cláusula de predicado. Observe que pode haver duplicação de informações nessas duas seções, mas onde o nome do índice seria idêntico e onde as chaves do índice são as mesmas.

Ele também fornece o motivo pelo qual recomendou os índices.

Usar o Advise no Query Workbench

Clique no botão Advise para obter a saída do Index Advisor para a consulta.

O N1QL ADVISE oferece suporte a consultas para SELECT, DELETE, UPDATE e MERGE. Ele fornece recomendações de índices para:

  • Cláusula Predicate WHERE.
  • Cláusula ON de condição de união para união de índices, união ANSI, Index NEST, ANSI NEST e ANSI MERGE.
  • Índice de matriz para UNNEST e predicados de matriz na cláusula WHERE/ON.
  • Sub-Query quando usado na cláusula FROM.

Como funciona o Index Advisor

Usarei a seguinte abordagem para explicar como o Index Advisor funciona.

  1. Selecionarei um exemplo que tem as construções de consulta típicas (predicado, união, matriz, grupo por), que podem ser difíceis de adivinhar quais são os melhores índices para a consulta.
  2. Examine o plano de consulta para entender o que o otimizador faria com a consulta atual.
  3. Determinar manualmente quais índices devem ser criados para melhorar o desempenho da consulta. Isso se basearia no entendimento de um desenvolvedor de aplicativos típico sobre índices de campo de predicado e união.
  4. Em seguida, execute o Couchbase Index Advisor e compare suas recomendações com as que tínhamos em mente.
  5. Crie os índices recomendados.
  6. Revise o novo plano de consulta e avalie as alterações.
A consulta de exemplo

Essa consulta recupera o número de rotas de companhias aéreas de qualquer aeroporto da cidade de San Jose, EUA, que têm voos programados para o domingo.

O plano de consulta 

  1. A consulta usou cinco índices
    1. Três índices foram usados para os predicados no tipo de documento "aeroporto": "cidade", "tipo" e "faa".
    2. Um índice foi usado para o tipo de documento "route" no campo "sourceairport" para fins de união entre "route" e "airport". Nesse caso, foi usado o índice existente "def_route_src_dst_day" porque ele tem a chave principal "sourceairport".
    3. Um índice para o tipo de documento 'airline', que é o índice parcial padrão para 'type'.
  2. Duas uniões NestedLoop de documentos - "aeroporto" - "rota" e "rota" - "companhia aérea". Mas, além do índice 'def_route_src_dst_day' em 'route', não há outros índices para suportar o restante das uniões. Portanto, essas uniões não são eficientes.
  3. Houve também uma agregação final para contar o número de rotas por companhia aérea.
  4. A consulta foi concluída em 2,1s
Como podemos melhorar o desempenho da consulta?

  1. O documento "airport" tem dois predicados ("city" e "country") e um predicado de sabor em "type". Além disso, a coluna "faa" do aeroporto também é usada para a união com "route". Portanto, em vez de usar três índices separados, deve haver um índice parcial no documento "airport" para ("city", "country") [action_1]. O campo "airport.faa" também poderia se beneficiar com um índice separado ou parte do índice principal do aeroporto.
  2. O documento 'route' não tem predicados, mas tem uma união com 'airport' com o campo 'sourceairport'. Um índice nessa coluna deve ajudar na união, e já temos o índice 'def_route_src_dst_day' [action_2], portanto, nenhuma ação é necessária para essa união.
  3. O documento "route" também tem uma junção com "airline" no campo "airline". Portanto, devemos ter um índice para isso - documento 'route' ('airline') [action_3].
  4. O documento "airline" também não tem nenhum predicado, mas tem uma junção com "route" com o campo "iata". Portanto, é necessário outro índice no documento "airline" ("iata") [action_4].
  5. Temos um predicado na matriz route.schedule. Portanto, também precisamos de um índice para isso. 'route' document (DISTINCT ARRAY x.day FOR x in schedule END) [action_5].

Portanto, chegamos a cinco pontos de ação, que resultam em quatro índices adicionais para essa consulta. Vamos ver o que o Index Advisor recomenda.

Execute o Index Advisor para verificar o resultado

Seção Índices atuais

Isso é o mesmo que o plano nos forneceu. A consulta usa cinco índices.

Seção de índices recomendados - "Índices"

Esta seção lista todos os índices da perspectiva do predicado. Observe que JOIN tem campos ON, que também são tratados como predicados. Então, vamos revisar os índices recomendados.

  1. adv_country_faa_city_type ON amostra de viagem(país,faa,cidade) ONDE tipo = 'airport' - Com exceção da ordem das chaves, esse é o mesmo índice que identificamos em [action_1]. A ordem das chaves não é significativa aqui, pois todos esses predicados usam igualdade.
  2. adv_airline_sourceairport_DISTINCT_schedule_day_type ON amostra de viagem(companhia aérea,aeroporto de origemDISTINCT ARRAY x.day FOR x in schedule END) WHERE tipo = 'route' - O que o Index Advisor fez aqui foi combinar [action_2, action_3, action_5] em um único índice.
  3. adv_iata_type ON amostra de viagem(iata) ONDE tipo = 'airline' - Esse é o mesmo índice que identificamos em [action_4]

Seção de índices recomendados - "Cobrindo índices"

Esta seção lista todas as recomendações de índices de cobertura. Observe que Os índices de cobertura são aqueles usados para satisfazer uma consulta em um documento em que a execução não precisaria realizar uma busca adicional no serviço de dados.

  1. adv_faa_city_country_type_airportname_airportname ON amostra de viagem(país,faa,cidade,nome do aeroporto) ONDE tipo = 'airport' - O Index Advisor adicionou o campo route.airportname ao índice recomendado [adv_country_faa_city_type ON amostra de viagem(país,faa,cidade)]. Ao fazer isso, o serviço de consulta não precisaria buscar o documento de rota no serviço de dados para projetar o route.airportname
  2. adv_iata_type_name_name ON amostra de viagem(iata,nome) ONDE tipo = 'airline' - O Index Advisor adicionou o airline.name ao índice recomendado [adv_iata_type ON amostra de viagem(iata) ONDE tipo = 'airline']. Ao fazer isso, o serviço de consulta não precisaria buscar o documento da companhia aérea no serviço de dados para projetar o airline.name

Observação: O índice de cobertura reduz a necessidade de o serviço de consulta realizar buscas adicionais no serviço de dados, melhorando assim o desempenho da consulta. Mas o usuário precisa decidir se deve ou não criar índices de cobertura com base nas restrições específicas, como memória ou armazenamento do ambiente do usuário.

Criar todos os índices recomendados e revisar o novo plano de consulta

Para este exercício, decidi criar todos os índices recomendados usando índices de cobertura quando aplicável.

O plano de consulta depois de adicionar os índices recomendados
  1. A consulta agora usa os três novos índices recomendados pelo Index Advisor, em vez de cinco índices.
  2. Como criamos índices de cobertura, o serviço de consulta não precisa mais fazer nenhuma busca adicional no serviço de dados.
  3. A consulta agora foi concluída em 120 ms. Uma melhoria de 94%.

Use o Index Advisor para analisar a carga de trabalho

N1QL - ADVISOR( )

O Index Advisor também pode ser chamado com a função ADVISOR(). Ela permite que os usuários:
  1. Passe em várias consultas. SELECT ADVISOR("SELECT ...", "SELECT ..", "UPDATE...");
  2. Passe uma subconsulta que retorne os comandos N1QL reais. Como a consulta retorna uma estrutura de documento json, você precisará usar a palavra-chave RAW para garantir que somente os comandos N1QL reais sejam retornados.
Use ADVISOR() para identificar as consultas lentas, consultando as solicitações concluídas.

Identificar os índices ineficientes existentes

Mesmo quando você já tem índices para sua consulta, a execução do Index Advisor pode ajudar a identificar casos em que os índices existentes podem não ser os melhores índices, com base na orientação do Couchbase Index.

Considere este exemplo:

E que sua consulta pode ser executada sem nenhum problema com um índice abaixo:

Mas o índice recomendado para a consulta seria:

Isso ocorre porque o índice deve ter um desempenho melhor se as chaves seguirem a ordem da regra do tipo de predicado:

  • Regra 4. Menor que/entre/maior que.
  • Regra 6. Não nulo/não ausente/valorizado.
  • Regra 8. Sabor para índice parcial.

Convenção de nomenclatura de índice recomendada

O Index Advisor recomenda um índice com uma convenção de nomenclatura específica,

  • adv_field1_field2_field3...

Para índices de matriz, um sublinhado extra é adicionado ao final do índice da matriz para fazer a distinção:

  • adv_[DISTINCT/ALL]_campo1_campo1.2_campo1.2.3__campo2_campo3...

Recomenda-se que você mantenha a nomenclatura do índice conforme fornecida, pois isso permitirá que o Index Advisor reconheça os índices que ele recomendou anteriormente em comparação com os que foram criados por outros meios. Em atualizações futuras, o Index Advisor pode optar por recomendar a substituição de um índice, mas só o fará se o índice que ele procura substituir for um que tenha sido recomendado anteriormente.

Usar estatísticas de índice Tempo da última varredura conhecida

Seu banco de dados pode ter muitos índices para diferentes requisitos de consulta durante um período de tempo. Mas, à medida que os índices são acumulados em seu banco de dados, há a possibilidade de haver duplicatas ou índices criados de forma semelhante. Isso inclui índices que não estão mais em uso. Você pode consultar o valor "last_known_scan_time" do ponto de extremidade de repouso Index stats, para determinar os status dos seus índices e, em seguida, decidir se você deve eliminar o índice.

Resultados:

Resumo

Do ponto de vista da implementação de aplicativos, a necessidade de gerenciar índices não termina no final do processo de desenvolvimento, mas é um exercício contínuo. De fato, o gerenciamento de índices deve ter um ciclo de vida próprio. Isso se deve ao fato de que o volume e a forma dos dados podem mudar com o tempo, o que, consequentemente, pode exigir alterações nos índices existentes. Em alguns casos, a construção da consulta também pode precisar ser revisada. O consultor de índices, portanto, é uma parte essencial do gerenciamento do ciclo de vida do produto.

Alguns pontos importantes a serem observados sobre o Index Advisor a partir do Couchbase 6.5 (DP)

  • Tipo de índice - O Index Advisor recomenda apenas índices GSI. Ele não recomenda o índice primário nem o índice FTS.
  • Baseado em regras - Na implementação atual, o Index Advisor recomenda índices baseados em predicados, lista de projeção e ordem da coluna principal. Na verdade, ele se baseia na mesma regra usada pelo planejador de consultas. Assim como na otimização de banco de dados baseada em regras (RBO), o Index Advisor não leva em conta as estatísticas da distribuição de dados das colunas-chave. Por esse motivo, o usuário deve realizar uma avaliação de desempenho com os índices recomendados antes de implantá-los em um ambiente de produção.
  • Subconsulta - O Index Advisor funciona com subconsulta quando a consulta está apenas na cláusula FROM.
  • Índice de matriz com várias chaves - O Index Advisor recomendará apenas uma única chave para um índice de matriz, mesmo quando o predicado fizer referência a vários campos de matriz.
  • Índice de partição - O Index Advisor não inclui a cláusula de particionamento no índice de partição recomendado. criação de índices declarações.
  • Índices existentes - O Index Advisor não recomenda o redesenho de índices existentes, nem recomenda a eliminação de índices existentes. O usuário deve usar o tempo da última varredura do índice para tomar a decisão.

Recursos

Gostaríamos muito de saber se você gostou dos recursos da versão 6.5 e como ela beneficiará sua empresa no futuro. Compartilhe seu feedback por meio dos comentários ou na seção fórum.

 

Autor

Postado por Binh Le

Binh Le é gerente de produto principal do serviço de consulta do Couchbase. Antes da Couchbase, ele trabalhou na Oracle e liderou a equipe de gerenciamento de produtos para Sales Clould Analytics e CRM OnDemand. Binh é bacharel em Ciência da Computação pela Universidade de Brighton, no Reino Unido.

Um comentário

Deixar uma resposta