Otimizar o desempenho de uma solução de Pesquisa de IA do Azure

Concluído

O desempenho das suas soluções de pesquisa pode ser afetado pelo tamanho e complexidade dos seus índices. Você também precisa saber como escrever consultas eficientes para pesquisá-las e escolher a camada de serviço certa.

Aqui, você explorará todas essas dimensões e verá as etapas que pode tomar para melhorar o desempenho da sua solução de pesquisa.

Meça o desempenho da sua pesquisa atual

Você não pode otimizar quando não sabe o desempenho do seu serviço de pesquisa. Crie um benchmark de desempenho de linha de base para que você possa validar as melhorias feitas, mas também possa verificar se há alguma degradação no desempenho ao longo do tempo.

Para começar, habilite o log de diagnóstico usando o Log Analytics:

  • No portal do Azure, selecione Configurações de diagnóstico.
  • Selecione + Adicionar configurações de diagnóstico.

Screenshot showing how to add diagnostics to an Azure AI Search service.

  • Dê um nome à sua configuração de diagnóstico.
  • Selecione allLogs e AllMetrics.
  • Selecione Enviar para o espaço de trabalho do Log Analytics.
  • Escolha ou crie seu espaço de trabalho do Log Analytics.

Screenshot of the diagnostic settings screen with all the options selected.

É importante capturar essas informações de diagnóstico no nível do serviço de pesquisa. Como há vários lugares onde seus usuários finais ou aplicativos podem ver problemas de desempenho.

A diagram showing all the possible performance bottlenecks when searching. From network latency, app service performance, or AI Search processing the query.

Se conseguir provar que o seu serviço de pesquisa está a ter um bom desempenho, pode eliminá-lo dos possíveis fatores se tiver problemas de desempenho.

Verifique se o seu serviço de pesquisa está limitado

As pesquisas e os índices do Azure AI Search podem ser limitados. Se seus usuários ou aplicativos estiverem tendo suas pesquisas limitadas, elas serão capturadas no Log Analytics com uma resposta HTTP 503. Se seus índices estiverem sendo limitados, eles aparecerão como 207 respostas HTTP.

Essa consulta que você pode executar em relação aos logs do serviço de pesquisa mostra se o serviço de pesquisa está sendo limitado.

A screenshot of the Azure Search Service logs query for HTTP responses.

No portal do Azure, em Monitoramento, selecione Logs. Na guia Nova Consulta 1, você usaria esta consulta:

AzureDiagnostics
| where TimeGenerated > ago(7d)
| summarize count() by resultSignature_d 
| render barchart 

Você executaria o comando para ver um gráfico de barras das respostas HTTP dos serviços de pesquisa. No texto acima, você pode ver que houve várias 503 respostas.

Verificar o desempenho de consultas individuais

A melhor maneira de testar o desempenho de consultas individuais é com uma ferramenta de cliente como o Postman. Você pode usar qualquer ferramenta que mostrará os cabeçalhos na resposta a uma consulta. O Azure AI Search sempre retornará um valor de 'tempo decorrido' de quanto tempo o serviço levou para concluir a consulta.

Screenshot of Postman showing the elapsed time and total round trip time highlighted.

Se você quiser saber quanto tempo levaria para enviar e, em seguida, receber a resposta do cliente, subtraia o tempo decorrido do total de ida e volta. No acima, isso seria 125 ms - 21 ms dando-lhe 104 ms.

Otimize o tamanho e o esquema do índice

O desempenho das consultas de pesquisa está diretamente ligado ao tamanho e à complexidade dos índices. Quanto menores e mais otimizados forem seus índices, a rápida Pesquisa de IA do Azure poderá responder a consultas. Aqui estão algumas dicas que podem ajudar se você descobriu que tem problemas de desempenho em consultas individuais.

Se você não prestar atenção, os índices podem crescer ao longo do tempo. Deve verificar se todos os documentos do seu índice ainda são relevantes e precisam de ser pesquisáveis.

Se não for possível remover nenhum documento, será possível reduzir a complexidade do esquema? Você ainda precisa dos mesmos campos para ser pesquisável? Você ainda precisa de todos os conjuntos de habilidades com os quais iniciou o índice?

A screenshot of how to reduce the attributes on a field in a search index.

Considere revisar todos os atributos que você habilitou em cada campo. Por exemplo, adicionar suporte para filtros, facetas e classificação pode quadruplicar o armazenamento necessário para dar suporte ao índice.

Nota

Ter muitos atributos em um campo limita suas capacidades. Por exemplo, em um campo que é facial, filtrável e pesquisável, você só pode armazenar 16 KB. Enquanto um campo pesquisável pode conter até 16 MB de texto.

