为什么我的MySQL服务器不断地把HEAP转换成MyISAM

我们间歇性地使用了MySQL服务器。 它一直抛出大量的这些查询(因此将它们堆放在我的过程列表中)。 我们正在通过Glassfish v3使用MyISAM数据库和连接池来实现Grails应用程序。

db_user myhost:35143 db查询39

converting HEAP to MyISAM /* mysql-connector-java-5.1.7 ( Revision: ) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout' OR Variable_name = 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set_connection' OR Variable_name = 'character_set' OR Variable_name = 'character_set_server' OR Variable_name = 'tx_isolation' OR Variable_name = 'transaction_isolation' OR Variable_name = 'character_set_results' OR Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name = 'system_time_zone' OR Variable_name = 'lower_case_table_names' OR Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR Variable_name = 'query_cache_size' OR Variable_name = 'init_connect' 

我们推测有临时表是通过造成这些查询的GORM(grails ORM)创build的。

可能是一些事情。

最明显的是你的TMP_TABLE_SIZEvariables很小,MySQL必须在磁盘上创build临时表,而不是在内存中。 使用以下查询将显示MySQL是否正在创build磁盘tmp表。

 mysql> SHOW STATUS LIKE '%tmp%'; 

其他问题可能是应该进入临时表的表是内存引擎不支持的BINARYTEXT表,因此您将在磁盘上创build一个MyISAM表。

磁盘上创build的临时表是MyISAM表。 HEAPMEMORY表的旧名称,因此您必须在MySQL的预先MySQL 5.x版本上运行。