MySQL Оптимизация кэша таблиц и дисковых таблиц tmp

Я пытаюсь оптимизировать свою базу данных MySQL. У меня около 90 столов, большинство из которых почти никогда не используются. Только 10 или около того выполняют большую часть работы по управлению моим сайтом.

Статистика состояния MySQL показывает примерно 2 миллиона запросов за 2,5 дня и сообщает об «открытых_таблицах» 1,7 тыс. (с открытыми_таблицами 256). У меня table_cache установлен на 256, увеличен с 32.

Я предполагаю, что большинство открытых таблиц являются либо несколькими экземплярами одних и тех же таблиц из разных соединений, либо некоторыми временными таблицами.

В тот же период он сообщает о «Created_tmp_tables» в 19,1 КБ и более раздражающих Created_tmp_disk_tables в 5,7 КБ. У меня max_heap_table_size и tmp_table_size установлены на 128M.

Я пытался оптимизировать свои индексы и соединения, насколько это было возможно, и старался избегать полей BLOB и TEXT в таблицах, чтобы избежать использования диска.

Есть ли что-нибудь, что вы можете предложить, чтобы улучшить ситуацию?


person Phil Newby    schedule 10.05.2013    source источник
comment
Вы полагаетесь на подзапросы?   -  person Eugen Rieck    schedule 10.05.2013
comment
Нет, я тоже пытался их избегать   -  person Phil Newby    schedule 10.05.2013


Ответы (1)


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

Это все равно, что пытаться отремонтировать свой автомобиль после анализа количества времени, которое он провел на второй передаче. Существенно менее 1% ваших запросов генерируют временные таблицы. Это хорошо. Это число достаточно мало, чтобы эти запросы могли быть для резервного копирования или какой-либо операции обслуживания, а не для производства.

Если у вас есть проблемы с производительностью, вы узнаете об этом, потому что некоторые запросы работают слишком медленно, а некоторые страницы в вашем веб-приложении работают медленно. Можете ли вы выяснить, какие запросы имеют проблемы? Есть журнал медленных запросов, который может вам помочь.

http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html

Вы можете попробовать увеличить tmp_table_size, если у вас много оперативной памяти. Почему бы не увеличить его до пары мегабайт и посмотреть, станет ли лучше? Но, вероятно, они не изменятся заметно.

person O. Jones    schedule 10.05.2013