Se o seu índice tiver sido otimizado, mas o desempenho ainda não estiver onde precisa, você pode optar por aumentar ou expandir seu serviço de pesquisa.

Melhorar o desempenho das suas consultas

Se souber como funciona o serviço de pesquisa, pode ajustar as suas consultas para melhorar drasticamente o desempenho. Use esta lista de verificação para escrever consultas melhores:

  1. Especifique apenas os campos que você precisa pesquisar usando o parâmetro searchFields . Como mais campos exigem processamento extra.
  2. Retorne o menor número de campos que você precisa renderizar na página de resultados da pesquisa. O retorno de mais dados leva mais tempo.
  3. Tente evitar termos de pesquisa parciais, como pesquisa de prefixo ou expressões regulares. Esses tipos de pesquisas são mais caros computacionalmente.
  4. Evite usar valores de pulo altos. Isso força o mecanismo de pesquisa a recuperar e classificar volumes maiores de dados.
  5. Limite o uso de campos facialmente e filtráveis a dados de baixa cardinalidade.
  6. Use funções de pesquisa em vez de valores individuais em critérios de filtro. Por exemplo, você pode usar search.in(userid, '123,143,563,121',',') em vez de $filter=userid eq 123 or userid eq 143 or userid eq 563 or userid eq 121.

Se você aplicou todos os itens acima e ainda tem consultas individuais que não são executadas, você pode expandir seu índice. Dependendo da camada de serviço usada para criar sua solução de pesquisa, você pode adicionar até 12 partições. As partições são o armazenamento físico onde reside o índice. Por padrão, todos os novos índices de pesquisa são criados com uma única partição. Se você adicionar mais partições, o índice será armazenado entre elas. Por exemplo, se o índice for de 200 GB e você tiver quatro partições, cada partição conterá 50 GB do índice.

Adicionar partições extras pode ajudar no desempenho, pois o mecanismo de pesquisa pode ser executado em paralelo em cada partição. As melhores melhorias são observadas para consultas que retornam um grande número de documentos e consultas que usam facetas fornecendo contagens sobre um grande número de documentos. Este é um fator de quão computacionalmente caro é pontuar a relevância dos documentos.

Use a melhor camada de serviço para suas necessidades de pesquisa

Você viu que pode expandir as camadas de serviço adicionando mais partições. Você pode expandir com réplicas se precisar dimensionar devido a um aumento na carga. Você também pode expandir seu serviço de pesquisa usando uma camada mais alta.

Os dois índices de pesquisa acima têm 200 GB de tamanho. A camada S1 está usando oito partições e a camada S2 tem apenas duas. Ambos têm duas réplicas, e ambos custariam aproximadamente o mesmo. Escolher o melhor nível para sua solução de pesquisa exige que você saiba o tamanho total aproximado de armazenamento necessário. O maior índice suportado atualmente é de 12 partições na camada L2, oferecendo um total de 24 TB.

Escalão de serviço Type Armazenamento Réplicas Partições
F Gratuito 50 MB 1 1
N Básica 2 GB 3 1
S1 Standard 25 GB/Partição 12 12
S2 Standard 100 GB/Partição 12 12
S3 Standard 200 GB/Partição 12 12
S3HD Alta densidade 200 GB/Partição 12 3
L1 Armazenamento Otimizado 1 TB/partição 12 12
L2 Armazenamento Otimizado 2 TB/partição 12 12

Qual dos dois níveis acima no exemplo acima você acha que tem o melhor desempenho? Você viu que a expansão oferece benefícios de desempenho devido ao paralelismo. No entanto, os níveis mais altos também vêm com armazenamento premium, recursos de computação mais poderosos e memória extra. Escolher a segunda opção oferece uma infraestrutura mais poderosa e permite o crescimento futuro do índice. Infelizmente, qual camada tem o melhor desempenho depende do tamanho e da complexidade do seu índice e das consultas que você escreve para pesquisá-lo. Portanto, qualquer um dos dois poderia ser o melhor.

Planejar o crescimento futuro no uso de sua solução de pesquisa significa que você deve considerar as unidades de pesquisa. Uma unidade de pesquisa (SU) é o produto de réplicas e partições. Isso significa que o nível S1 acima está usando 16 SU e o nível S2 é apenas 4 SU. Os custos são semelhantes, uma vez que os níveis mais elevados cobram mais por SU.

Pense na necessidade de escalar sua solução de pesquisa por causa do aumento da carga. Adicionar outra réplica a ambos os níveis aumenta o nível S1 para 24 SU, mas o nível S2 sobe apenas para 6 SU.