Большое количество временных таблиц дисков MySQL - PullRequest
12 голосов
/ 22 октября 2010

Мы заметили, что MySQL сообщает об очень большом количестве временных таблиц дисков (более 10000), об этом сообщает Плотность сервера .Мы пытались понять немного больше об этом.

  • Почему временные таблицы дисков создаются MySQL?
  • Как они влияют на производительность?
  • Они когда-либо удаляются MySQL или это число просто увеличивается?

Ответы [ 3 ]

15 голосов
/ 27 октября 2010

Временные таблицы могут быть созданы по многим причинам.Любая операция выбора, которая имеет большой набор данных и требует сортировки, будет записана в одну.Фактические временные таблицы, создаваемые запросами напрямую (тип таблицы TEMPORARY), создаются для каждого соединения отдельно, поэтому, если у вас есть сценарий с 50 подключениями, каждое из которых выполняет одну и ту же временную таблицу, то это 50 наборов временных файлов на диске для них.,Группа причин создания временной таблицы по порядку и по дисковым операциям ввода-вывода является самой дорогой частью СУБД, поэтому, если эти таблицы предназначены для больших наборов данных, вы, вероятно, ограничивает производительность БД той же скоростью, что и ваш/ o система.Но, как правило, благодаря существующему, они только занимают место на диске и ничего больше.

Временные таблицы для целей сортировки должны очищаться после завершения запроса.Временная таблица типа 'TEMPORARY' будет очищаться, когда соединение, к которому они присоединены, закрыто.Если вы используете постоянные соединения, то таблицы TEMPORARY будут держаться до тех пор, пока вы (или программа) не СОСТАВИТЕ их вручную.

7 голосов
/ 28 октября 2010

Прежде всего прочитайте ответ Марка Б Это о причине, почему у вас много временных таблиц. В любом случае, сами временные таблицы неплохие, плохая вещь - «временная таблица на диске», которая работает медленно и вызывает большую часть дискового ввода-вывода.

Чтобы предотвратить сохранение временной таблицы на диске, попробуйте выполнить следующие действия:

  • Проверьте значение max_heap_table_size переменная
  • Проверьте значение tmp_table_size переменная
  • Проверка процента дисковых таблиц среди всех временных таблиц. Просто сравните show global status like 'Created_tmp_%tables' эти два числа. Если процент не слишком большой - беспокоиться не о чем.
1 голос
/ 28 октября 2010

Вы определили много индексов для таблиц.Вы когда-нибудь задумывались о том, как работает индексация?

Просто индекс - это временная таблица в dbase, которая хранит отсортированную копию индексированного столбца.Когда вставляется новая строка, dbase помещает новую запись в временную таблицу в правильное место, поэтому индекс имеет следующие результаты:

A) Преимущества:

1) Увеличение скорости поиска, поскольку таблица сортируется во временной таблице на основе индексированных полей:

B) Недостатки:

1) Замедление (Создать,Обновить, Удалить), поскольку при необходимости следует выполнять те же действия с временными таблицами.

2) Размер базы данных увеличивается из-за использования временных таблиц.

Заключение:

Индексирование - это компромисс с большим размером дБ, более медленной вставкой и быстрым поиском в большом количестве данных.Используйте индексацию полей, которые вы часто называете их критериями поиска (WHERE), и удалите дополнительные индексы, чтобы оптимизировать дизайн БД.

...