• My Del.icio.us

Mysql tmp table – Fast-Post

Bom,

hoje, lendo a documentação do Mysql , me deparei com uma informação interessante, e resolvi compartilhá-la aqui, lá vai….Muitas vezes quando executamos o EXPLAIN antes de uma query, por exemplo:

mysql> explain select * from internalmail

A coluna “Extra” pode exibir o seguinte conteúdo:

Using temporary; Using filesort

Se este valor aparecer, tome cuidado e prepare-se para analisar o que os desenvolvedores estão fazendo 🙂 . De qualquer forma, existe um workaround capaz de amenizar este problema, que é : aumentar o valor da diretiva “tmp_table_size” (http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_tmp_table_size),  ou seja, a diretiva que controla o tamanho máximo que uma tabela temporária pode ter. Vale lembrar, antecipadamente que: se uma tabela temporária em memória , criada pelo Mysql, superar o valor estabelecido nesta variável, a tabela será automaticamente modificada para uma tabela em disco, o que será ainda pior, sendo assim, tome cuidado e observe sempre as variáveis:

Created_tmp_tables / Created_tmp_disk_tables

Estas variáveis são contadores que indicam , respectivamente, quantas tabelas temporarias em memória e em disco foram criadas. ** Para obter estes valores execute no shell do Mysql:

mysql> SHOW GLOBAL STATUS LIKE ‘%Created_tmp%’

Um detalhe que observei apenas hoje está contido no texto abaixo e é o calcanhar de aquiles da configuração das tabelas temporarias :

If an internal temporary table is created initially as an in-memory table but becomes too large, MySQL automatically converts it to an on-disk table. The maximum size for in-memory temporary tables is the minimum of the tmp_table_size and max_heap_table_size values. This differs from MEMORY tables explicitly created with CREATE TABLE: For such tables, the max_heap_table_size system variable determines how large the table is permitted to grow and there is no conversion to on-disk format.

Se você leu o que está escrito acima, perceberá que a variável “max_heap_table_size”, também influencia no comportamento da criação de tabelas temporárias. Bom, agora vamos lá, como alterar esta variável….é simples abra o arquivo de configuração do Mysql e escreva:

tmp_table_size = <VALOR EM BYTES>

Se não quiser utilizar bytes pois não sabe fazer a conversão….utilize a letra “M” que indicará megabytes!

Bom fica ai a dica, espero que ajude algum ser humano ou alienígena !!

Deixe um comentário