1
0
mirror of https://github.com/MariaDB/server.git synced 2025-11-30 05:23:50 +03:00
Files
mariadb/mysql-test/suite/innodb/t/update_time.test
Marko Mäkelä 9608773f75 MDEV-4750 follow-up: Reduce disabling innodb_stats_persistent
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.
2021-08-31 13:55:02 +03:00

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;