Aplique os métodos a seguir para acelerar a consulta e a análise de logs no Simple Log Service.
Aumentar o número de shards ou ative o Dedicated SQL
Aumente o número de shards para melhorar as capacidades de leitura e gravação de dados. Esse método, contudo, aplica-se apenas a dados incrementais. Como shards são recursos de computação, a velocidade de cálculo aumenta conforme a quantidade disponível. Garanta que o número de entradas de dados verificadas por shard não ultrapasse 50 milhões. Divida um shard para aumentar o total disponível. Para mais informações, consulte Split shard. Para detalhes sobre o faturamento de shards, veja Billing examples of active shards based on billing methods.
O Dedicated SQL oferece suporte a maior concorrência para análise e verificação de volumes maiores de dados.
Reduzir o intervalo de tempo e o volume de dados
-
Intervalos de tempo longos tornam a consulta mais lenta.
Diminua o intervalo de tempo da consulta para acelerar o cálculo.
-
Grandes volumes de dados também reduzem o desempenho da consulta.
Reduza o volume de dados processados na consulta.
Repetir consultas
Se os resultados da consulta forem imprecisos, repita a operação. A cada execução, o mecanismo de aceleração subjacente reanalisa os resultados existentes. Após algumas repetições, o sistema retorna resultados mais precisos.
Otimizar instruções analíticas
Instruções de consulta lentas geralmente apresentam as seguintes características:
Uso da cláusula GROUP BY para agrupar resultados com base em uma ou mais colunas do tipo string.
Uso da cláusula GROUP BY para agrupar resultados com base em mais de cinco colunas.
Inclusão de operações que geram strings na instrução.
Use os métodos abaixo para otimizar instruções analíticas:
-
Evite operações que gerem strings.
Por exemplo, usar a função date_format para gerar um timestamp em formato específico reduz a eficiência da consulta. Prefira as funções date_trunc ou time_series. Exemplo:
* | select date_format(from_unixtime(__time__) , '%H_%i') as t, count(1) group by t -
Não agrupe resultados com base em colunas do tipo string.
O uso da cláusula GROUP BY com colunas de string eleva a carga de cálculo de hash, que pode representar mais de 50% do esforço total de processamento. Exemplos:
-
Instrução de consulta eficiente
* | select count(1) as pv , from_unixtime(__time__-__time__%3600) as time group by __time__-__time__%3600 -
Instrução de consulta ineficiente
* | select count(1) as pv , date_trunc('hour',__time__) as time group by time
Ambas as instruções calculam o número de logs por hora. Na segunda, os timestamps são convertidos em strings antes do agrupamento (por exemplo, "2021-12-12 00:00:00" como string). Na primeira, obtêm-se os timestamps exatos da hora, agrupa-se com base neles e só então ocorre a conversão para string.
-
-
Ao agrupar resultados por múltiplas colunas, posicione campos com maior cardinalidade antes daqueles com menor quantidade de valores distintos.
Por exemplo, se um campo tem 13 valores únicos e o campo uid tem 100 milhões, coloque o campo uid antes do outro na cláusula GROUP BY. Exemplos:
-
Instrução de consulta eficiente
* | select province,uid,count(1) group by uid,province -
Instrução de consulta ineficiente
* | select province,uid,count(1) group by province,uid
-
-
Prefira funções aproximadas.
Funções aproximadas oferecem melhor desempenho que as exatas, pois trocam precisão por velocidade. Exemplos:
-
Instrução de consulta eficiente
* |select approx_distinct(ip) -
Instrução de consulta ineficiente
* | select count(distinct(ip))
-
-
Especifique apenas as colunas necessárias na instrução analítica e evite consultar todas.
Selecione somente as colunas exigidas para o cálculo. Caso precise de todas, use a sintaxe de busca. Exemplos:
-
Instrução de consulta eficiente
* |select a,b c -
Instrução de consulta ineficiente
* |select *
-
-
Inclua colunas não usadas no agrupamento dentro de funções de agregação.
Por exemplo, quando os valores das colunas userid e username devem corresponder entre si, especifique apenas a coluna userid na cláusula GROUP BY. Exemplos:
-
Instrução de consulta eficiente
* | select userid, arbitrary(username), count(1) group by userid -
Instrução de consulta ineficiente
* | select userid, username, count(1) group by userid,username
-
-
Evite a cláusula IN.
Não use a cláusula IN em instruções analíticas; prefira a cláusula OR na instrução de busca. Exemplos:
-
Instruções de consulta e análise rápidas
key: a or key: b or key: c | select count(1) -
Instrução de consulta ineficiente
* | select count(1) where key in ('a','b')
-