Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Localização da tabela temporária do MySQL


O MySQL usa um truque que faz parte dos sistemas POSIX desde sempre. Ele abre o arquivo temporário e o desvincula imediatamente. Portanto, não é visível em nenhuma lista de diretórios. Mas sistemas POSIX como UNIX e Linux não devem realmente remover um arquivo desvinculado enquanto um processo tem um identificador de arquivo aberto para ele. Assim, quando a consulta usando a tabela temporária terminar, ela fechará o identificador de arquivo e, em seguida, o sistema operacional removerá automaticamente o arquivo e liberará o armazenamento que estava usando.

Isso geralmente é melhor do que exigir que o código do servidor lembre-se de remover o arquivo temporário quando terminar com ele. Ele também explica como o término do encadeamento ou o travamento do mysqld. Pelo menos não deixará arquivos temporários obsoletos no seu sistema de arquivos.

Você pode ver o tamanho dos arquivos desvinculados com lsof -s . Vou deixar para você procurar exemplos de como usar esse comando (o Google é seu amigo aqui).

É pouco possível que um arquivo temporário use seus 167 GB de espaço livre.

Ou pode ser que o arquivo temporário use apenas 8 GB, mas você pode ter 20 threads fazendo a mesma consulta ao mesmo tempo. Já vi isso acontecer uma vez.

Mas provavelmente é mais provável que você tenha um valor de tmp_table_size que está restringindo o tamanho da tabela temporária.

Se você atingir o limite, você pode aumentar essa opção de configuração, seja como uma variável de sessão quando precisar, ou globalmente no my.cnf .

Mas eu tentaria primeiro otimizar a consulta. Por que ele precisa criar tabelas temporárias tão grandes? Poderia ser otimizado para examinar menos linhas ou talvez evitar a criação de uma tabela temporária?