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 tableA thread está realizando verificação [automática] da tabela.Closing tablesSigniifica 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 OutSlave está conectando ao master.Copying to tmp table on diskO resultado temporário foi maior quetmp_table_sizee a thread agora está alterando a tabela temporária na memória para o disco para economizar memória.Creating tmp tableA thread está criando uma tabela temporária para guardar uma parte do resultado para a consulta.deleting from main tableAo executar a primeira parte de um delete multi-tabela e estamos deletando apenas da primeira tabela.deleting from reference tablesAo executar a segunda parte de um delete multi-tabela e estamos deletando o registros correspondentes em outras tabelas.Flushing tablesA thread está executandoFLUSH TABLESe está esperando que todas as threads fechem as suas tabelas.KilledAlgué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 dataA thread está processando registros para uma instruçãoSELECTe também está enviando dados ao cliente.Sorting for groupA thread está fazendo uma ordenação para satisfazer a umGROUP BY.Sorting for orderA thread está fazendo uma ordenação para satisfazer a umORDER BY.Opening tablesIsto 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 TABLEou umLOCK TABLEpode prvenir a abertura de uma tabela até que o comando esteja finalizado.Removing duplicatesA consulta estava usandoSELECT DISTINCTde 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 tableA 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 sortingO código de reparação está utilizando ordenamento para recriar os índices.Repair with keycacheO 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 updateA thread esta fazendo uma primeira fase pra encontrar todos os registros coincidentes antes de atualizá-los. Isto deve ser feito se oUPDATEestá alterando o índice usado para encontrar os registros envolvidos.SleepingA thread está esperando que o cliente envie um novo comando a ela.System lockA 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 lockO manipulador deINSERT DELAYEDestá tentando obter um lock para inserir registros na tabela.UpdatingA thread está procurando por registros para atualizá-los.User LockA thread está esperando umGET_LOCK().Waiting for tablesA 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 TABLESou um dos seguintes comando na tabela em questão:FLUSH TABLES nome_tabela,ALTER TABLE,RENAME TABLE,REPAIR TABLE,ANALYZE TABLEouOPTIMIZE TABLE.waiting for handler insertO manipulador doINSERT DELAYEDprocessou 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.