2016-12-09 6 views
1

Я вижу следующее сообщение об ошибке в моих журналах MySQL:Невозможно добавить поле ... размер строки ... больше, чем максимальный допустимый размер

[Warning] InnoDB: Cannot add field `wd_field_ft_95_240` in table `tmp`.`#sql_1_0` because after adding it, the row size is 8155 which is greater than maximum allowed size (8126) for a record on index leaf page.

Является ли это tmp база данных какой-то внутренней структуры MySQL ? Это то, о чем я должен заботиться?

ответ

3

Некоторые запросы MySQL создают internal temporary tables, чтобы провести частичные результаты.

Начиная с MySQL 5.7.6, механизм хранения по умолчанию для внутренних временных таблиц - это InnoDB, который имеет довольно небольшое ограничение на размер строки, как вы можете видеть (хотя столбцы BLOB/TEXT могут выйти за пределы этого предела).

Вы можете вернуться к старому двигателю хранения до 5,7 по умолчанию для внутренних временных таблиц:

internal_tmp_disk_storage_engine=MyISAM 

Это обходной путь упоминается в этой ошибке: «Bug #77398 row size too large in mysql 5.7 query»

1

Пожалуйста, покажите нам SHOW CREATE TABLE. Готов поспорить, у вас есть много столбцов, объявленных VARCHAR(255). Я также поставил, что для большинства этих столбцов никогда не потребуется 255 символов. Сократите их.

Если этого не достаточно, измените a несколько быть TEXT; данные будут храниться за пределами страницы и не будут сильно влиять на ограничение 8K.

Если этого не достаточно, мы можем поговорить о «вертикальном разделении». В этот момент, пожалуйста, покажите нам запрос, который ускорил ошибку. Если вы делаете SELECT *, измените его, указав только те столбцы, которые вам действительно нужны.

Не используйте MyISAM, это шаг назад. И он уходит в следующей версии, поэтому будущая миграция будет повреждена.