索引历史不足

Vip*_*ain 10 mysql innodb assertion

在MySQL日志中,有一个错误'InnoDB:索引0的历史记录不足'

我不知道为什么会这样.我用Google搜索并发现了这个:

InnoDB:如果使用一致快照启动事务,则在事务正在进行时将新索引添加到表中,后续UPDATE语句可能会错误地遇到错误:

ER_TABLE_DEF_CHANGED:索引的历史记录不足
此问题可能导致调试版本中的断言错误.(缺陷号14036214)

在我的情况下,我启动了事务并将数据插入到表中,在此之间我没有插入或更新该表中的数据.为什么会出现此错误?

3ma*_*uek 2

您指出的错误仅用于调试编译版本:

存储/innobase/处理程序/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);
    }
Run Code Online (Sandbox Code Playgroud)

该错误发生在索引创建过程中,表结构发生变化时,说明该索引不可用。请检查 mysqld.err 文件中提供的错误,因为可能存在更多错误,可以帮助确定它处于哪个阶段。

如果您的案例是使用调试符号编译的 MySQL,您可能会注意到评论中报告的错误。否则,我会建议检查是否有任何其他事务在事务期间碰巧更改了与索引相关的表结构(您是否在长事务期间删除了索引?操作期间目录是否已损坏?)。