MySQL não está liberando descritores de arquivos temporários

3

Desde alguns dias atrás, temos tido alguns problemas sérios com a nossa instalação do MySQL: O MySQL continua abrindo arquivos temporários (comportamento normal), mas esses arquivos nunca são liberados. A conseqüência é que, eventualmente, o espaço em disco está esgotado e temos que reiniciar o serviço e limpar o / tmp manualmente.

Usando o lsof, vemos algo assim:

mysqld    16866     mysql    5u      REG    8,3          0        692 /tmp/ibyWJylQ     (deleted)
mysqld    16866     mysql    6u      REG    8,3          0        707 /tmp/ibf5adsT  (deleted)
mysqld    16866     mysql    7u      REG    8,3          0        728 /tmp/ibGjPRyW (deleted)
mysqld    16866     mysql    8u      REG    8,3          0       5678 /tmp/ibMQDLMZ (deleted)
mysqld    16866     mysql   13u      REG    8,3          0       5679 /tmp/ibQAnM42 (deleted)

Talvez não esteja relacionado, mas quando encerramos o servidor, os arquivos são finalmente liberados e podemos ver os seguintes avisos no log do MySQL:

121029  7:44:27 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 1333  user: 'xxx'
121029  7:44:27 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 1156  user: 'yyy'
121029  7:44:27 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 1151  user: 'zzz'

onde 'xxx', 'yyy' e 'zzz' são usuários mysql distintos (e os únicos 3 usuários com conexões ativas ao banco de dados).

Temos algumas teorias:

  • Existe um problema no sistema operacional que mantém os manipuladores de arquivos abertos. Pode ser possível que a operação "delete" do SO bloqueie os encadeamentos até o encerramento? Isso pode explicar o aviso no encerramento e o fato de que os arquivos são finalmente excluídos quando o processo é interrompido.

  • Até agora, os conjuntos de dados eram tão pequenos que os arquivos temporários eram relativamente pequenos e havia tempo suficiente para liberar as alças de arquivos sem esgotar o espaço em disco.

Estamos usando o Mysql 5.5 em um RHEL 6.2 com o kernel padrão.

    
por Wakaru44 29.10.2012 / 11:48

2 respostas

3

Bem ... Não é realmente uma solução, mas considero o fim da pesquisa.

Parece ser um bug no MySQL. Nós descobrimos através deste este bug que parece uma duplicata de esta

Como solução alternativa, para evitar a geração de tantos arquivos temporais, aumentamos binlog_cache_size para um valor razoável para nós (após o benchmarking do aplicativo, e verificando o tamanho dos arquivos com lsof). Se você quiser explorar mais, você pode encontrar um artigo sobre outras opções para resolver isso.

Espero que ajude alguém;)

    
por 03.11.2012 / 02:25
0

Para a referência, há outro erro muito semelhante: link . E este ainda parece não ser corrigido em 5.5.

    
por 28.07.2014 / 00:50