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
Deletedo camposql_typepara consultar todas as instruçõesDELETE.
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
ANDouOR. O exemplo abaixo busca instruções DELETE executadas na linha200003.and sql: 200003 and sql_type: Delete -
Expressões de comparação numérica como condições
Os campos
affect_rowseresponse_timeaceitam valores numéricos e operadores de comparação. Adicione as condições abaixo para encontrar instruções DROP cujo valor do parâmetroresponse_timeseja maior que 5 segundos.and response_time > 5 and sql_type: DropUse 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_ratioNotaClique 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 DESCNotaNo 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 camporesponse_timepara 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 10O 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.
NotaNeste 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_idcompartilham o mesmo prefixo, com sufixos no formato'-' + Serial number. Para instruções fora de transações, o valor detrace_idnão contém'-'. Execute a instrução abaixo para analisar o desempenho de consultas no processamento de transações.NotaA 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 10Em 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