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.
This commit is contained in:
parent
4ceb813970
commit
c75e92fd6f
@ -5004,9 +5004,14 @@ end:
|
||||
} 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 @@ end:
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user