#mysql #memory #myisam #tmpfs
#mysql #память #myisam #tmpfs
Вопрос:
Существует множество таблиц с типом текста столбца. Некоторые таблицы большие, а сервис сильно загружен. Все таблицы в InnoDB.
Когда SQL-запрос создал таблицу tmp, если в ней есть поле с типом TEXT, таблица создается на диске с типом MyISAM. Чтобы избежать операций дискового ввода-вывода, временный каталог MySQL (tmpdir) монтируется в память (tmpfs).
1) Что будет быстрее MyISAM tmpfs или памяти? Есть ли большая разница?
2) Если MyISAM используется для временных таблиц, нужно ли мне настраивать буферы, которые необходимы только для таблиц MyISAM: read_buffer_size read_rnd_buffer_size? Будут ли эти конфигурации MyISAM влиять на производительность вообще? (Myisam_sort_buffe_size, key_buffer_size)
Я хочу изменить ТЕКСТ на VARCHAR.
Ответ №1:
Как правило, лучше игнорировать все проблемы, которые вы поднимаете.
- Если
SELECT
включаетTEXT
столбец, он должен использовать MyISAM, а не ПАМЯТЬ. То есть, если вы не касаетесь ниTEXT
одного ,BLOB
, или «большого»VAR*
столбца, многим не нужно использовать MyISAM. - Давайте посмотрим запрос; может быть, мы сможем избежать таблицы tmp!
- Таблица MyISAM tmp будет в основном (полностью?) оставайтесь в оперативной памяти, если это возможно, из-за различных проблем с кэшированием.
- Для таблицы tmp ПАМЯТЬ почти всегда быстрее, чем MyISAM.
- Если вы используете ramdisk, а таблица tmp слишком большая, запрос завершится сбоем.
- Если вы используете ramdisk, вы крадете оперативную память у других объектов (в частности, у InnoDB buffer_pool), тем самым замедляя все остальное!
- Переход с TEXT на VARCHAR не будет работать, если вам нужно больше 255 (или это 512? У меня нет точного ограничения.)
- Ни одна из упомянутых вами настроек не имеет отношения к этому варианту использования.
Комментарии:
1. И большая часть этого вопроса исчезает в MySQL 8.0. Временные таблицы будут InnoDB и оптимизированы несколькими способами. Это «возможно» в 5.7; см.
internal_tmp_disk_storage_engine
.2. Все таблицы имеют текстовый столбец и 50% таблицы tmp, созданной на диске в MyISAM. У нас много оперативной памяти, и мы можем использовать tmpfs для создания таблицы tmp, это быстрее, чем таблица tmp на диске. У нас есть MySQL 5.6. Tmpfs — это виртуальная область в оперативной памяти. Я хотел бы знать, что быстрее подключается MyISAM к tmpfs или памяти? Должен ли я установить настройки MyISAM для продуктивной работы с таблицей tmp?
3. Вместо этого я бы работал над тем, чтобы избегать
TEXT
или, по крайней мере, избегать выборкиTEXT
столбцов в сложных запросах. И я бы попытался улучшить сложные запросы, чтобы им не нужны были таблицы tmp. Не могли бы вы показать нам пару распространенных запросов?