Listando (e encerrando) processos no banco de dados. (MySQL)

Overview
Neste artigo rápido e informativo, mergulhamos no mundo do gerenciamento de processos no MySQL. Aprenderemos a listar os processos ativos de forma detalhada, descobriremos como identificar quem está conectado e suas atividades e, mais importante, veremos como podemos interromper forçadamente esses processos quando necessário. É uma leitura essencial para quem deseja manter seu banco de dados rodando de forma suave e segura. Prepare-se para ganhar mais controle sobre seu banco de dados MySQL com estas dicas valiosas!
Neste post, mostro uma forma de listar os processos ativos em um banco MySQL e como encerrar forçadamente eles. Desta forma, você consegue verificar quem está conectado e o que eles estão executando.
O comando que lista os processos que estão abertos no MySQL tem duas formas:
- Tabela
- Lista
Se você estiver acessando o MySQL via terminal, recomendo que faça a consulta pelo “modo lista”.
Listando processos no formato TABELA
Listando processos no formato LISTA
Explicando as colunas deste comando
Nos dois formatos, você terá as seguintes informações:
- ID: Representa a identificação do processo no banco de dados;
- User: Usuário conectado no banco. Além dos usuários, pode exibir os seguintes valores:
- system user: Atividade que está sendo executada internamente em uma thread, pelo próprio MySQL. Neste caso, não possui informações na coluna Host (veja abaixo);
- unauthenticated user: Está ligada a uma thread que foi iniciada com um cliente (client), mas que ainda não foi autenticada;
- event_scheduler: Referente a threads de monitoramento agendado;
- Host: Hostname do cliente que está conectado. Geralmente são exibidos no formato hostname:porta;
- DB: Indica qual banco de dados foi selecionado pelo usuário. Exibe null se nenhum foi selecionado;
- Command: O tipo de comando que está sendo executado no momento. Não é a query em si, mas o tipo de comando, que pode ser um dos valores abaixo:
- Binlog Dump: Thread no servidor principal (master), indicando que logs binarios estão sendo enviados para um servidor secundario (slave);
- Change user: A thread está executando comando para troca de usuário;
- Close stmt: A thread está fechando um statement;
- Connect: Um servidor de replicação (slave) está conectado ao principal (master);
- Connect Out: Um servidor de replicação (slave) está se conectando ao principal (master);
- Create DB: A thread está executando um comando de criação de banco;
- Daemon: Indica que a thread está trabalhando internamente para o servidor e não está disponível para clients;
- Debug: Thread está gerando informações de debug;
- Delayed insert: Thread é um gerenciador de inserts com delay;
- Drop DB: A thread está executando um comando de remoção (drop) de banco;
- Error: Indica que a thread está com problema. O manual não explica muito este item, mas me parece bastante obvio. 🙂
- Execute: A thread está executando um comando (prepared statement);
- Fetch: A thread está recuperando os resultados de um comando (prepared statement). (Vem após o execute);
- Field List: A thread está recuperando informações referentes as colunas da tabela;
- Init DB: A thread está selecionando o banco de dados padrão;
- Kill: A thread está encerrando (matando) outra thread;
- Long Data: A thread está recuperando um volume grande de informações ao executar um comando (prepared statement);
- Ping: Thread está trabalhando em um ping que recebeu;
- Prepare: Thread está preparando um comando (statement) para execução;
- Processlist: A thread está providenciando as informações para o comando que mostrei logo acima;
- Query: A thread está executando um statement;
- Quit: Thread está sendo encerrada;
- Refresh: A thread está atualizando/renovando informações de tabelas, logs, caches, reiniciando variáveis de status ou informações relativas a servidores de replicação;
- Register Slave: Thread está registrando um servidor secundario (slave);
- Reset stmt: A thread está reiniciando um comando (prepared statement);
- Set option: A thread está definindo uma configuração para execução de comandos pelo cliente;
- Shutdown: A thread está desligando o servidor;
- Sleep: A thread está aguardando novos comandos;
- Statistics: A thread está recuperando informações sobre o servidor;
- Table Dump: A thread está executando um comando de remoção (drop) de tabela;
- Time: Não utilizado.
- Time: Tempo em segundos que a thread está no estado (Command) atual;
- State: Exibe uma ação, evento ou status que indica o que a thread está fazendo. Esta coluna possui um número grande de valores possíveis. Basicamente, ela mostra em qual etapa do command atual ela está. Consulte o manual do MySQL (8.14.2 General Thread States) para ver uma lista completa dos valores possíveis para esta coluna;
- Info: Mostra o statement que está sendo executado no momento ou NULL se não estiver executando nada. Se o comando inicial foi uma chamada para uma procedure e ela está executando um select no momento, o comando exibido será o select. No “modo tabela”, esta coluna exibe apenas os 100 primeiros caracteres;
Como matar um dos processos listados
Matar um processo é simples, basta utilizar o comando abaixo:
Você deve substituir o <id> pelo número exibido na coluna ID.
Infelizmente (ou felizmente…) o MySQL não possui opção de matar processos em massa/lote. Para fazer isso, você vai ter que fazer algum script que execute os comandos kill individualmente.
Espero ter ajudado.
Referências: