Почему я продолжаю получать "КУЧУ" Преобразования к MyISAM на моем mysql сервере

У нас были некоторые проблемы с нашим сервером MySQL периодически. Это продолжает выводить много этих запросов одновременно (таким образом складывающий их в моем processlist). Мы используем дб MyISAM и организацию пула подключений через Glassfish v3 для Приложения Grails.

db_user myhost:35143 Запрос дб 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 (чаши Грааля ORM), которые вызывают эти запросы. Почему я продолжаю получать "КУЧУ" Преобразования к MyISAM на моем mysql сервере?

6
задан bpeterson76 4 December 2012 в 17:35
поделиться

1 ответ

О сообщении преобразования HEAP в MyISAM следующий ответ пишет:

Это происходит, когда временные таблицы, созданные MySQL в промежуточном шаги обработки запроса становятся слишком большими, чтобы их можно было сохранить в памяти.Насколько мне известно, при этом MySQL записывает временные таблицы MyISAM независимо от используемого вами механизма db (это просто временная таблица, которая будет удалена в конце запроса). Это не проблема, за исключением времени, которое занимает процесс.

Самым простым решением является увеличение tmp_table_size, может быть временно, если вы выполняете работы по техническому обслуживанию. Если этого недостаточно, разделите запрос на части с помощью LIMIT и OFFSET и увеличьте OFFSET, чтобы охватить всю таблицу, которую вы читаете в своем запросе. Если вы читаете в запросе несколько больших таблиц и вам нужно ограничить каждую из них, не забудьте охватить все комбинации таблиц: например, если вы используете ДВЕ таблицы и хотите разделить каждую на ТРИ части, вам нужно будет повторить запрос со смещением ШЕСТЬ раз с различными комбинациями возрастающих значений СМЕЩЕНИЯ. Под рукой появится командный файл, который упростит все это.

Таким образом, MySQL создает эти таблицы в памяти (и потенциально преобразует их во временные таблицы MyISAM), а не Grails. Но я понимаю, что они могут быть результатом слишком тяжелых запросов.

7
ответ дан 17 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: