索引历史不足

时间:2016-02-04 08:55:37

标签: mysql innodb assertion

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

我不知道为什么会这样。 我用谷歌搜索了this

  

InnoDB:如果使用一致的快照启动了事务,那么   在交易进入时,新的索引被添加到表中   进度,后续的UPDATE语句可能会错误地遇到   错误:

     

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

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

1 个答案:

答案 0 :(得分: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,您可能会注意到评论中报告的错误。否则,我会建议检查是否有任何其他事务在事务期间更改了与索引相关的表结构(在长事务期间是否删除了索引?在操作期间目录是否已损坏?)。

相关问题