OBSERVAÇÕES INICIAIS
- O ID do processo 42686 diz que está se preparando para executar uma consulta SELECT
- Existem algumas conexões para dormir
- Todos os outros processos não podem adquirir um bloqueio de tabela
- Eu esperava que um UPDATE, DELETE ou INSERT fizesse o bloqueio. Não há como reivindicar a propriedade da tabela em questão.
- Não pode ver a consulta completa em Process ID 42686, mas eu suspeito que envolve um
JOIN
, GROUP BY
ouORDER BY
TEORIA DO TRABALHO
Se você ficou sem espaço em disco com a lista de processos que você me forneceu, podemos culpar o mecanismo de armazenamento MyISAM. Por quê?
No seu caso particular, não é uma das suas tabelas. Se a JOIN
,, GROUP BY
ou ORDER BY
estava sendo executado e uma tabela temporária estava sendo gravada no disco (nas tabelas temporárias do disco usam o mecanismo de armazenamento MyISAM), o MySQL simplesmente congela quando está sem espaço. Como eu sei disso?
De acordo com o Guia de Estudo de Certificação do MySQL 5.0
A Seção 29.2, boletim 11, diz:
Se você ficar sem espaço em disco ao adicionar linhas a uma tabela MyISAM, nenhum erro ocorrerá. O servidor suspende a operação até que o espaço fique disponível e, em seguida, conclui a operação.
Eu já discuti essa situação antes
Algo me diz que você tem uma dessas duas situações
- tabelas temporárias baseadas em disco para seus SELECTs e competindo por espaço com seus dados regulares
- Se a tabela temporária estiver chegando na
/tmp
partição raiz, está ficando sem espaço
SUGESTÕES
Sugestão 1: Mapear tmpdir para outro disco
[mysqld]
tmpdir = /another/disk/besides/root/partition
Sugestão # 2: Crie um disco RAM
Execute esse código para instalar um disco RAM disponível na reinicialização do Linux.
RAMDISK_SIZE=32g
service mysql stop
mkdir /var/tmpfs
echo "none /var/tmpfs tmpfs defaults,size=${RAMDISK_SIZE} 1 2" >> /etc/fstab
mount -t tmpfs -o size=${RAMDISK_SIZE} none /var/tmpfs
cp -R /var/lib/mysql/* /var/tmpfs
mv /var/lib/mysql /var/lib/mysql_old
ln -s /var/tmpfs /var/lib/mysql
chown -R mysql:mysql /var/tmpfs
chown -R mysql:mysql /var/lib/mysql
service mysql start
Em seguida, mapeie tmpdir para/var/tmpfs
DE UMA CHANCE !!!
mysqldump
. Você estava executando um backup no momento?