mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
9608773f75
This essentially reverts commit 4e89ec6692
and only disables InnoDB persistent statistics for tests where it is
desirable. By design, InnoDB persistent statistics will not be updated
except by ANALYZE TABLE or by STATS_AUTO_RECALC.
The internal transactions that update persistent InnoDB statistics
in background tasks (with innodb_stats_auto_recalc=ON) may cause
nondeterministic query plans or interfere with some tests that deal
with other InnoDB internals, such as the purge of transaction history.
45 lines
1.3 KiB
Text
45 lines
1.3 KiB
Text
--source include/have_innodb.inc
|
|
#
|
|
# Bug#57252 disabling innobase_stats_on_metadata disables ANALYZE
|
|
# http://bugs.mysql.com/57252
|
|
#
|
|
|
|
-- disable_query_log
|
|
-- disable_result_log
|
|
|
|
SET @innodb_stats_on_metadata_orig = @@innodb_stats_on_metadata;
|
|
|
|
CREATE TABLE bug57252 (a INT, KEY akey (a)) ENGINE=INNODB STATS_PERSISTENT=0;
|
|
|
|
BEGIN;
|
|
let $i = 10;
|
|
while ($i) {
|
|
eval INSERT INTO bug57252 VALUES ($i);
|
|
dec $i;
|
|
}
|
|
COMMIT;
|
|
|
|
-- enable_result_log
|
|
|
|
SET GLOBAL innodb_stats_on_metadata=0;
|
|
|
|
# this calls ::info() without HA_STATUS_CONST and so
|
|
# index->stat_n_diff_key_vals[] is not copied to the mysql-visible
|
|
# rec_per_key
|
|
SELECT cardinality FROM information_schema.statistics
|
|
WHERE table_name='bug57252' AND index_name='akey';
|
|
|
|
# this calls ::info() with HA_STATUS_CONST and so
|
|
# index->stat_n_diff_key_vals[] is copied to the mysql-visible
|
|
# rec_per_key at the end; when the bug is present dict_update_statistics()
|
|
# is not called beforehand and so index->stat_n_diff_key_vals[] contains
|
|
# an outdated data and thus we get an outdated data in the result when the
|
|
# bug is present
|
|
ANALYZE TABLE bug57252;
|
|
|
|
SELECT cardinality FROM information_schema.statistics
|
|
WHERE table_name='bug57252' AND index_name='akey';
|
|
|
|
DROP TABLE bug57252;
|
|
|
|
SET GLOBAL innodb_stats_on_metadata = @innodb_stats_on_metadata_orig;
|