Skip to content

Commit 1fd5908

Browse files
committed
Bug#30837086 : SELECT FROM I_S.INNODB_COLUMNS IS SLOW IN 8.0
Post push fix. Reviewed by : DEBARUN BANERJEE <[email protected]>
1 parent 6e54c4d commit 1fd5908

File tree

2 files changed

+0
-177
lines changed

2 files changed

+0
-177
lines changed

mysql-test/suite/innodb/r/partition_debug.result

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,3 @@
1-
#
2-
# Test that INFORMATION_SCHEMA.INNODB_COLUMNS shows warning
3-
# if the table is dropped while filling metadata
4-
#
5-
CREATE TABLE t_part (a INT PRIMARY KEY, b INT, c VARCHAR(64))
6-
PARTITION BY HASH (a) PARTITIONS 5;
7-
SELECT lower(t.name), lower(c.name) FROM
8-
INFORMATION_SCHEMA.INNODB_COLUMNS c
9-
JOIN INFORMATION_SCHEMA.INNODB_TABLES t
10-
WHERE t.table_id = c.table_id AND t.name LIKE '%t_part%'
11-
ORDER BY t.name, c.name;
12-
lower(t.name) lower(c.name)
13-
test/t_part#p#p0 a
14-
test/t_part#p#p0 b
15-
test/t_part#p#p0 c
16-
test/t_part#p#p1 a
17-
test/t_part#p#p1 b
18-
test/t_part#p#p1 c
19-
test/t_part#p#p2 a
20-
test/t_part#p#p2 b
21-
test/t_part#p#p2 c
22-
test/t_part#p#p3 a
23-
test/t_part#p#p3 b
24-
test/t_part#p#p3 c
25-
test/t_part#p#p4 a
26-
test/t_part#p#p4 b
27-
test/t_part#p#p4 c
28-
SET DEBUG_SYNC = 'RESET';
29-
SET DEBUG='+d,do_before_filling_i_s_innodb_columns';
30-
SET DEBUG_SYNC='wait_before_filling_i_s_innodb_columns SIGNAL parked WAIT_FOR go';
31-
SELECT lower(t.name), lower(c.name) FROM
32-
INFORMATION_SCHEMA.INNODB_COLUMNS c
33-
JOIN INFORMATION_SCHEMA.INNODB_TABLES t
34-
WHERE t.table_id = c.table_id AND t.name LIKE '%t_part%'
35-
ORDER BY t.name, c.name;
36-
SET DEBUG_SYNC='now WAIT_FOR parked';
37-
SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST;
38-
COUNT(*)
39-
3
40-
DROP TABLE t_part;
41-
SET DEBUG_SYNC='now SIGNAL go';
42-
lower(t.name) lower(c.name)
43-
SHOW WARNINGS;
44-
Level Code Message
45-
Pattern "Unable to open innodb table with id = .* in the data dictionary." found
46-
SET DEBUG_SYNC='RESET';
47-
SET DEBUG='-d,do_before_filling_i_s_innodb_columns';
48-
#
49-
# Test that INFORMATION_SCHEMA.INNODB_COLUMNS shows warning
50-
# if the table is locked while filling metadata
51-
#
52-
CREATE TABLE t_nopart (a INT PRIMARY KEY, b INT, c VARCHAR(64));
53-
INSERT INTO t_nopart VALUES (1, 1, 'v');
54-
SET DEBUG='+d,do_before_filling_i_s_innodb_columns';
55-
SET DEBUG_SYNC='wait_before_filling_i_s_innodb_columns SIGNAL parked1 WAIT_FOR go1';
56-
SET SESSION lock_wait_timeout=1;
57-
SELECT lower(t.name), lower(c.name) FROM
58-
INFORMATION_SCHEMA.INNODB_COLUMNS c
59-
JOIN INFORMATION_SCHEMA.INNODB_TABLES t
60-
WHERE t.table_id = c.table_id AND t.name LIKE '%t_nopart%'
61-
ORDER BY t.name, c.name;
62-
SET DEBUG_SYNC='now WAIT_FOR parked1';
63-
SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST;
64-
COUNT(*)
65-
3
66-
SET DEBUG_SYNC='mysql_rm_table_after_lock_table_names SIGNAL parked2 WAIT_FOR go2';
67-
DROP TABLE t_nopart;
68-
SET DEBUG_SYNC='now WAIT_FOR parked2';
69-
SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST;
70-
COUNT(*)
71-
4
72-
SET DEBUG_SYNC='now SIGNAL go1';
73-
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
74-
SHOW WARNINGS;
75-
Level Code Message
76-
Error 1205 Lock wait timeout exceeded; try restarting transaction
77-
Warning 1205 Lock wait timeout exceeded; try restarting transaction
78-
SET DEBUG_SYNC='now SIGNAL go2';
79-
SET SESSION lock_wait_timeout=default;
80-
SET DEBUG='-d,do_before_filling_i_s_innodb_columns';
811
# Different partitions can have different row format
822
# Case one: between dynamic and redundant
833
#

