mariadb/mysql-test/main/column_compression_parts.test
Marko Mäkelä e581396b7a MDEV-29983 Deprecate innodb_file_per_table
Before commit 6112853cda in MySQL 4.1.1
introduced the parameter innodb_file_per_table, all InnoDB data was
written to the InnoDB system tablespace (often named ibdata1).
A serious design problem is that once the system tablespace has grown to
some size, it cannot shrink even if the data inside it has been deleted.

There are also other design problems, such as the server hang MDEV-29930
that should only be possible when using innodb_file_per_table=0 and
innodb_undo_tablespaces=0 (storing both tables and undo logs in the
InnoDB system tablespace).

The parameter innodb_change_buffering was deprecated
in commit b5852ffbee.
Starting with commit baf276e6d4
(MDEV-19229) the number of innodb_undo_tablespaces can be increased,
so that the undo logs can be moved out of the system tablespace
of an existing installation.

If all these things (tables, undo logs, and the change buffer) are
removed from the InnoDB system tablespace, the only variable-size
data structure inside it is the InnoDB data dictionary.

DDL operations on .ibd files was optimized in
commit 86dc7b4d4c (MDEV-24626).
That should have removed any thinkable performance advantage of
using innodb_file_per_table=0.

Since there should be no benefit of setting innodb_file_per_table=0,
the parameter should be deprecated. Starting with MySQL 5.6 and
MariaDB Server 10.0, the default value is innodb_file_per_table=1.
2023-01-11 17:55:56 +02:00

181 lines
6.6 KiB
Text

--source include/have_partition.inc
--disable_warnings
DROP TABLE IF EXISTS t1,t2,t3,t4;
--enable_warnings
FLUSH STATUS;
echo ---------------------------------------by range------------------------------------------;
CREATE TABLE t1 (i int, a VARCHAR(1000) COMPRESSED DEFAULT "AAA")
PARTITION BY RANGE COLUMNS (a)(
PARTITION p0 VALUES LESS THAN ('g') COMMENT "p0",
PARTITION p1 VALUES LESS THAN ('m'),
PARTITION p2 VALUES LESS THAN ('t'),
PARTITION p3 VALUES LESS THAN ('w'));
ALTER TABLE t1 ADD PARTITION (PARTITION p4 VALUES LESS THAN (MAXVALUE));
INSERT INTO t1 VALUES (1,REPEAT('a',100)),(2,REPEAT('v',200)),(3,REPEAT('r',300)),(4,NULL);
INSERT INTO t1 VALUES (5,REPEAT('k',500)),(6,'April'),(7,7),(8,""),(9,"M"),(10,DEFAULT);
ALTER TABLE t1 ANALYZE PARTITION p1;
ALTER TABLE t1 CHECK PARTITION p2;
SELECT i,SUBSTRING(a,1,10) FROM t1 PARTITION (p2) ORDER BY i;
SELECT i,SUBSTRING(a,1,10) FROM t1 where length(a)>=300 ORDER BY i;
SELECT i,SUBSTRING(a,1,10) FROM t1 where a like "%k" ORDER BY i;
DELETE FROM t1 where a="";
DELETE FROM t1 where a=(REPEAT('a',100));
DELETE FROM t1 where a like "%v";
SELECT i,SUBSTRING(a,1,10) FROM t1 ORDER BY i;
SELECT i,SUBSTRING(a,1,10) FROM t1 where a not like "%k" ORDER BY i;
SELECT i,SUBSTRING(a,1,10) FROM t1 where (a>'m') ORDER BY i;
SELECT i,SUBSTRING(a,1,10) FROM t1 where (a between 'h' and 'z') and (i=9) ORDER BY i;
EXPLAIN PARTITIONS SELECT i,SUBSTRING(a,1,10) FROM t1 where (a>'m');
EXPLAIN PARTITIONS SELECT i,SUBSTRING(a,1,10) FROM t1 where (a<'w');
ALTER TABLE t1 TRUNCATE PARTITION p2;
ALTER TABLE t1 DROP PARTITION p0;
SHOW CREATE TABLE t1;
ALTER TABLE t1 MODIFY COLUMN a VARCHAR(1000);
SHOW CREATE TABLE t1;
DROP TABLE t1;
echo ---------------------------------------------------------------------------------------------;
CREATE TABLE t1 (a VARCHAR(1000) COMPRESSED NOT NULL, id INT)
PARTITION BY RANGE COLUMNS(id,a)(
PARTITION p0 VALUES LESS THAN (100,'sss'),
PARTITION p1 VALUES LESS THAN (MAXVALUE,MAXVALUE));
INSERT INTO t1 VALUES (REPEAT('a',100), 23),(REPEAT('v',100),123),(REPEAT('z',100),24),(REPEAT('k',100),124);
SELECT id,SUBSTRING(a,1,10) FROM t1 order by id;
SELECT * from t1 partition (p0);
SELECT * from t1 partition (p1);
INSERT INTO t1 VALUES (REPEAT('a',100),101);
SELECT * from t1 partition (p0);
SELECT * from t1 partition (p1);
ALTER TABLE t1 DROP PARTITION p1;
SELECT id,SUBSTRING(a,1,10) FROM t1 WHERE id<50 order by id;
--error ER_NO_PARTITION_FOR_GIVEN_VALUE
INSERT INTO t1 VALUES (REPEAT('a',100),101);
ALTER TABLE t1 ALTER COLUMN a SET DEFAULT 'qwerty';
ALTER TABLE t1 ALTER COLUMN a DROP DEFAULT;
ALTER TABLE t1 MODIFY COLUMN a VARCHAR(1000);
ALTER TABLE t1 ALTER COLUMN a DROP DEFAULT;
INSERT INTO t1 VALUES (REPEAT('b',100),11);
--error ER_NO_DEFAULT_FOR_FIELD
INSERT INTO t1 VALUES (default,10);
ALTER TABLE t1 MODIFY COLUMN a VARCHAR(1000) COMPRESSED;
SHOW CREATE TABLE t1;
SELECT * from t1 ORDER BY id;
DROP TABLE t1;
echo ----------------------------1 partition--------------------------------------------------;
CREATE TABLE t1 (a VARCHAR(1000) COMPRESSED DEFAULT "10-12-2010")
PARTITION BY RANGE COLUMNS (a) (partition p0 VALUES LESS THAN (MAXVALUE));
INSERT INTO t1 VALUES (REPEAT('a',100)), (REPEAT('v',200)), (REPEAT('Z',300)),(NULL),(DEFAULT);
INSERT INTO t1 VALUES (DEFAULT),(REPEAT('b',200)),(REPEAT('q',300)),(DEFAULT),("MAY");
--sorted_result
SELECT SUBSTRING(a,1,10) FROM t1;
echo -----------------------------------------by key------------------------------------------;
ALTER TABLE t1 PARTITION BY KEY(a) PARTITIONS 6;
SHOW CREATE TABLE t1;
UPDATE t1 SET a="NEW" where length(a)<20;
--sorted_result
SELECT SUBSTRING(a,1,10) FROM t1;
CREATE TABLE t2 (a VARBINARY(1000) COMPRESSED)
PARTITION BY KEY(a) PARTITIONS 3;
ALTER TABLE t2 PARTITION BY LINEAR KEY ALGORITHM=2 (a) PARTITIONS 32;
INSERT INTO t2 VALUES (REPEAT('a',100)),(REPEAT('v',6)),(REPEAT('z',13)),(REPEAT('k',900));
--sorted_result
SELECT SUBSTRING(a,1,10) FROM t2;
CREATE TABLE t3 ( a VARCHAR(1000) COMPRESSED DEFAULT NULL)
PARTITION BY LINEAR KEY(a) PARTITIONS 3;
INSERT INTO t3 VALUES (REPEAT('a',100)),(REPEAT('v',100)),(NULL),(REPEAT('k',100)),(DEFAULT);
--sorted_result
SELECT SUBSTRING(a,1,10) FROM t3 where a<>NULL;
CREATE TABLE t4 (a VARBINARY(1000) COMPRESSED NOT NULL DEFAULT 0 COMMENT "QQ")
PARTITION BY LINEAR KEY(a)
PARTITIONS 3;
INSERT INTO t4 VALUES (REPEAT('a',100)),('0'),(DEFAULT),(DEFAULT),(REPEAT('v',100)),(REPEAT('k',100));
--sorted_result
SELECT SUBSTRING(a,1,10) FROM t4 where length(a)>3;
DROP TABLE t1,t2,t3,t4;
echo -----------------------------------subpartitions------------------------------------------;
CREATE TABLE t1 (a VARCHAR(1000) COMPRESSED, id INT NOT NULL)
PARTITION BY RANGE(id)
SUBPARTITION BY KEY(a) SUBPARTITIONS 4
(PARTITION p0 VALUES LESS THAN (5),
PARTITION p1 VALUES LESS THAN (MAXVALUE));
INSERT INTO t1 VALUES (REPEAT('a',100),23),(REPEAT('v',100),123),(REPEAT('z',100),24),(REPEAT('k',100),124);
SELECT id,SUBSTRING(a,1,10) FROM t1 where a=(REPEAT('k',100)) order by id;
DROP TABLE t1;
echo -------------------------------------------------------------------------------------------;
--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
CREATE TABLE t1 (a BLOB COMPRESSED)
PARTITION BY KEY(a) partitions 30;
CREATE TABLE t1 (a VARCHAR(200) COMPRESSED) PARTITION BY KEY(a) partitions 30;
ALTER TABLE t1 COALESCE PARTITION 20;
ALTER TABLE t1 ADD PARTITION (PARTITION pm);
CREATE TABLE t2 like t1;
ALTER TABLE t2 REMOVE PARTITIONING;
SHOW CREATE TABLE t1;
SHOW CREATE TABLE t2;
ALTER TABLE t1 EXCHANGE PARTITION pm WITH TABLE t2;
DROP TABLE t1,t2;
echo -------------------------------------------------------------------------------------------;
CREATE TABLE t1 (a BLOB COMPRESSED default 5,i int);
INSERT INTO t1 VALUES (REPEAT('a',100),1),(REPEAT('v',100),2),(REPEAT('z',100),3),(REPEAT('k',100),2),(2,2);
--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
ALTER TABLE t1 PARTITION BY KEY(a) partitions 3;
ALTER TABLE t1 PARTITION BY HASH(i) PARTITIONS 8;
--error ER_PARTITION_WRONG_VALUES_ERROR
ALTER TABLE t1 REORGANIZE PARTITION p0 INTO (
PARTITION s0 VALUES LESS THAN (1960),
PARTITION s1 VALUES LESS THAN (1970)
);
SHOW CREATE TABLE t1;
ALTER TABLE t1 REMOVE PARTITIONING;
DROP TABLE t1;
CREATE TABLE t1 (a VARCHAR(500) COMPRESSED default 5,i int)
PARTITION BY RANGE COLUMNS(i)(
PARTITION p0 VALUES LESS THAN (10),
PARTITION p1 VALUES LESS THAN (100),
PARTITION p2 VALUES LESS THAN (1000));
INSERT INTO t1 VALUES (REPEAT('a',100),1),("one",21),(REPEAT('3',100),34),(REPEAT('k',100),267),(2,278);
ALTER TABLE t1 REORGANIZE PARTITION p2 INTO (PARTITION p22 VALUES LESS THAN (MAXVALUE));
SHOW CREATE TABLE t1;
ALTER TABLE t1 REBUILD PARTITION p22;
DROP TABLE t1;