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
andmax_heap_table_size
values. This differs fromMEMORY
tables explicitly created withCREATE TABLE
: For such tables, themax_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 !!
Filed under: Mysql |
Deixe um comentário