mirror of
https://github.com/MariaDB/server.git
synced 2025-10-30 02:16:32 +01:00
When there's a column length mismatch in the InnoDB statistics tables (innodb_table_stats or innodb_index_stats), consecutive access of statistics table throws error message and uses transient statistics. This change makes it easier for users to understand and resolve the issue when the statistics tables have been modified or corrupted.
80 lines
2.9 KiB
Text
80 lines
2.9 KiB
Text
#
|
|
# Test the persistent stats feature
|
|
#
|
|
|
|
-- source include/have_innodb.inc
|
|
-- source include/not_embedded.inc
|
|
|
|
-- disable_warnings
|
|
-- disable_query_log
|
|
|
|
DROP TABLE IF EXISTS test_innodb_stats;
|
|
|
|
set @save_use_stat_tables= @@use_stat_tables;
|
|
set @@use_stat_tables= NEVER;
|
|
|
|
CREATE TABLE test_innodb_stats (
|
|
a INT,
|
|
KEY a_key (a)
|
|
) ENGINE=INNODB STATS_PERSISTENT=1;
|
|
|
|
-- enable_warnings
|
|
-- enable_query_log
|
|
|
|
# test empty table
|
|
-- let $insert = SELECT 'dummy INSERT, the table should be empty'
|
|
-- source suite/innodb/include/innodb_stats.inc
|
|
|
|
# test table with 1 row
|
|
-- let $insert = INSERT INTO test_innodb_stats (a) VALUES (1)
|
|
-- source suite/innodb/include/innodb_stats.inc
|
|
|
|
# test table with 2 eq rows
|
|
-- let $insert = INSERT INTO test_innodb_stats (a) VALUES (1), (1)
|
|
-- source suite/innodb/include/innodb_stats.inc
|
|
|
|
# test table with 3 eq rows
|
|
-- let $insert = INSERT INTO test_innodb_stats (a) VALUES (1), (1), (1)
|
|
-- source suite/innodb/include/innodb_stats.inc
|
|
|
|
# test table with 10 eq rows
|
|
-- let $insert = INSERT INTO test_innodb_stats (a) VALUES (1), (1), (1), (1), (1), (1), (1), (1), (1), (1)
|
|
-- source suite/innodb/include/innodb_stats.inc
|
|
|
|
# test table with 2 diff rows
|
|
-- let $insert = INSERT INTO test_innodb_stats (a) VALUES (1), (2)
|
|
-- source suite/innodb/include/innodb_stats.inc
|
|
|
|
# test table with 2 diff rows, 3 rows in total
|
|
-- let $insert = INSERT INTO test_innodb_stats (a) VALUES (1), (1), (2)
|
|
-- source suite/innodb/include/innodb_stats.inc
|
|
|
|
# test table with 3 diff rows
|
|
-- let $insert = INSERT INTO test_innodb_stats (a) VALUES (1), (2), (3)
|
|
-- source suite/innodb/include/innodb_stats.inc
|
|
|
|
# test table with 3 diff rows, 5 rows in total
|
|
-- let $insert = INSERT INTO test_innodb_stats (a) VALUES (1), (1), (2), (3), (3)
|
|
-- source suite/innodb/include/innodb_stats.inc
|
|
|
|
# test table with 5 diff rows, 10 rows in total
|
|
-- let $insert = INSERT INTO test_innodb_stats (a) VALUES (1), (2), (3), (4), (5), (1), (2), (3), (4), (5)
|
|
-- source suite/innodb/include/innodb_stats.inc
|
|
|
|
-- disable_query_log
|
|
DROP TABLE test_innodb_stats;
|
|
set @@use_stat_tables= @save_use_stat_tables;
|
|
--enable_query_log
|
|
--echo #
|
|
--echo # MDEV-31740 InnoDB statistics column length validation failed
|
|
--echo #
|
|
call mtr.add_suppression("InnoDB: Unexpected length of mysql\\.innodb_table_stats\\.last_update");
|
|
ALTER TABLE mysql.innodb_table_stats MODIFY LAST_UPDATE DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP();
|
|
CREATE TABLE t (a INT KEY)Engine=InnoDB STATS_PERSISTENT=1;
|
|
let SEARCH_FILE=$MYSQLTEST_VARDIR/log/mysqld.1.err;
|
|
let SEARCH_PATTERN=InnoDB: Unexpected length of mysql\\.innodb_table_stats\\.last_update;
|
|
--source include/search_pattern_in_file.inc
|
|
ALTER TABLE mysql.innodb_table_stats MODIFY last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP();
|
|
CREATE TABLE t2(a INT KEY)ENGINE=InnoDB STATS_PERSISTENT= 1;
|
|
SELECT table_name FROM mysql.innodb_table_stats;
|
|
DROP TABLE t, t2;
|