Vraag onvoldoende geschiedenis voor index


In MySQL-log is er één fout 'InnoDB: onvoldoende geschiedenis voor index 0'

Ik weet niet waarom het gebeurt. Ik heb gegoogeld en gevonden deze:

InnoDB: als een transactie is gestart met een consistente momentopname, dan   nieuwe indexen zijn toegevoegd aan de tabel terwijl de transactie was geopend   vooruitgang, een volgende UPDATE-instructie kan ten onrechte tegenkomen   de fout:

ER_TABLE_DEF_CHANGED: onvoldoende geschiedenis voor index
  Dit probleem kan een assertiefout veroorzaken in builds voor foutopsporing. (Bug # 14036214)

In mijn geval startte ik de transactie en voegde gegevens in de tabel in, tussendoor heb ik geen gegevens in die tabel ingevoegd of bijgewerkt. Waarom is deze fout opgetreden?


10
2018-02-04 08:55


oorsprong


antwoorden:


De bug die u aanwijst, is alleen bedoeld voor het debuggen van gecompileerde versies:

opslag / 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);
    }

De fout treedt op wanneer de index wordt gemaakt en de tabelstructuur verandert, dit betekent dat de index niet bruikbaar is. Controleer de fouten in je mysqld.err-bestand omdat er mogelijk meer fouten kunnen zijn om te bepalen in welke fase het is geplaatst.

Als uw case een MySQL is, gecompileerd met foutopsporingssymbolen, zult u waarschijnlijk kennis nemen van de bug die in uw commentaar is gerapporteerd. Anders zal ik voorstellen om te controleren of er tijdens een transactie een andere transactie is die de tabelstructuur met betrekking tot de index wijzigt (heeft u tijdens een lange transactie een index verwijderd? Is de catalogus beschadigd geraakt tijdens de bewerking?).


1
2018-02-15 18:03