Todos os produtos
Search
Central de documentação

:Análise de logs

Última atualização: Jul 04, 2026

PolarDB-X oferece recursos de auditoria e análise de SQL. O sistema coleta logs dos bancos de dados PolarDB-X e os envia ao Log Service para processamento e análise. Este tópico descreve as condições de consulta dos resultados da análise de logs e apresenta exemplos de uso.

Pré-requisitos

Ative os recursos de auditoria e análise de SQL na sua instância PolarDB-X. Para mais informações, consulte Ativar auditoria e análise de SQL.

Precauções

  • O Log Service armazena os logs de auditoria dos bancos de dados PolarDB-X implantados na mesma região em um único Logstore. Por padrão, a página de auditoria e análise de SQL usa o campo __topic__ como condição na caixa de pesquisa. Consultas baseadas nessa condição retornam apenas entradas de log de bancos de dados PolarDB-X da mesma região. Para refinar a busca, especifique as condições descritas neste tópico após o campo __topic__.

  • Na aba Raw Logs, clique em no valor de um campo para defini-lo como condição de busca.

    Por exemplo, clique em no valor Delete do campo sql_type para consultar todas as instruções DELETE.

Consultar instruções SQL específicas

Utilize os seguintes tipos de condições para consultar instruções SQL.

  • Palavra-chave como condição

    Use a condição abaixo para buscar instruções SQL que contenham a palavra-chave 200003.

    and sql: 200003
  • Campo integrado como condição

    Campos de índice integrados permitem filtrar instruções SQL específicas. Use a condição a seguir, por exemplo, para listar todas as instruções DROP.

    and sql_type:Drop
  • Combinação de múltiplas condições

    Combine várias condições usando os operadores AND ou OR. O exemplo abaixo busca instruções DELETE executadas na linha 200003.

    and sql: 200003 and sql_type: Delete
  • Expressões de comparação numérica como condições

    Os campos affect_rows e response_time aceitam valores numéricos e operadores de comparação. Adicione as condições abaixo para encontrar instruções DROP cujo valor do parâmetro response_time seja maior que 5 segundos.

    and response_time > 5 and sql_type: Drop

    Use as condições a seguir para identificar instruções SQL que excluíram mais de 100 linhas de dados.

    and affect_rows  > 100 and sql_type: Delete

Análise de execução de SQL

Execute as instruções abaixo para verificar o status de execução das consultas SQL.

  • Consultar a taxa de falhas em consultas SQL

    Use a instrução a seguir para obter a proporção de consultas SQL com falha.

    | SELECT sum(case when fail = 1 then 1 else 0 end) * 1.0 / count(1) as fail_ratio

    Nota

    Clique em Save as Alert no canto superior direito da página para criar regras de alerta conforme as necessidades do seu negócio.

  • Consultar o total de linhas afetadas por instruções SQL específicas

    A instrução abaixo retorna o número total de linhas processadas por comandos SELECT.

    and sql_type: Select | SELECT sum(affect_rows)
  • Consultar a distribuição de tipos de consultas SQL

    Utilize esta instrução para visualizar a distribuição dos diferentes tipos de consultas SQL.

    | SELECT  sql_type, count(sql) as times GROUP BY sql_type
  • Consultar a distribuição de endereços IP utilizados por um usuário

    Esta consulta lista a distribuição de endereços IP usados por cada usuário para enviar requisições.

    | SELECT  user, client_ip, count(sql) as times GROUP BY user, client_ip

Análise de desempenho

As instruções a seguir permitem consultar os resultados da análise de desempenho de SQL.

  • Consultar a duração média de execução de instruções SELECT

    Use este comando para calcular o tempo médio gasto pelo sistema na execução de instruções SELECT.

    and sql_type: Select | SELECT avg(response_time)
  • Consultar a distribuição de instruções SQL por duração de execução

    A condição abaixo agrupa as instruções SQL de acordo com faixas de tempo de execução.

    and response_time > 0 | select   case  when response_time <= 10 then '<=10ms'  when response_time > 10 and response_time <= 100 then '10~100ms'  when response_time > 100 and response_time <= 1000 then '100ms~1s'  when response_time > 1000 and response_time <= 10000  then '1s~10s'  when response_time > 10000 and response_time <= 60000  then '10s~1min'  else '>1min' end as latency_type,  count(1) as cnt group by latency_type order by latency_type DESC
    Nota

    No exemplo anterior, quatro intervalos de tempo são definidos pelo campo response_time: até 10 milissegundos, de 10 a 100 milissegundos (inclusive), de 100 milissegundos a 1 segundo (inclusive) e de 1 a 10 segundos (inclusive). Ajuste os valores do campo response_time para obter resultados mais detalhados.

  • Consultar as 50 principais instruções SQL lentas

    Execute a instrução abaixo para listar as 50 consultas SQL mais lentas.

    | SELECT date_format(from_unixtime(__time__), '%m/%d %H:%i:%s') as time, user, client_ip, client_port, sql_type, affect_rows, response_time, sql ORDER BY  response_time desc LIMIT 50

  • Consultar os 10 principais modelos SQL que mais consumiram recursos

    Na maioria das aplicações, as instruções SQL são geradas dinamicamente a partir de modelos, variando apenas os valores dos parâmetros. Utilize a consulta abaixo para identificar os 10 modelos SQL que mais consumiram recursos:

    | SELECT sql_code as "Template ID", round(total_time * 1.0 /sum(total_time) over() * 100, 2) as "Execution duration ratio (%)" ,execute_times as "Number of queries", round(avg_time) as "Average execution duration",round(avg_rows) as "Average number of operated rows", CASE WHEN length(sql) > 200 THEN concat(substr(sql, 1, 200), '......') ELSE trim(lpad(sql, 200, ' ')) end as "Sample SQL" FROM (SELECT sql_code, count(1) as execute_times, sum(response_time) as total_time, avg(response_time) as avg_time, avg(affect_rows) as avg_rows, arbitrary(sql) as sql FROM log GROUP BY sql_code) ORDER BY "Execution duration ratio (%)" desc limit 10

    O resultado inclui detalhes como o ID de cada modelo SQL, a proporção do tempo de execução das instruções geradas por esse modelo em relação ao tempo total, a quantidade de instruções geradas, a duração média de execução, a média de linhas afetadas e um exemplo de instrução SQL do modelo.

    Nota

    Neste exemplo, os modelos SQL são classificados pela proporção do tempo de execução. Conforme a necessidade do seu negócio, ordene-os pela duração média de execução ou pela quantidade de instruções SQL.

  • Consultar a duração média de execução de transações

    Nos logs de instruções SQL executadas na mesma transação, os valores do parâmetro trace_id compartilham o mesmo prefixo, com sufixos no formato '-' + Serial number. Para instruções fora de transações, o valor de trace_id não contém '-'. Execute a instrução abaixo para analisar o desempenho de consultas no processamento de transações.

    Nota

    A análise de transações tem eficiência menor que outras operações de consulta, pois o sistema precisa verificar os prefixos das instruções SQL.

    • Consultar a duração média de execução de transações

      Use a instrução a seguir para calcular o tempo médio gasto pelo sistema na execução de uma transação.

       | SELECT  sum(response_time) / COUNT(DISTINCT substr(trace_id, 1, strpos(trace_id, '-') - 1)) where strpos(trace_id, '-') > 0
    • Consultar as 10 transações mais lentas

      Esta consulta identifica as transações mais lentas com base na duração da execução.

      | SELECT substr(trace_id, 1, strpos(trace_id, '-') - 1) as "Transaction ID" , sum(response_time) as "Execution duration" where strpos(trace_id, '-') > 0 GROUP BY substr(trace_id, 1, strpos(trace_id, '-') - 1) ORDER BY "Execution duration" DESC LIMIT 10

      Em seguida, utilize o ID da transação para consultar as instruções SQL executadas nessa transação lenta. Isso ajuda a identificar a causa raiz da lentidão.

       and trace_id: db3226a20402000*
    • Consultar as 10 transações que afetaram o maior número de linhas

      Execute o comando abaixo para listar as 10 transações que operaram sobre a maior quantidade de linhas.

      | SELECT substr(trace_id, 1, strpos(trace_id, '-') - 1) as "Transaction ID" , sum(affect_rows) as "Operated rows" where strpos(trace_id, '-') > 0 GROUP BY substr(trace_id, 1, strpos(trace_id, '-') - 1) ORDER BY "Operated rows" DESC LIMIT 10

Análise de segurança de SQL

Utilize as condições abaixo para consultar resultados da análise de segurança.

  • Consultar a distribuição de falhas de SQL por tipo

    A condição a seguir permite visualizar a distribuição de consultas SQL com falha agrupadas por tipo.

    and fail > 0 | select sql_type, count(1) as "number of failures" group by sql_type
  • Consultar instruções SQL de alto risco

    Instruções DROP e TRUNCATE são consideradas de alto risco no PolarDB-X. Defina regras personalizadas para identificar instruções de alto risco conforme as necessidades do seu negócio.

    Use a condição abaixo para buscar instruções DROP ou TRUNCATE.

    and sql_type: Drop OR sql_type: Truncate
  • Consultar instruções DELETE que removem dados de um grande número de linhas

    Esta condição identifica instruções SQL usadas para excluir dados de mais de 100 linhas.

    and affect_rows > 100 and sql_type: Delete | SELECT date_format(from_unixtime(__time__), '%m/%d %H:%i:%s') as time, user, client_ip, client_port, affect_rows, sql ORDER BY  affect_rows desc LIMIT 50