mirror of
https://github.com/MariaDB/server.git
synced 2025-04-26 11:49:09 +03:00
This essentially reverts commit 4e89ec6692786bc1cbdce64d43d8e85a5d247dab 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.
46 lines
1.3 KiB
Plaintext
46 lines
1.3 KiB
Plaintext
--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;
|