Высокое количество временных таблиц дискового пространства MySQL

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

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

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

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

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

Вывод:

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