O SQL Trace registra planos de execução e estatísticas de tempo de execução das instruções SQL no cluster PolarDB for MySQL. Use esse recurso para detectar regressões de desempenho causadas por alterações nos planos de execução e identificar as principais instruções SQL que mais consomem recursos.
Pré-requisitos
Antes de começar, verifique se o cluster executa uma das seguintes versões:
PolarDB for MySQL 8.0.1, versão de revisão 8.0.1.1.30 ou posterior
PolarDB for MySQL 8.0.2, versão de revisão 8.0.2.2.12 ou posterior
Para verificar a versão do cluster, consulte Consultar a versão do mecanismo.
Limitações
O SQL Trace não rastreia instruções relacionadas a contas: CREATE USER, DROP USER e GRANT.
Parâmetros
|
Parâmetro |
Descrição |
|
|
Modo de rastreamento. Valores válidos: OFF (padrão), DEMAND, ALL, SLOW_QUERY. O modo SLOW_QUERY exige a versão de revisão 8.0.1.1.34 ou posterior no PolarDB for MySQL 8.0.1. |
|
|
Memória máxima alocada para o SQL Sharing, componente subjacente do SQL Trace. Valores válidos: 8388608–1073741824 bytes. Padrão: 134217728 bytes. |
|
|
Tempo de retenção de um plano de execução rastreado sem reutilização. Se nenhuma instrução subsequente executar o mesmo plano dentro dessa janela, o sistema removerá o plano. Valores válidos: 0–18446744073709551615 segundos. Padrão: 604800 segundos (7 dias). |
Escolha um modo de rastreamento
Selecione o modo conforme o que deseja monitorar:
|
Modo |
O que é rastreado |
Quando usar |
|
OFF |
Nenhum dado (padrão) |
Quando o SQL Trace estiver inativo |
|
DEMAND |
Instruções SQL específicas adicionadas manualmente |
Para focar em consultas lentas ou críticas já conhecidas |
|
ALL |
Todas as instruções SQL |
Na investigação de problemas de desempenho desconhecidos em todo o cluster |
|
SLOW_QUERY |
Consultas que excedem o limiar de consulta lenta |
Recomendado quando o foco for apenas em consultas lentas |
Com base em testes do Sysbench (oltp_read_onlyeoltp_read_write) com 2.000 tabelas de 10.000 linhas cada, em clusters de 4 núcleos/8 GB e 8 núcleos/32 GB, o modo ALL reduz o desempenho do banco de dados em menos de 3%. O SQL Trace usa designs livres de bloqueio para minimizar o impacto sob alta concorrência.
Rastreie instruções SQL
Rastrear todas as instruções SQL
Defina loose_sql_trace_type como ALL.
Rastrear instruções SQL específicas
Defina
loose_sql_trace_typecomo DEMAND.Adicione as instruções a rastrear usando dbms_sql.add_trace.
Visualize estatísticas de execução
Todas as instruções rastreadas ficam armazenadas na tabela information_schema.sql_sharing. Consulte essa tabela para visualizar o plano de execução e as estatísticas de qualquer instrução rastreada.
Obter o plano de execução de uma instrução específica
SELECT * FROM information_schema.sql_sharing WHERE sql_id = polar_sql_id('select * from t');
Encontrar as principais instruções SQL
Use estas consultas para identificar as instruções que exigem maior atenção. Comece pelo tempo total de execução para encontrar o maior custo geral e, em seguida, use as outras consultas para restringir as causas raiz.
Top 10 por tempo total de execução — identifica instruções com o maior custo cumulativo em todas as execuções:
SELECT * FROM information_schema.sql_sharing
WHERE TYPE = 'sql'
ORDER BY SUM_EXEC_TIME DESC
LIMIT 10;
Top 10 por tempo médio de execução — aponta instruções lentas por chamada individual, mesmo que executadas com pouca frequência:
SELECT * FROM information_schema.sql_sharing
WHERE TYPE = 'sql'
ORDER BY SUM_EXEC_TIME / EXECUTIONS DESC
LIMIT 10;
Top 10 por total de linhas verificadas — destaca instruções que causam mais E/S, o que frequentemente indica índices ausentes ou planos de consulta ineficientes:
SELECT * FROM information_schema.sql_sharing
WHERE TYPE = 'sql'
ORDER BY SUM_ROWS_EXAMINED DESC
LIMIT 10;
Gerencie instruções rastreadas e estatísticas
Remover instruções rastreadas
Para interromper o rastreamento de instruções específicas adicionadas no modo DEMAND:
Remova pelo texto da instrução: use dbms_sql.delete_trace.
Remova pelo ID do SQL: use dbms_sql.delete_trace_by_sqlid.
Redefinir estatísticas
Para redefinir todas as estatísticas em information_schema.sql_sharing, use dbms_sql.reset_trace_stats.
Limpar e recarregar
Para limpar todos os dados de information_schema.sql_sharing, use dbms_sql.flush_trace.
Para recarregar modelos SQL de mysql.sql_sharing e retomar a coleta de estatísticas das instruções adicionadas anteriormente, use dbms_sql.reload_trace.