Недостаточная история для индекса

В журнале MySQL есть одна ошибка: "InnoDB: недостаточная история для индекса 0"

Я не знаю, почему это происходит. Я googled и нашел это:

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

ER_TABLE_DEF_CHANGED: недостаточная история для индекса
Эта проблема может привести к ошибке утверждения в отладочных сборках. (Ошибка № 14036214)

В моем случае я начал транзакцию и вставил данные в таблицу, между ними я не вставлял и не обновлял данные в этой таблице. Почему произошла эта ошибка?

Ответ 1

Ошибка, которую вы указываете, предназначена только для отладки скомпилированных версий:

storage/innobase/handler/ha_innodb.cc

        if (!m_prebuilt->index_usable) {
            if (dict_index_is_corrupted(m_prebuilt->index)) {
                    // Code removed for clarity
                    }
            } else {
                    push_warning_printf(
                            m_user_thd, Sql_condition::SL_WARNING,
                            HA_ERR_TABLE_DEF_CHANGED,
                            "InnoDB: insufficient history for index %u",
                            keynr);
            }

            /* The caller seems to ignore this.  Thus, we must check
            this again in row_search_for_mysql(). */
            DBUG_RETURN(HA_ERR_TABLE_DEF_CHANGED);
    }

Ошибка возникает при создании индекса и изменении структуры таблицы, это означает, что индекс не используется. Проверьте ошибки, предоставленные в файле mysqld.err, так как может быть больше ошибок, которые могут помочь определить, на какой стадии он находится.

Если ваш случай - это MySQL, скомпилированный с отладочными символами, вы, вероятно, обратите внимание на ошибку, указанную в вашем комментарии. В противном случае я предлагаю проанализировать, изменилась ли какая-либо другая транзакция в структуре таблицы, связанной с индексом во время транзакции (удалили ли вы индекс во время длительной транзакции? Был ли каталог поврежден во время операции?).