mirror of
https://github.com/MariaDB/server.git
synced 2025-11-30 05:23:50 +03:00
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.
82 lines
2.4 KiB
Plaintext
82 lines
2.4 KiB
Plaintext
###################################################################
|
|
-- echo #
|
|
-- echo # Test that INFORMATION_SCHEMA.TABLES.UPDATE_TIME is filled
|
|
-- echo # correctly for InnoDB tables.
|
|
-- echo #
|
|
|
|
-- source include/have_innodb.inc
|
|
-- source include/have_innodb_max_16k.inc
|
|
# restart does not work with embedded
|
|
-- source include/not_embedded.inc
|
|
# This test is slow on buildbot.
|
|
--source include/big_test.inc
|
|
|
|
CREATE TABLE t (a INT) ENGINE=INNODB STATS_PERSISTENT=0;
|
|
|
|
SELECT update_time FROM information_schema.tables WHERE table_name = 't';
|
|
|
|
INSERT INTO t VALUES (1);
|
|
|
|
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 't'
|
|
AND update_time IS NOT NULL;
|
|
|
|
-- echo # We cant deterministically check that the saved value is correct, but
|
|
-- echo # at least we check that it is a timestamp not older than 2 minutes.
|
|
-- echo # Usually update_time and NOW() are equal below, but on heavily loaded
|
|
-- echo # machines NOW() could be younger.
|
|
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 't'
|
|
AND TIMESTAMPDIFF(SECOND, update_time, NOW()) < 120;
|
|
|
|
CREATE TEMPORARY TABLE big (a TEXT) ENGINE=INNODB;
|
|
|
|
SELECT COUNT(*) FROM information_schema.innodb_buffer_page
|
|
WHERE table_name = '`test`.`t`';
|
|
|
|
# evict table 't' by inserting as much data as the BP size itself
|
|
-- echo # INSERT lots of data in table 'big': begin
|
|
-- disable_query_log
|
|
BEGIN;
|
|
-- let $i = 10240
|
|
while ($i)
|
|
{
|
|
INSERT INTO big VALUES (REPEAT('a', 1024));
|
|
dec $i;
|
|
}
|
|
COMMIT;
|
|
-- enable_query_log
|
|
-- echo # INSERT lots of data in table 'big': end
|
|
|
|
# confirm that all pages for table 't' have been evicted
|
|
SELECT COUNT(*) FROM information_schema.innodb_buffer_page
|
|
WHERE table_name = '`test`.`t`';
|
|
|
|
# The result from this query will change once update_time becomes persistent
|
|
# (WL#6917).
|
|
SELECT COUNT(*) FROM information_schema.tables WHERE table_name = 't'
|
|
AND update_time IS NOT NULL;
|
|
|
|
DROP TEMPORARY TABLE big;
|
|
|
|
-- echo # Test the behavior after restart with a prepared XA transaction
|
|
|
|
XA START 'xatrx';
|
|
INSERT INTO t VALUES (5);
|
|
XA END 'xatrx';
|
|
XA PREPARE 'xatrx';
|
|
|
|
CONNECT (con1,localhost,root,,);
|
|
|
|
call mtr.add_suppression("Found 1 prepared XA transactions");
|
|
FLUSH TABLES;
|
|
|
|
--let $shutdown_timeout=0
|
|
--source include/restart_mysqld.inc
|
|
|
|
SELECT update_time FROM information_schema.tables WHERE table_name = 't';
|
|
|
|
XA COMMIT 'xatrx';
|
|
|
|
SELECT COUNT(update_time) FROM information_schema.tables WHERE table_name='t';
|
|
|
|
DROP TABLE t;
|