Высокое количество временных таблиц дискового пространства 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.