mysql-test/suite/innodb/t/partition_debug.test

Lines changed: 0 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -2,103 +2,6 @@
22
--source include/have_innodb_max_16k.inc
33
--source include/have_debug_sync.inc
44

5-
--echo #
6-
--echo # Test that INFORMATION_SCHEMA.INNODB_COLUMNS shows warning
7-
--echo # if the table is dropped while filling metadata
8-
--echo #
9-
10-
--disable_query_log
11-
CALL mtr.add_suppression("Unable to open innodb table with id = .* in the data dictionary.");
12-
--enable_query_log
13-
14-
CREATE TABLE t_part (a INT PRIMARY KEY, b INT, c VARCHAR(64))
15-
PARTITION BY HASH (a) PARTITIONS 5;
16-
17-
SELECT lower(t.name), lower(c.name) FROM
18-
INFORMATION_SCHEMA.INNODB_COLUMNS c
19-
JOIN INFORMATION_SCHEMA.INNODB_TABLES t
20-
WHERE t.table_id = c.table_id AND t.name LIKE '%t_part%'
21-
ORDER BY t.name, c.name;
22-
23-
SET DEBUG_SYNC = 'RESET';
24-
SET DEBUG='+d,do_before_filling_i_s_innodb_columns';
25-
SET DEBUG_SYNC='wait_before_filling_i_s_innodb_columns SIGNAL parked WAIT_FOR go';
26-
27-
SEND SELECT lower(t.name), lower(c.name) FROM
28-
INFORMATION_SCHEMA.INNODB_COLUMNS c
29-
JOIN INFORMATION_SCHEMA.INNODB_TABLES t
30-
WHERE t.table_id = c.table_id AND t.name LIKE '%t_part%'
31-
ORDER BY t.name, c.name;
32-
33-
CONNECT (con1, localhost, root,,);
34-
SET DEBUG_SYNC='now WAIT_FOR parked';
35-
SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST;
36-
DROP TABLE t_part;
37-
SET DEBUG_SYNC='now SIGNAL go';
38-
39-
CONNECTION default;
40-
--reap
41-
42-
SHOW WARNINGS;
43-
44-
# Search the warning message in the error file
45-
--let SEARCH_FILE=$MYSQLTEST_VARDIR/log/mysqld.1.err
46-
--let SEARCH_PATTERN= Unable to open innodb table with id = .* in the data dictionary.
47-
--source include/search_pattern.inc
48-
49-
DISCONNECT con1;
50-
SET DEBUG_SYNC='RESET';
51-
SET DEBUG='-d,do_before_filling_i_s_innodb_columns';
52-
53-
--echo #
54-
--echo # Test that INFORMATION_SCHEMA.INNODB_COLUMNS shows warning
55-
--echo # if the table is locked while filling metadata
56-
--echo #
57-
58-
CREATE TABLE t_nopart (a INT PRIMARY KEY, b INT, c VARCHAR(64));
59-
INSERT INTO t_nopart VALUES (1, 1, 'v');
60-
61-
SET DEBUG='+d,do_before_filling_i_s_innodb_columns';
62-
SET DEBUG_SYNC='wait_before_filling_i_s_innodb_columns SIGNAL parked1 WAIT_FOR go1';
63-
SET SESSION lock_wait_timeout=1;
64-
65-
SEND SELECT lower(t.name), lower(c.name) FROM
66-
INFORMATION_SCHEMA.INNODB_COLUMNS c
67-
JOIN INFORMATION_SCHEMA.INNODB_TABLES t
68-
WHERE t.table_id = c.table_id AND t.name LIKE '%t_nopart%'
69-
ORDER BY t.name, c.name;
70-
71-
CONNECT (con2, localhost, root,,);
72-
SET DEBUG_SYNC='now WAIT_FOR parked1';
73-
SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST;
74-
75-
SET DEBUG_SYNC='mysql_rm_table_after_lock_table_names SIGNAL parked2 WAIT_FOR go2';
76-
SEND DROP TABLE t_nopart;
77-
78-
CONNECT (con3, localhost, root,,);
79-
SET DEBUG_SYNC='now WAIT_FOR parked2';
80-
SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST;
81-
SET DEBUG_SYNC='now SIGNAL go1';
82-
83-
CONNECTION default;
84-
--error 1205
85-
--reap
86-
87-
# There will be an error and a warning because the MDL lock is held
88-
# at two different places while filling metadata
89-
SHOW WARNINGS;
90-
SET DEBUG_SYNC='now SIGNAL go2';
91-
92-
CONNECTION con2;
93-
--reap
94-
95-
DISCONNECT con2;
96-
DISCONNECT con3;
97-
98-
CONNECTION default;
99-
SET SESSION lock_wait_timeout=default;
100-
SET DEBUG='-d,do_before_filling_i_s_innodb_columns';
101-
1025
--echo # Different partitions can have different row format
1036
--echo # Case one: between dynamic and redundant
1047
--echo #

0 commit comments

Comments
 (0)