Commit c75e92fd authored by Jan Lindström's avatar Jan Lindström

MDEV-5141: Failing assertion: ib_table->stat_initialized in file ha_innodb.cc...

MDEV-5141: Failing assertion: ib_table->stat_initialized in file ha_innodb.cc line 11042 on concurrent ALTER and SELECT from I_S

Analysis: After ALTER TABLE the table statistics needs to be rebuilt and therefore stat_initialized is set false.  It will be rebuilt when the table is loaded again and table is closed when alter table is completed. However, during alter table table could be used by concurrent SELECT from I_S. Therefore, we need to rebuild transient table statistics meanwhile until table can be reloaded.
parent 4ceb8139
......@@ -5004,9 +5004,14 @@ row_rename_table_for_mysql(
} else {
if (old_is_tmp && !new_is_tmp) {
/* After ALTER TABLE the table statistics
needs to be rebuilt. It will be rebuilt
when the table is loaded again. */
table->stat_initialized = FALSE;
needs to be rebuilt. Even if we close
table below there could be other
transactions using this table (e.g.
SELECT * FROM INFORMATION_SCHEMA.`TABLE_CONSTRAINTS`),
thus we can't remove table from dictionary cache
here. Therefore, we initialize the
transient statistics here. */
dict_stats_update_transient(table);
}
}
}
......
......@@ -4295,9 +4295,14 @@ row_rename_table_for_mysql(
} else {
if (old_is_tmp && !new_is_tmp) {
/* After ALTER TABLE the table statistics
needs to be rebuilt. It will be rebuilt
when the table is loaded again. */
table->stat_initialized = FALSE;
needs to be rebuilt. Even if we close
table below there could be other
transactions using this table (e.g.
SELECT * FROM INFORMATION_SCHEMA.`TABLE_CONSTRAINTS`),
thus we can't remove table from dictionary cache
here. Therefore, we initialize the
transient statistics here. */
dict_stats_update_transient(table);
}
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment