Aplique os métodos a seguir para acelerar a consulta e análise de logs no Simple Log Service.
Aumentar o número de shards ou ativar o Dedicated SQL
Aumente o número de shards para melhorar os recursos de leitura e gravação de dados. No entanto, esse método entra em vigor apenas para dados incrementais. Shards são recursos computacionais. A velocidade de cálculo aumenta com base no número de shards. Verifique se o número de entradas de dados varridas por shard não excede 50 milhões. Divida um shard para aumentar o número de shards. Para mais informações, consulte Dividir shard. Para mais informações sobre o faturamento de shards, consulte Exemplos de faturamento de shards ativos com base nos métodos de faturamento.
O Dedicated SQL oferece suporte a maior concorrência para análise e a varreduras de dados maiores.
Reduzir o intervalo de tempo e o volume de dados
Um intervalo de tempo longo desacelera a operação de consulta.
Para acelerar a velocidade do cálculo, reduza o intervalo de tempo da operação de consulta.
Um grande volume de dados desacelera a operação de consulta.
Reduza o volume de dados da operação de consulta.
Repetir consultas
Se os resultados da consulta forem imprecisos, repita a consulta dos dados. A cada operação de consulta, o mecanismo de aceleração subjacente analisa os resultados já existentes. Após repetir as consultas, o sistema retorna resultados mais precisos.
Otimizar instruções analíticas
Uma instrução de consulta demorada apresenta as seguintes características:
A cláusula GROUP BY agrupa os resultados da análise com base em uma ou mais colunas do tipo string.
A cláusula GROUP BY agrupa os resultados da análise com base em mais de cinco colunas.
A instrução inclui operações que geram strings.
Use os seguintes métodos para otimizar instruções analíticas:
Não inclua operações que geram strings.
Por exemplo, usar a função date_format para gerar um timestamp em um formato específico reduz a eficiência da consulta. Use a função date_trunc ou time_series para gerar um timestamp. Exemplo:
* | select date_format(from_unixtime(__time__) , '%H_%i') as t, count(1) group by tNão agrupe os resultados da análise com base em uma ou mais colunas do tipo string.
Por exemplo, ao usar a cláusula GROUP BY para agrupar os resultados da análise com base em colunas do tipo string, a carga de cálculo de hash é elevada. A carga de cálculo de hash representa mais de 50% da carga total de cálculo. Exemplos:
Instrução de consulta eficiente
* | select count(1) as pv , from_unixtime(__time__-__time__%3600) as time group by __time__-__time__%3600Instrução de consulta ineficiente
* | select count(1) as pv , date_trunc('hour',__time__) as time group by time
As duas instruções de consulta calculam o número de logs por hora. A segunda instrução converte os timestamps em strings e agrupa os resultados da análise com base nas strings. Por exemplo, 2021-12-12 00:00:00 é um timestamp no formato de string. A primeira instrução obtém os timestamps de hora em hora, agrupa os resultados da análise com base nos timestamps e depois converte-os em strings.
Para agrupar os resultados da análise com base em várias colunas, posicione o campo com maior número de valores antes do campo com menor número de valores.
Por exemplo, se o número de valores de um campo específico é 13 e o número de valores do campo uid é 100 milhões, posicione o campo uid antes do campo específico na cláusula GROUP BY. Exemplos:
Instrução de consulta eficiente
* | select province,uid,count(1) group by uid,provinceInstrução de consulta ineficiente
* | select province,uid,count(1) group by province,uid
Use funções aproximadas.
Funções aproximadas oferecem melhor desempenho do que funções exatas. Essas funções sacrificam a precisão em favor da velocidade. Exemplos:
Instrução de consulta eficiente
* |select approx_distinct(ip)Instrução de consulta ineficiente
* | select count(distinct(ip))
Use múltiplas funções de agregação distinct em cenários de baixa cardinalidade.
Múltiplas operações distinct exigem copiar os dados brutos várias vezes, o que gera alta sobrecarga de rede. Para otimizar, ative o switch de sessão
enable_opt_distinct_aggs. Por exemplo:Instrução eficiente de consulta e análise
* | select count(1), count(distinct projectId), count(distinct logstore) from logInstrução ineficiente de consulta e análise
* | set session enable_opt_distinct_aggs=true; select count(1), count(distinct projectId), count(distinct logstore) from log
Especifique apenas as colunas desejadas em uma instrução analítica. Não consulte todas as colunas.
Em uma instrução analítica, consulte apenas as colunas necessárias para o cálculo. Para consultar todas as colunas, use a sintaxe de pesquisa. Exemplos:
Instrução de consulta eficiente
* |select a,b cInstrução de consulta ineficiente
* |select *
Coloque as colunas não usadas para agrupamento em uma função de agregação.
Por exemplo, os valores das colunas userid e username devem corresponder entre si. Basta especificar a coluna userid na cláusula GROUP BY para agrupar os dados. Exemplos:
Instrução de consulta eficiente
* | select userid, arbitrary(username), count(1) group by useridInstrução de consulta ineficiente
* | select userid, username, count(1) group by userid,username
Não use a cláusula IN.
Não use a cláusula IN em uma instrução analítica. Use a cláusula OR em uma instrução de pesquisa. Exemplos:
Instruções rápidas de consulta e análise
key: a or key: b or key: c | select count(1)Instrução de consulta ineficiente
* | select count(1) where key in ('a','b')