File: innodb_autoextend_tbsp_ddl.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (266 lines) | stat: -rw-r--r-- 9,722 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
--source include/big_test.inc
--source include/have_innodb_16k.inc

--echo #
--echo # Tests for CREATE/ALTER TABLESPACE with AUTOEXTEND_SIZE clause
--echo #

--disable_query_log
call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* InnoDB: Size of tablespace myspace is more than the maximum size allowed.");
call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* The table 'tsp' is full");
--enable_query_log

--echo # Test error conditions for CREATE TABLESPACE
--error ER_INNODB_AUTOEXTEND_SIZE_OUT_OF_RANGE
CREATE TABLESPACE myspace ADD DATAFILE 'myspace1.ibd' AUTOEXTEND_SIZE 48K;

--error ER_INNODB_AUTOEXTEND_SIZE_OUT_OF_RANGE
CREATE TABLESPACE myspace ADD DATAFILE 'myspace1.ibd' AUTOEXTEND_SIZE 5G;

--error ER_INNODB_INVALID_AUTOEXTEND_SIZE_VALUE
CREATE TABLESPACE myspace ADD DATAFILE 'myspace1.ibd' AUTOEXTEND_SIZE 5M;

CREATE TABLESPACE myspace ADD DATAFILE 'myspace1.ibd' AUTOEXTEND_SIZE=8M;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
    WHERE NAME = 'myspace';

--echo # Test error conditions with ALTER TABLESPACE
--error ER_INNODB_AUTOEXTEND_SIZE_OUT_OF_RANGE
ALTER TABLESPACE myspace AUTOEXTEND_SIZE 2M;

--error ER_INNODB_AUTOEXTEND_SIZE_OUT_OF_RANGE
ALTER TABLESPACE myspace AUTOEXTEND_SIZE 5G;

ALTER TABLESPACE myspace AUTOEXTEND_SIZE=4M;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
    WHERE NAME = 'myspace';

--echo # Validate that the autoextend_size attribute is persisted properly
--source include/restart_mysqld.inc
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
    WHERE NAME = 'myspace';

DROP TABLESPACE myspace;

--echo # CREATE/ALTER TABLESPACE with AUTOEXTEND_SIZE value set to absolute sizes
--echo # in bytes not qualified with K, M or G
--error ER_INNODB_INVALID_AUTOEXTEND_SIZE_VALUE
CREATE TABLESPACE myspace ADD DATAFILE 'myspace.ibd' AUTOEXTEND_SIZE 5000000;

CREATE TABLESPACE myspace ADD DATAFILE 'myspace.ibd' AUTOEXTEND_SIZE 4194304;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
    WHERE NAME = 'myspace';

DROP TABLESPACE myspace;

--echo # CREATE TABLESPACE with autoextend_size > 0
CREATE TABLESPACE myspace AUTOEXTEND_SIZE 4M;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
    WHERE NAME = 'myspace';

ALTER TABLESPACE myspace AUTOEXTEND_SIZE 0;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
    WHERE NAME = 'myspace';
DROP TABLESPACE myspace;

--echo # CREATE TABLESPACE with default AUTOEXTEND_SIZE
CREATE TABLESPACE myspace ADD DATAFILE 'myspace1.ibd';
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
    WHERE NAME = 'myspace';

ALTER TABLESPACE myspace AUTOEXTEND_SIZE=4M;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
    WHERE NAME = 'myspace';

ALTER TABLESPACE myspace AUTOEXTEND_SIZE 0;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
    WHERE NAME = 'myspace';

DROP TABLESPACE myspace;

--echo # Validate ALTER TABLESPACE cannot alter AUTOEXTEND_SIZE for a table with
--echo # file_per_tablespace
CREATE TABLE mytable(c1 INT);
--error 1064
ALTER TABLESPACE test.mytable AUTOEXTEND_SIZE=1M;
DROP TABLE mytable;

--echo # CREATE TABLE in a general tablespace with AUTOEXTEND_SIZE attribute
CREATE TABLESPACE myspace ADD DATAFILE 'myspace.ibd';
--error ER_INNODB_INCOMPATIBLE_WITH_TABLESPACE
CREATE TABLE mytable (c1 INT) TABLESPACE myspace AUTOEXTEND_SIZE 4M;
--error ER_INNODB_INCOMPATIBLE_WITH_TABLESPACE
CREATE TABLE mytable (c1 INT) TABLESPACE myspace AUTOEXTEND_SIZE=1M;

CREATE TABLE mytable (c1 INT) TABLESPACE myspace;
SHOW CREATE TABLE mytable;

--error ER_INNODB_INCOMPATIBLE_WITH_TABLESPACE
ALTER TABLE mytable AUTOEXTEND_SIZE 8M;

SHOW CREATE TABLE mytable;

DROP TABLE mytable;

DROP TABLESPACE myspace;

--echo # Validate that AUTOEXTEND_SIZE value is effective when the server
--echo # is started with --skip-innodb-validate-tablespace-paths command line option
CREATE TABLESPACE myspace ADD DATAFILE 'myspace.ibd' AUTOEXTEND_SIZE 4M;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
  WHERE NAME LIKE '%myspace%';

CREATE TABLE tsp(c1 INT, c2 TEXT) TABLESPACE myspace;

DELIMITER |;
CREATE PROCEDURE bulk_insert()
BEGIN
  DECLARE i INT DEFAULT 1;
  WHILE i < 10000 DO
    INSERT INTO tsp VALUE(i, repeat('aaaaaa', 10000));
    COMMIT;
    SET i = i + 1;
  END WHILE;
END
|
DELIMITER ;|

--let $restart_parameters = restart: --skip-innodb-validate-tablespace-paths
--source include/restart_mysqld.inc

call bulk_insert();

SELECT COUNT(*) FROM tsp;

SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
  WHERE NAME LIKE '%myspace%';

DROP TABLE tsp;

DROP TABLESPACE myspace;

--echo # Validate movement of table from file_per_table tablespace to general tablespace
--echo #   and vice versa
CREATE TABLESPACE myspace ADD DATAFILE 'myspace.ibd' AUTOEXTEND_SIZE 8M;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
  WHERE NAME LIKE '%myspace%';

CREATE TABLE tsp(c1 int) AUTOEXTEND_SIZE 4m;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
  WHERE NAME LIKE '%tsp%';

ALTER TABLE tsp TABLESPACE myspace;
# Table tsp should not be visible in innodb_tablespaces
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
  WHERE NAME LIKE '%tsp%' OR NAME LIKE '%myspace%';

# Move the table back to a file_per_table tablespace
ALTER TABLE tsp TABLESPACE innodb_file_per_table;
# Table tsp should be visible in innodb_tablespaces and autoextend_size should be
# 0 as no autoextend_size option specified with the ALTER TABLE ... TABLESPACE statement
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
  WHERE NAME LIKE '%tsp%' OR NAME LIKE '%myspace%';

DROP TABLE tsp;

DROP TABLESPACE myspace;

DROP PROCEDURE bulk_insert;

--echo # Test scenarios with autoextend_size specified while moving the table between
--echo #   different tablespaces
CREATE TABLESPACE myspace ADD DATAFILE 'myspace.ibd' AUTOEXTEND_SIZE 64m;
CREATE TABLE tsp(c1 int, c2 text) AUTOEXTEND_SIZE 4m;
INSERT INTO tsp VALUES (1, repeat('aaaaaa', 10000));
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
  WHERE NAME LIKE '%tsp%' OR NAME LIKE '%myspace%';
SHOW CREATE TABLE tsp;

# Move the table to the general tablespace while attempting to change the autoextend_size
# value

# AUTOEXTEND_SIZE value for a general tablespace cannot be changed with ALTER TABLE statement
--error ER_INNODB_INCOMPATIBLE_WITH_TABLESPACE
ALTER TABLE tsp TABLESPACE myspace AUTOEXTEND_SIZE 32m;

--error ER_INNODB_INCOMPATIBLE_WITH_TABLESPACE
ALTER TABLE tsp ADD COLUMN c3 INT, TABLESPACE myspace, AUTOEXTEND_SIZE 32m;

ALTER TABLE tsp TABLESPACE myspace;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
  WHERE NAME LIKE '%tsp%' OR NAME LIKE '%myspace%';
SHOW CREATE TABLE tsp;
SELECT COUNT(*) FROM tsp;

# Move the table to another general tablespace
CREATE TABLESPACE myspace1 ADD DATAFILE 'myspace1.ibd' AUTOEXTEND_SIZE 4m;

--error ER_INNODB_INCOMPATIBLE_WITH_TABLESPACE
ALTER TABLE tsp TABLESPACE myspace1, AUTOEXTEND_SIZE 16M;

ALTER TABLE tsp TABLESPACE myspace1;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
  WHERE NAME LIKE '%tsp%' OR NAME LIKE '%myspace%';
SHOW CREATE TABLE tsp;
SELECT COUNT(*) FROM tsp;

# Move the table to the system tablespace
--error ER_ILLEGAL_HA_CREATE_OPTION
ALTER TABLE tsp TABLESPACE innodb_system, AUTOEXTEND_SIZE 4m;

ALTER TABLE tsp TABLESPACE innodb_system;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
  WHERE NAME LIKE '%tsp%' OR NAME LIKE '%myspace%' OR NAME LIKE '%innodb_system%';
SHOW CREATE TABLE tsp;
SELECT COUNT(*) FROM tsp;

# Move the table to the innodb_file_per_table tablespace
ALTER TABLE tsp TABLESPACE innodb_file_per_table, AUTOEXTEND_SIZE 8m;
SELECT NAME, FILE_SIZE, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
  WHERE NAME LIKE '%tsp%' OR NAME LIKE '%myspace%';
SHOW CREATE TABLE tsp;
SELECT COUNT(*) FROM tsp;

DROP TABLE tsp;
DROP TABLESPACE myspace1;
DROP TABLESPACE myspace;

--let $restart_parameters =
--source include/restart_mysqld.inc

--echo # Validate AUTOEXTEND_SIZE is not supported on system tablespace

--echo # Validate that CREATE TABLE returns error when the table is created with
--echo # AUTOEXTEND_SIZE attribute on a system tablespace

--echo # Set the default tablespace as a system tablespace
SET GLOBAL innodb_file_per_table=0;

--error ER_ILLEGAL_HA_CREATE_OPTION
CREATE TABLE tsystem(c1 INT) ENGINE=InnoDB AUTOEXTEND_SIZE 4M;

SET GLOBAL innodb_file_per_table=1;

--echo # Validate AUTOEXTEND_SIZE option works for the data dictionary
--echo # tablespace mysql
SELECT NAME, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
    WHERE NAME = 'mysql';

ALTER TABLESPACE mysql AUTOEXTEND_SIZE 4M;
SELECT NAME, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
    WHERE NAME = 'mysql';

ALTER TABLESPACE mysql AUTOEXTEND_SIZE 0;
SELECT NAME, AUTOEXTEND_SIZE FROM information_schema.innodb_tablespaces
    WHERE NAME = 'mysql';

--echo # Validate that autoextend_size is not supported for
--echo # innodb_temporary and undo tablespaces
--error ER_PARSE_ERROR
CREATE UNDO TABLESPACE undotest ADD DATAFILE 'undotest.ibu' AUTOEXTEND_SIZE 4M;

--error ER_WRONG_TABLESPACE_NAME
ALTER TABLESPACE innodb_undo_001 AUTOEXTEND_SIZE 4M;

--error ER_WRONG_TABLESPACE_NAME
ALTER TABLESPACE innodb_temporary AUTOEXTEND_SIZE 4M;