SHOW PROCESSLIST
SHOW [FULL] PROCESSLIST
exibe quais threads estão em execução. Esta informação também pode ser obtida com o comando mysqladmin processlist
. Se você possuir o privilégio SUPER
, poderá ver todas as threads. Senão só é possível ver as próprias threads. Leia "Sintaxe de KILL
". Se você não utiliza a opção FULL
, então somente os primeiros 100 caracteres de cada query serião exibidos.
A partir da versão 4.0.12, o MariaDB informa o nome de maquina para conexões TCP/IP no formato nome_maquina:client_port
para tornar mais fácil de se encontrar qual cliente está fazendo o que.
Este comando é muito útil caso você obtenha a mensagem de erro 'too many connections' e deseja saber o que está ocorrendo. O MariaDB reserva uma conexão extra por cliente com o privilégio SUPER
para garantir que você sempre consiga logar e conferir o sistema (assumindo que este privilégio não foi concedido para todos os usuários).
Alguns estados normalmente vistos em mysqladmin processlist
Checking table
A thread está realizando verificação [automática] da tabela.Closing tables
Signiifica que a thread está descarregando os dados alterados na tabela para o disco e fechando as tabelas usadas. Isto deve ser uma operação rápida. Se não, você deve verificar se o seu disco não está cheio ou que o disco não está com sobrecarga.Connect Out
Slave está conectando ao master.Copying to tmp table on disk
O resultado temporário foi maior quetmp_table_size
e a thread agora está alterando a tabela temporária na memória para o disco para economizar memória.Creating tmp table
A thread está criando uma tabela temporária para guardar uma parte do resultado para a consulta.deleting from main table
Ao executar a primeira parte de um delete multi-tabela e estamos deletando apenas da primeira tabela.deleting from reference tables
Ao executar a segunda parte de um delete multi-tabela e estamos deletando o registros correspondentes em outras tabelas.Flushing tables
A thread está executandoFLUSH TABLES
e está esperando que todas as threads fechem as suas tabelas.Killed
Alguém enviou um sinal para matar a thread e ela deve abortar a próxima vez que ele verificar o parâmetro kill. O parâmetro é verificado em cada loop maior no MySQL, mas em alguns casos ainda pode levar um tempo curto para a thread morrer. Se a thread está bloqueada par outra thread, a finalização terá efeito assim que as outras threads liberarem o bloqueio.Sending data
A thread está processando registros para uma instruçãoSELECT
e também está enviando dados ao cliente.Sorting for group
A thread está fazendo uma ordenação para satisfazer a umGROUP BY
.Sorting for order
A thread está fazendo uma ordenação para satisfazer a umORDER BY
.Opening tables
Isto simplesmente significa que a thread está tentando abrir uma tabela. Este deve ser um procedimento muito rápido, a menos que algo previna da abertura. Por exemplo umALTER TABLE
ou umLOCK TABLE
pode prvenir a abertura de uma tabela até que o comando esteja finalizado.Removing duplicates
A consulta estava usandoSELECT DISTINCT
de tal modo que o MariaDB não podia otimizar o distinct em um estagio anterior. Por isto o MariaDB fez um estágio extra para remover todos os registros duplicados antes de enviar o resultado ao cliente.Reopen table
A thread obteve um lock para a tabela, mas notificou após o lock que a estrutura da tabela alterou. Ela liberou o lock, fechou a tabela e agora está tentando reabrí-la.Repair by sorting
O código de reparação está utilizando ordenamento para recriar os índices.Repair with keycache
O código de reparação está usando a criação de chaves uma a uma através da cache de chaves. Isto é muito mais lento queRepair by sorting
.Searching rows for update
A thread esta fazendo uma primeira fase pra encontrar todos os registros coincidentes antes de atualizá-los. Isto deve ser feito se oUPDATE
está alterando o índice usado para encontrar os registros envolvidos.Sleeping
A thread está esperando que o cliente envie um novo comando a ela.System lock
A thread está esperando um lock de sistema externo para a tabela. Se você não está usando múltiplos servidores mysqld que estão acessando a mesma tabela, você pode desabilitar o lock de sistema com a opção--skip-external-locking
.Upgrading lock
O manipulador deINSERT DELAYED
está tentando obter um lock para inserir registros na tabela.Updating
A thread está procurando por registros para atualizá-los.User Lock
A thread está esperando umGET_LOCK()
.Waiting for tables
A thread recebeu uma notificação que a estrutura de uma tabela foi alterada e ela precisa reabrir a tabela para receber a nova estrutura. Para poder reabrir a tabela ela deve esperar até que todas a outras threads tenham fechado a tabela em questão.A notificação acontece se outra thread usou
FLUSH TABLES
ou um dos seguintes comando na tabela em questão:FLUSH TABLES nome_tabela
,ALTER TABLE
,RENAME TABLE
,REPAIR TABLE
,ANALYZE TABLE
ouOPTIMIZE TABLE
.waiting for handler insert
O manipulador doINSERT DELAYED
processou todas as inserções e está esperado por outras.
A maioria dos estados são operações muito rápidas. Se a thread permanecer em qualquer destes estados por muitos segundos, pode haver um problema que precisa ser investigado.
Existem outros estados que não são mencionados anteriormente, mas a maioia deles só são úteis para encontrar erros no mysqld
.