diff options
author | Jan Lindström <jan.lindstrom@skysql.com> | 2014-06-25 08:46:54 +0300 |
---|---|---|
committer | Jan Lindström <jan.lindstrom@skysql.com> | 2014-06-25 08:46:54 +0300 |
commit | 3bca01930aa5298cf6a8d602e66ddcea054edf50 (patch) | |
tree | a8a8c7640fe201bb9b9700b472fb69cd39c92acd | |
parent | 0cb7c19fbe9601f8fe7f83cfb13ea0bf67b75e2b (diff) | |
download | mariadb-git-3bca01930aa5298cf6a8d602e66ddcea054edf50.tar.gz |
MDEV-6361: innodb_compression_algorithm configuration variable can
be set to unsupported value.
MDEV-6350: Excessive unnecessary memory allocation at InnoDB/XtraDB
startup if LZO is installed.
25 files changed, 1654 insertions, 29 deletions
diff --git a/cmake/lzo.cmake b/cmake/lzo.cmake index 5a073a6a8eb..0940565c75e 100644 --- a/cmake/lzo.cmake +++ b/cmake/lzo.cmake @@ -14,8 +14,8 @@ MACRO (MYSQL_CHECK_LZO_STATIC) -#CHECK_INCLUDE_FILES(lzo/lzo1x.h HAVE_LZO_H) -#CHECK_LIBRARY_EXISTS(liblzo2.a lzo1x_1_compress "" HAVE_LZO_LIB) +CHECK_INCLUDE_FILES(lzo/lzo1x.h HAVE_LZO_H) +CHECK_LIBRARY_EXISTS(liblzo2.a lzo1x_1_compress "" HAVE_LZO_LIB) IF(HAVE_LZO_LIB AND HAVE_LZO_H) ADD_DEFINITIONS(-DHAVE_LZO=1) @@ -25,8 +25,8 @@ ENDMACRO() MACRO (MYSQL_CHECK_LZO) -#CHECK_INCLUDE_FILES(lzo/lzo1x.h HAVE_LZO_H) -#CHECK_LIBRARY_EXISTS(lzo2 lzo1x_1_compress "" HAVE_LZO_SHARED_LIB) +CHECK_INCLUDE_FILES(lzo/lzo1x.h HAVE_LZO_H) +CHECK_LIBRARY_EXISTS(lzo2 lzo1x_1_compress "" HAVE_LZO_SHARED_LIB) IF(HAVE_LZO_SHARED_LIB AND HAVE_LZO_H) ADD_DEFINITIONS(-DHAVE_LZO=1) diff --git a/mysql-test/include/have_innodb_lz4.inc b/mysql-test/include/have_innodb_lz4.inc new file mode 100644 index 00000000000..916d5abac6f --- /dev/null +++ b/mysql-test/include/have_innodb_lz4.inc @@ -0,0 +1,4 @@ +if (`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE LOWER(variable_name) = 'innodb_have_lz4' AND variable_value = 1`) +{ + --skip Test requires InnoDB compiled with liblz4 +} diff --git a/mysql-test/include/have_innodb_lzo.inc b/mysql-test/include/have_innodb_lzo.inc new file mode 100644 index 00000000000..6bbf5645381 --- /dev/null +++ b/mysql-test/include/have_innodb_lzo.inc @@ -0,0 +1,4 @@ +if (`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE LOWER(variable_name) = 'innodb_have_lzo' AND variable_value = 1`) +{ + --skip Test requires InnoDB compiled with liblzo +} diff --git a/mysql-test/suite/innodb/r/innodb-page_compression_lz4.result b/mysql-test/suite/innodb/r/innodb-page_compression_lz4.result new file mode 100644 index 00000000000..aa72031af5b --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb-page_compression_lz4.result @@ -0,0 +1,269 @@ +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_compression_algorithm = 2; +CREATE TABLE INNODB_COMPRESSED(c1 INT, b char(20)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; +SHOW WARNINGS; +Level Code Message +CREATE TABLE INNODB_NORMAL (c1 INT, b char(20)) ENGINE=INNODB; +SHOW WARNINGS; +Level Code Message +CREATE TABLE INNODB_PAGE_COMPRESSED1 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=1; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED1; +Table Create Table +INNODB_PAGE_COMPRESSED1 CREATE TABLE `INNODB_PAGE_COMPRESSED1` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=1 +CREATE TABLE INNODB_PAGE_COMPRESSED2 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=2; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED2; +Table Create Table +INNODB_PAGE_COMPRESSED2 CREATE TABLE `INNODB_PAGE_COMPRESSED2` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=2 +CREATE TABLE INNODB_PAGE_COMPRESSED3 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=3; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED3; +Table Create Table +INNODB_PAGE_COMPRESSED3 CREATE TABLE `INNODB_PAGE_COMPRESSED3` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=3 +CREATE TABLE INNODB_PAGE_COMPRESSED4 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=4; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED4; +Table Create Table +INNODB_PAGE_COMPRESSED4 CREATE TABLE `INNODB_PAGE_COMPRESSED4` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=4 +CREATE TABLE INNODB_PAGE_COMPRESSED5 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=5; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED5; +Table Create Table +INNODB_PAGE_COMPRESSED5 CREATE TABLE `INNODB_PAGE_COMPRESSED5` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=5 +CREATE TABLE INNODB_PAGE_COMPRESSED6 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=6; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED6; +Table Create Table +INNODB_PAGE_COMPRESSED6 CREATE TABLE `INNODB_PAGE_COMPRESSED6` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=6 +CREATE TABLE INNODB_PAGE_COMPRESSED7 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=7; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED7; +Table Create Table +INNODB_PAGE_COMPRESSED7 CREATE TABLE `INNODB_PAGE_COMPRESSED7` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=7 +CREATE TABLE INNODB_PAGE_COMPRESSED8 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED8; +Table Create Table +INNODB_PAGE_COMPRESSED8 CREATE TABLE `INNODB_PAGE_COMPRESSED8` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=8 +CREATE TABLE INNODB_PAGE_COMPRESSED9 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED9; +Table Create Table +INNODB_PAGE_COMPRESSED9 CREATE TABLE `INNODB_PAGE_COMPRESSED9` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=9 +CREATE PROCEDURE INNODB_INSERT_PROC (REPEAT_COUNT INT) +BEGIN +DECLARE CURRENT_NUM INT; +SET CURRENT_NUM = 0; +WHILE CURRENT_NUM < REPEAT_COUNT DO +INSERT INTO INNODB_NORMAL VALUES(CURRENT_NUM,'Testing..'); +SET CURRENT_NUM = CURRENT_NUM + 1; +END WHILE; +END// +COMMIT; +SET AUTOCOMMIT=0; +CALL INNODB_INSERT_PROC(5000); +COMMIT; +SET AUTOCOMMIT=1; +SELECT COUNT(*) FROM INNODB_NORMAL; +COUNT(*) +5000 +INSERT INTO INNODB_COMPRESSED SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED1 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED2 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED3 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED4 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED5 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED6 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED7 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED8 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED9 SELECT * FROM INNODB_NORMAL; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; +COUNT(*) +5000 +ALTER TABLE INNODB_NORMAL PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_NORMAL; +Table Create Table +INNODB_NORMAL CREATE TABLE `INNODB_NORMAL` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=8 +ALTER TABLE INNODB_COMPRESSED ROW_FORMAT=DEFAULT PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8 KEY_BLOCK_SIZE=0; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_COMPRESSED; +Table Create Table +INNODB_COMPRESSED CREATE TABLE `INNODB_COMPRESSED` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=8 +SET GLOBAL innodb_compression_algorithm = 1; +UPDATE INNODB_PAGE_COMPRESSED1 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED2 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED3 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED4 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED5 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED6 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED7 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED8 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED9 SET c1 = c1 + 1; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; +COUNT(*) +5000 +SET GLOBAL innodb_compression_algorithm = 0; +UPDATE INNODB_PAGE_COMPRESSED1 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED2 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED3 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED4 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED5 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED6 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED7 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED8 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED9 SET c1 = c1 + 1; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; +COUNT(*) +5000 +DROP PROCEDURE INNODB_INSERT_PROC; +DROP TABLE INNODB_NORMAL; +DROP TABLE INNODB_COMPRESSED; +DROP TABLE INNODB_PAGE_COMPRESSED1; +DROP TABLE INNODB_PAGE_COMPRESSED2; +DROP TABLE INNODB_PAGE_COMPRESSED3; +DROP TABLE INNODB_PAGE_COMPRESSED4; +DROP TABLE INNODB_PAGE_COMPRESSED5; +DROP TABLE INNODB_PAGE_COMPRESSED6; +DROP TABLE INNODB_PAGE_COMPRESSED7; +DROP TABLE INNODB_PAGE_COMPRESSED8; +DROP TABLE INNODB_PAGE_COMPRESSED9; diff --git a/mysql-test/suite/innodb/r/innodb-page_compression_lzo.result b/mysql-test/suite/innodb/r/innodb-page_compression_lzo.result new file mode 100644 index 00000000000..0dada819b3b --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb-page_compression_lzo.result @@ -0,0 +1,269 @@ +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_compression_algorithm = 3; +CREATE TABLE INNODB_COMPRESSED(c1 INT, b char(20)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; +SHOW WARNINGS; +Level Code Message +CREATE TABLE INNODB_NORMAL (c1 INT, b char(20)) ENGINE=INNODB; +SHOW WARNINGS; +Level Code Message +CREATE TABLE INNODB_PAGE_COMPRESSED1 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=1; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED1; +Table Create Table +INNODB_PAGE_COMPRESSED1 CREATE TABLE `INNODB_PAGE_COMPRESSED1` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=1 +CREATE TABLE INNODB_PAGE_COMPRESSED2 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=2; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED2; +Table Create Table +INNODB_PAGE_COMPRESSED2 CREATE TABLE `INNODB_PAGE_COMPRESSED2` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=2 +CREATE TABLE INNODB_PAGE_COMPRESSED3 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=3; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED3; +Table Create Table +INNODB_PAGE_COMPRESSED3 CREATE TABLE `INNODB_PAGE_COMPRESSED3` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=3 +CREATE TABLE INNODB_PAGE_COMPRESSED4 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=4; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED4; +Table Create Table +INNODB_PAGE_COMPRESSED4 CREATE TABLE `INNODB_PAGE_COMPRESSED4` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=4 +CREATE TABLE INNODB_PAGE_COMPRESSED5 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=5; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED5; +Table Create Table +INNODB_PAGE_COMPRESSED5 CREATE TABLE `INNODB_PAGE_COMPRESSED5` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=5 +CREATE TABLE INNODB_PAGE_COMPRESSED6 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=6; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED6; +Table Create Table +INNODB_PAGE_COMPRESSED6 CREATE TABLE `INNODB_PAGE_COMPRESSED6` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=6 +CREATE TABLE INNODB_PAGE_COMPRESSED7 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=7; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED7; +Table Create Table +INNODB_PAGE_COMPRESSED7 CREATE TABLE `INNODB_PAGE_COMPRESSED7` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=7 +CREATE TABLE INNODB_PAGE_COMPRESSED8 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED8; +Table Create Table +INNODB_PAGE_COMPRESSED8 CREATE TABLE `INNODB_PAGE_COMPRESSED8` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=8 +CREATE TABLE INNODB_PAGE_COMPRESSED9 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED9; +Table Create Table +INNODB_PAGE_COMPRESSED9 CREATE TABLE `INNODB_PAGE_COMPRESSED9` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=9 +CREATE PROCEDURE INNODB_INSERT_PROC (REPEAT_COUNT INT) +BEGIN +DECLARE CURRENT_NUM INT; +SET CURRENT_NUM = 0; +WHILE CURRENT_NUM < REPEAT_COUNT DO +INSERT INTO INNODB_NORMAL VALUES(CURRENT_NUM,'Testing..'); +SET CURRENT_NUM = CURRENT_NUM + 1; +END WHILE; +END// +COMMIT; +SET AUTOCOMMIT=0; +CALL INNODB_INSERT_PROC(5000); +COMMIT; +SET AUTOCOMMIT=1; +SELECT COUNT(*) FROM INNODB_NORMAL; +COUNT(*) +5000 +INSERT INTO INNODB_COMPRESSED SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED1 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED2 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED3 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED4 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED5 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED6 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED7 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED8 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED9 SELECT * FROM INNODB_NORMAL; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; +COUNT(*) +5000 +ALTER TABLE INNODB_NORMAL PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_NORMAL; +Table Create Table +INNODB_NORMAL CREATE TABLE `INNODB_NORMAL` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=8 +ALTER TABLE INNODB_COMPRESSED ROW_FORMAT=DEFAULT PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8 KEY_BLOCK_SIZE=0; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_COMPRESSED; +Table Create Table +INNODB_COMPRESSED CREATE TABLE `INNODB_COMPRESSED` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=8 +SET GLOBAL innodb_compression_algorithm = 2; +UPDATE INNODB_PAGE_COMPRESSED1 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED2 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED3 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED4 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED5 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED6 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED7 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED8 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED9 SET c1 = c1 + 1; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; +COUNT(*) +5000 +SET GLOBAL innodb_compression_algorithm = 1; +UPDATE INNODB_PAGE_COMPRESSED1 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED2 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED3 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED4 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED5 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED6 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED7 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED8 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED9 SET c1 = c1 + 1; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; +COUNT(*) +5000 +DROP PROCEDURE INNODB_INSERT_PROC; +DROP TABLE INNODB_NORMAL; +DROP TABLE INNODB_COMPRESSED; +DROP TABLE INNODB_PAGE_COMPRESSED1; +DROP TABLE INNODB_PAGE_COMPRESSED2; +DROP TABLE INNODB_PAGE_COMPRESSED3; +DROP TABLE INNODB_PAGE_COMPRESSED4; +DROP TABLE INNODB_PAGE_COMPRESSED5; +DROP TABLE INNODB_PAGE_COMPRESSED6; +DROP TABLE INNODB_PAGE_COMPRESSED7; +DROP TABLE INNODB_PAGE_COMPRESSED8; +DROP TABLE INNODB_PAGE_COMPRESSED9; diff --git a/mysql-test/suite/innodb/r/innodb-page_compression_zip.result b/mysql-test/suite/innodb/r/innodb-page_compression_zip.result new file mode 100644 index 00000000000..0378f61707f --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb-page_compression_zip.result @@ -0,0 +1,225 @@ +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_file_per_table = ON; +SET GLOBAL innodb_compression_algorithm = 1; +CREATE TABLE INNODB_COMPRESSED(c1 INT, b char(20)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; +SHOW WARNINGS; +Level Code Message +CREATE TABLE INNODB_NORMAL (c1 INT, b char(20)) ENGINE=INNODB; +SHOW WARNINGS; +Level Code Message +CREATE TABLE INNODB_PAGE_COMPRESSED1 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=1; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED1; +Table Create Table +INNODB_PAGE_COMPRESSED1 CREATE TABLE `INNODB_PAGE_COMPRESSED1` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=1 +CREATE TABLE INNODB_PAGE_COMPRESSED2 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=2; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED2; +Table Create Table +INNODB_PAGE_COMPRESSED2 CREATE TABLE `INNODB_PAGE_COMPRESSED2` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=2 +CREATE TABLE INNODB_PAGE_COMPRESSED3 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=3; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED3; +Table Create Table +INNODB_PAGE_COMPRESSED3 CREATE TABLE `INNODB_PAGE_COMPRESSED3` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=3 +CREATE TABLE INNODB_PAGE_COMPRESSED4 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=4; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED4; +Table Create Table +INNODB_PAGE_COMPRESSED4 CREATE TABLE `INNODB_PAGE_COMPRESSED4` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=4 +CREATE TABLE INNODB_PAGE_COMPRESSED5 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=5; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED5; +Table Create Table +INNODB_PAGE_COMPRESSED5 CREATE TABLE `INNODB_PAGE_COMPRESSED5` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=5 +CREATE TABLE INNODB_PAGE_COMPRESSED6 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=6; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED6; +Table Create Table +INNODB_PAGE_COMPRESSED6 CREATE TABLE `INNODB_PAGE_COMPRESSED6` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=6 +CREATE TABLE INNODB_PAGE_COMPRESSED7 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=7; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED7; +Table Create Table +INNODB_PAGE_COMPRESSED7 CREATE TABLE `INNODB_PAGE_COMPRESSED7` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=7 +CREATE TABLE INNODB_PAGE_COMPRESSED8 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED8; +Table Create Table +INNODB_PAGE_COMPRESSED8 CREATE TABLE `INNODB_PAGE_COMPRESSED8` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=8 +CREATE TABLE INNODB_PAGE_COMPRESSED9 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED9; +Table Create Table +INNODB_PAGE_COMPRESSED9 CREATE TABLE `INNODB_PAGE_COMPRESSED9` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=9 +CREATE PROCEDURE INNODB_INSERT_PROC (REPEAT_COUNT INT) +BEGIN +DECLARE CURRENT_NUM INT; +SET CURRENT_NUM = 0; +WHILE CURRENT_NUM < REPEAT_COUNT DO +INSERT INTO INNODB_NORMAL VALUES(CURRENT_NUM,'Testing..'); +SET CURRENT_NUM = CURRENT_NUM + 1; +END WHILE; +END// +COMMIT; +SET AUTOCOMMIT=0; +CALL INNODB_INSERT_PROC(5000); +COMMIT; +SET AUTOCOMMIT=1; +SELECT COUNT(*) FROM INNODB_NORMAL; +COUNT(*) +5000 +INSERT INTO INNODB_COMPRESSED SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED1 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED2 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED3 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED4 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED5 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED6 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED7 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED8 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED9 SELECT * FROM INNODB_NORMAL; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; +COUNT(*) +5000 +ALTER TABLE INNODB_NORMAL PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_NORMAL; +Table Create Table +INNODB_NORMAL CREATE TABLE `INNODB_NORMAL` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=8 +ALTER TABLE INNODB_COMPRESSED ROW_FORMAT=DEFAULT PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8 KEY_BLOCK_SIZE=0; +SHOW WARNINGS; +Level Code Message +SHOW CREATE TABLE INNODB_COMPRESSED; +Table Create Table +INNODB_COMPRESSED CREATE TABLE `INNODB_COMPRESSED` ( + `c1` int(11) DEFAULT NULL, + `b` char(20) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 `PAGE_COMPRESSED`=1 `PAGE_COMPRESSION_LEVEL`=8 +SET GLOBAL innodb_compression_algorithm = 0; +UPDATE INNODB_PAGE_COMPRESSED1 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED2 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED3 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED4 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED5 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED6 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED7 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED8 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED9 SET c1 = c1 + 1; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +COUNT(*) +5000 +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; +COUNT(*) +5000 +DROP PROCEDURE INNODB_INSERT_PROC; +DROP TABLE INNODB_NORMAL; +DROP TABLE INNODB_COMPRESSED; +DROP TABLE INNODB_PAGE_COMPRESSED1; +DROP TABLE INNODB_PAGE_COMPRESSED2; +DROP TABLE INNODB_PAGE_COMPRESSED3; +DROP TABLE INNODB_PAGE_COMPRESSED4; +DROP TABLE INNODB_PAGE_COMPRESSED5; +DROP TABLE INNODB_PAGE_COMPRESSED6; +DROP TABLE INNODB_PAGE_COMPRESSED7; +DROP TABLE INNODB_PAGE_COMPRESSED8; +DROP TABLE INNODB_PAGE_COMPRESSED9; diff --git a/mysql-test/suite/innodb/t/innodb-page_compression_lz4.test b/mysql-test/suite/innodb/t/innodb-page_compression_lz4.test new file mode 100644 index 00000000000..ff20067a74d --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb-page_compression_lz4.test @@ -0,0 +1,162 @@ +-- source include/have_innodb.inc +-- source include/have_innodb_lz4.inc + +--disable_query_log +let $innodb_compression_algorithm_orig=`SELECT @@innodb_compression_algorithm`; +let $innodb_file_format_orig = `SELECT @@innodb_file_format`; +let $innodb_file_per_table_orig = `SELECT @@innodb_file_per_table`; +--enable_query_log + +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_file_per_table = ON; + +# LZ4 +SET GLOBAL innodb_compression_algorithm = 2; + +CREATE TABLE INNODB_COMPRESSED(c1 INT, b char(20)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; +SHOW WARNINGS; +CREATE TABLE INNODB_NORMAL (c1 INT, b char(20)) ENGINE=INNODB; +SHOW WARNINGS; +CREATE TABLE INNODB_PAGE_COMPRESSED1 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=1; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED1; +CREATE TABLE INNODB_PAGE_COMPRESSED2 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=2; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED2; +CREATE TABLE INNODB_PAGE_COMPRESSED3 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=3; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED3; +CREATE TABLE INNODB_PAGE_COMPRESSED4 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=4; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED4; +CREATE TABLE INNODB_PAGE_COMPRESSED5 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=5; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED5; +CREATE TABLE INNODB_PAGE_COMPRESSED6 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=6; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED6; +CREATE TABLE INNODB_PAGE_COMPRESSED7 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=7; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED7; +CREATE TABLE INNODB_PAGE_COMPRESSED8 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED8; +CREATE TABLE INNODB_PAGE_COMPRESSED9 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED9; +DELIMITER //; +CREATE PROCEDURE INNODB_INSERT_PROC (REPEAT_COUNT INT) +BEGIN + DECLARE CURRENT_NUM INT; + SET CURRENT_NUM = 0; + WHILE CURRENT_NUM < REPEAT_COUNT DO + INSERT INTO INNODB_NORMAL VALUES(CURRENT_NUM,'Testing..'); + SET CURRENT_NUM = CURRENT_NUM + 1; + END WHILE; +END// +DELIMITER ;// +COMMIT; + +SET AUTOCOMMIT=0; +CALL INNODB_INSERT_PROC(5000); +COMMIT; +SET AUTOCOMMIT=1; +SELECT COUNT(*) FROM INNODB_NORMAL; +INSERT INTO INNODB_COMPRESSED SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED1 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED2 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED3 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED4 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED5 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED6 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED7 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED8 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED9 SELECT * FROM INNODB_NORMAL; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; + +ALTER TABLE INNODB_NORMAL PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_NORMAL; +ALTER TABLE INNODB_COMPRESSED ROW_FORMAT=DEFAULT PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8 KEY_BLOCK_SIZE=0; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_COMPRESSED; + + +# ZLIB +SET GLOBAL innodb_compression_algorithm = 1; +UPDATE INNODB_PAGE_COMPRESSED1 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED2 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED3 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED4 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED5 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED6 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED7 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED8 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED9 SET c1 = c1 + 1; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; + +# NONE +SET GLOBAL innodb_compression_algorithm = 0; +UPDATE INNODB_PAGE_COMPRESSED1 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED2 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED3 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED4 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED5 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED6 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED7 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED8 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED9 SET c1 = c1 + 1; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; + +DROP PROCEDURE INNODB_INSERT_PROC; +DROP TABLE INNODB_NORMAL; +DROP TABLE INNODB_COMPRESSED; +DROP TABLE INNODB_PAGE_COMPRESSED1; +DROP TABLE INNODB_PAGE_COMPRESSED2; +DROP TABLE INNODB_PAGE_COMPRESSED3; +DROP TABLE INNODB_PAGE_COMPRESSED4; +DROP TABLE INNODB_PAGE_COMPRESSED5; +DROP TABLE INNODB_PAGE_COMPRESSED6; +DROP TABLE INNODB_PAGE_COMPRESSED7; +DROP TABLE INNODB_PAGE_COMPRESSED8; +DROP TABLE INNODB_PAGE_COMPRESSED9; + +# reset system +--disable_query_log +EVAL SET GLOBAL innodb_compression_algorithm = $innodb_compression_algorithm_orig; +EVAL SET GLOBAL innodb_file_per_table = $innodb_file_per_table_orig; +EVAL SET GLOBAL innodb_file_format = $innodb_file_format_orig; +--enable_query_log diff --git a/mysql-test/suite/innodb/t/innodb-page_compression_lzo.test b/mysql-test/suite/innodb/t/innodb-page_compression_lzo.test new file mode 100644 index 00000000000..d4f9fe06797 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb-page_compression_lzo.test @@ -0,0 +1,163 @@ +-- source include/have_innodb.inc +-- source include/have_innodb_lzo.inc +-- source include/have_innodb_lz4.inc + +--disable_query_log +let $innodb_compression_algorithm_orig=`SELECT @@innodb_compression_algorithm`; +let $innodb_file_format_orig = `SELECT @@innodb_file_format`; +let $innodb_file_per_table_orig = `SELECT @@innodb_file_per_table`; +--enable_query_log + +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_file_per_table = ON; + +# LZO +SET GLOBAL innodb_compression_algorithm = 3; + +CREATE TABLE INNODB_COMPRESSED(c1 INT, b char(20)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; +SHOW WARNINGS; +CREATE TABLE INNODB_NORMAL (c1 INT, b char(20)) ENGINE=INNODB; +SHOW WARNINGS; +CREATE TABLE INNODB_PAGE_COMPRESSED1 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=1; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED1; +CREATE TABLE INNODB_PAGE_COMPRESSED2 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=2; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED2; +CREATE TABLE INNODB_PAGE_COMPRESSED3 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=3; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED3; +CREATE TABLE INNODB_PAGE_COMPRESSED4 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=4; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED4; +CREATE TABLE INNODB_PAGE_COMPRESSED5 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=5; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED5; +CREATE TABLE INNODB_PAGE_COMPRESSED6 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=6; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED6; +CREATE TABLE INNODB_PAGE_COMPRESSED7 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=7; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED7; +CREATE TABLE INNODB_PAGE_COMPRESSED8 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED8; +CREATE TABLE INNODB_PAGE_COMPRESSED9 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED9; +DELIMITER //; +CREATE PROCEDURE INNODB_INSERT_PROC (REPEAT_COUNT INT) +BEGIN + DECLARE CURRENT_NUM INT; + SET CURRENT_NUM = 0; + WHILE CURRENT_NUM < REPEAT_COUNT DO + INSERT INTO INNODB_NORMAL VALUES(CURRENT_NUM,'Testing..'); + SET CURRENT_NUM = CURRENT_NUM + 1; + END WHILE; +END// +DELIMITER ;// +COMMIT; + +SET AUTOCOMMIT=0; +CALL INNODB_INSERT_PROC(5000); +COMMIT; +SET AUTOCOMMIT=1; +SELECT COUNT(*) FROM INNODB_NORMAL; +INSERT INTO INNODB_COMPRESSED SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED1 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED2 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED3 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED4 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED5 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED6 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED7 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED8 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED9 SELECT * FROM INNODB_NORMAL; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; + +ALTER TABLE INNODB_NORMAL PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_NORMAL; +ALTER TABLE INNODB_COMPRESSED ROW_FORMAT=DEFAULT PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8 KEY_BLOCK_SIZE=0; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_COMPRESSED; + + +# LZ4 +SET GLOBAL innodb_compression_algorithm = 2; +UPDATE INNODB_PAGE_COMPRESSED1 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED2 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED3 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED4 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED5 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED6 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED7 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED8 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED9 SET c1 = c1 + 1; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; + +# zlib +SET GLOBAL innodb_compression_algorithm = 1; +UPDATE INNODB_PAGE_COMPRESSED1 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED2 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED3 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED4 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED5 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED6 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED7 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED8 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED9 SET c1 = c1 + 1; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; + +DROP PROCEDURE INNODB_INSERT_PROC; +DROP TABLE INNODB_NORMAL; +DROP TABLE INNODB_COMPRESSED; +DROP TABLE INNODB_PAGE_COMPRESSED1; +DROP TABLE INNODB_PAGE_COMPRESSED2; +DROP TABLE INNODB_PAGE_COMPRESSED3; +DROP TABLE INNODB_PAGE_COMPRESSED4; +DROP TABLE INNODB_PAGE_COMPRESSED5; +DROP TABLE INNODB_PAGE_COMPRESSED6; +DROP TABLE INNODB_PAGE_COMPRESSED7; +DROP TABLE INNODB_PAGE_COMPRESSED8; +DROP TABLE INNODB_PAGE_COMPRESSED9; + +# reset system +--disable_query_log +EVAL SET GLOBAL innodb_compression_algorithm = $innodb_compression_algorithm_orig; +EVAL SET GLOBAL innodb_file_per_table = $innodb_file_per_table_orig; +EVAL SET GLOBAL innodb_file_format = $innodb_file_format_orig; +--enable_query_log diff --git a/mysql-test/suite/innodb/t/innodb-page_compression_zip.test b/mysql-test/suite/innodb/t/innodb-page_compression_zip.test new file mode 100644 index 00000000000..28419c074ba --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb-page_compression_zip.test @@ -0,0 +1,137 @@ +-- source include/have_innodb.inc + +--disable_query_log +let $innodb_compression_algorithm_orig=`SELECT @@innodb_compression_algorithm`; +let $innodb_file_format_orig = `SELECT @@innodb_file_format`; +let $innodb_file_per_table_orig = `SELECT @@innodb_file_per_table`; +--enable_query_log + +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_file_per_table = ON; + +# ZLIB +SET GLOBAL innodb_compression_algorithm = 1; + +CREATE TABLE INNODB_COMPRESSED(c1 INT, b char(20)) ENGINE=INNODB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; +SHOW WARNINGS; +CREATE TABLE INNODB_NORMAL (c1 INT, b char(20)) ENGINE=INNODB; +SHOW WARNINGS; +CREATE TABLE INNODB_PAGE_COMPRESSED1 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=1; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED1; +CREATE TABLE INNODB_PAGE_COMPRESSED2 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=2; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED2; +CREATE TABLE INNODB_PAGE_COMPRESSED3 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=3; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED3; +CREATE TABLE INNODB_PAGE_COMPRESSED4 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=4; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED4; +CREATE TABLE INNODB_PAGE_COMPRESSED5 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=5; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED5; +CREATE TABLE INNODB_PAGE_COMPRESSED6 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=6; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED6; +CREATE TABLE INNODB_PAGE_COMPRESSED7 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=7; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED7; +CREATE TABLE INNODB_PAGE_COMPRESSED8 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED8; +CREATE TABLE INNODB_PAGE_COMPRESSED9 (c1 INT, b char(20)) ENGINE=INNODB PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=9; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_PAGE_COMPRESSED9; +DELIMITER //; +CREATE PROCEDURE INNODB_INSERT_PROC (REPEAT_COUNT INT) +BEGIN + DECLARE CURRENT_NUM INT; + SET CURRENT_NUM = 0; + WHILE CURRENT_NUM < REPEAT_COUNT DO + INSERT INTO INNODB_NORMAL VALUES(CURRENT_NUM,'Testing..'); + SET CURRENT_NUM = CURRENT_NUM + 1; + END WHILE; +END// +DELIMITER ;// +COMMIT; + +SET AUTOCOMMIT=0; +CALL INNODB_INSERT_PROC(5000); +COMMIT; +SET AUTOCOMMIT=1; +SELECT COUNT(*) FROM INNODB_NORMAL; +INSERT INTO INNODB_COMPRESSED SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED1 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED2 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED3 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED4 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED5 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED6 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED7 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED8 SELECT * FROM INNODB_NORMAL; +INSERT INTO INNODB_PAGE_COMPRESSED9 SELECT * FROM INNODB_NORMAL; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; + +ALTER TABLE INNODB_NORMAL PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_NORMAL; +ALTER TABLE INNODB_COMPRESSED ROW_FORMAT=DEFAULT PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=8 KEY_BLOCK_SIZE=0; +SHOW WARNINGS; +SHOW CREATE TABLE INNODB_COMPRESSED; + + +# NONE +SET GLOBAL innodb_compression_algorithm = 0; +UPDATE INNODB_PAGE_COMPRESSED1 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED2 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED3 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED4 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED5 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED6 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED7 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED8 SET c1 = c1 + 1; +UPDATE INNODB_PAGE_COMPRESSED9 SET c1 = c1 + 1; +COMMIT; +SELECT COUNT(*) FROM INNODB_COMPRESSED; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED1 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED2 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED3 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED4 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED5 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED6 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED7 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED8 WHERE C1 < 500000; +SELECT COUNT(*) FROM INNODB_PAGE_COMPRESSED9 WHERE C1 < 500000; + +DROP PROCEDURE INNODB_INSERT_PROC; +DROP TABLE INNODB_NORMAL; +DROP TABLE INNODB_COMPRESSED; +DROP TABLE INNODB_PAGE_COMPRESSED1; +DROP TABLE INNODB_PAGE_COMPRESSED2; +DROP TABLE INNODB_PAGE_COMPRESSED3; +DROP TABLE INNODB_PAGE_COMPRESSED4; +DROP TABLE INNODB_PAGE_COMPRESSED5; +DROP TABLE INNODB_PAGE_COMPRESSED6; +DROP TABLE INNODB_PAGE_COMPRESSED7; +DROP TABLE INNODB_PAGE_COMPRESSED8; +DROP TABLE INNODB_PAGE_COMPRESSED9; + +# reset system +--disable_query_log +EVAL SET GLOBAL innodb_compression_algorithm = $innodb_compression_algorithm_orig; +EVAL SET GLOBAL innodb_file_per_table = $innodb_file_per_table_orig; +EVAL SET GLOBAL innodb_file_format = $innodb_file_format_orig; +--enable_query_log diff --git a/mysql-test/suite/sys_vars/r/innodb_have_lz4_basic.result b/mysql-test/suite/sys_vars/r/innodb_have_lz4_basic.result new file mode 100644 index 00000000000..2f816066579 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_have_lz4_basic.result @@ -0,0 +1,3 @@ +select @@global.innodb_have_lz4; +@@global.innodb_have_lz4 +0 diff --git a/mysql-test/suite/sys_vars/r/innodb_have_lzo_basic.result b/mysql-test/suite/sys_vars/r/innodb_have_lzo_basic.result new file mode 100644 index 00000000000..5804aa29f9a --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_have_lzo_basic.result @@ -0,0 +1,3 @@ +select @@global.innodb_have_lzo; +@@global.innodb_have_lzo +0 diff --git a/mysql-test/suite/sys_vars/t/innodb_compression_algorithm_basic-master.opt b/mysql-test/suite/sys_vars/t/innodb_compression_algorithm_basic-master.opt new file mode 100644 index 00000000000..77db41721ca --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_compression_algorithm_basic-master.opt @@ -0,0 +1 @@ +--innodb-compression-algorithm=1
\ No newline at end of file diff --git a/mysql-test/suite/sys_vars/t/innodb_have_lz4_basic.test b/mysql-test/suite/sys_vars/t/innodb_have_lz4_basic.test new file mode 100644 index 00000000000..68a2ad7706a --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_have_lz4_basic.test @@ -0,0 +1,5 @@ +--source include/have_innodb.inc + +--let $inno= `select @@global.innodb_have_lz4` +--replace_result $inno 0 +select @@global.innodb_have_lz4; diff --git a/mysql-test/suite/sys_vars/t/innodb_have_lzo_basic.test b/mysql-test/suite/sys_vars/t/innodb_have_lzo_basic.test new file mode 100644 index 00000000000..29550b7e139 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_have_lzo_basic.test @@ -0,0 +1,5 @@ +--source include/have_innodb.inc + +--let $inno= `select @@global.innodb_have_lzo` +--replace_result $inno 0 +select @@global.innodb_have_lzo; diff --git a/storage/innobase/fil/fil0pagecompress.cc b/storage/innobase/fil/fil0pagecompress.cc index 836920a5818..b717590499b 100644 --- a/storage/innobase/fil/fil0pagecompress.cc +++ b/storage/innobase/fil/fil0pagecompress.cc @@ -173,6 +173,11 @@ fil_compress_page( } break; + case PAGE_UNCOMPRESSED: + *out_len = len; + return (buf); + break; + default: ut_error; break; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 294ef277a60..370d4528ead 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -559,7 +559,23 @@ static inline ulint innobase_map_isolation_level( /*=========================*/ - enum_tx_isolation iso); /*!< in: MySQL isolation level code */ + enum_tx_isolation iso); /*!< in: MySQL isolation level code + */ + +/*************************************************************//** +Check for a valid value of innobase_compression_algorithm. +@return 0 for valid innodb_compression_algorithm. */ +static +int +innodb_compression_algorithm_validate( +/*==================================*/ + THD* thd, /*!< in: thread handle */ + struct st_mysql_sys_var* var, /*!< in: pointer to system + variable */ + void* save, /*!< out: immediate result + for update function */ + struct st_mysql_value* value); /*!< in: incoming string */ + static const char innobase_hton_name[]= "InnoDB"; @@ -723,6 +739,10 @@ static SHOW_VAR innodb_status_variables[]= { (char*) &export_vars.innodb_page_compressed_trim_op_saved, SHOW_LONGLONG}, {"num_pages_page_decompressed", (char*) &export_vars.innodb_pages_page_decompressed, SHOW_LONGLONG}, + {"have_lz4", + (char*) &export_vars.innodb_have_lz4, SHOW_LONG}, + {"have_lzo", + (char*) &export_vars.innodb_have_lzo, SHOW_LONG}, {NullS, NullS, SHOW_LONG} }; @@ -2986,6 +3006,24 @@ innobase_init( } } +#ifndef HAVE_LZ4 + if (innodb_compression_algorithm == PAGE_LZ4_ALGORITHM) { + sql_print_error("InnoDB: innodb_compression_algorithm = %lu unsupported.\n" + "InnoDB: liblz4 is not installed. \n", + innodb_compression_algorithm); + goto error; + } +#endif + +#ifndef HAVE_LZO + if (innodb_compression_algorithm == PAGE_LZO_ALGORITHM) { + sql_print_error("InnoDB: innodb_compression_algorithm = %lu unsupported.\n" + "InnoDB: liblzo is not installed. \n", + innodb_compression_algorithm); + goto error; + } +#endif + os_innodb_umask = (ulint) my_umask; /* First calculate the default path for innodb_data_home_dir etc., @@ -17022,9 +17060,21 @@ static TYPELIB page_compression_algorithms_typelib= static MYSQL_SYSVAR_ENUM(compression_algorithm, innodb_compression_algorithm, PLUGIN_VAR_OPCMDARG, "Compression algorithm used on page compression. One of: none, zlib, lz4, or lzo", - NULL, NULL, default_compression_algorithm, + innodb_compression_algorithm_validate, NULL, default_compression_algorithm, &page_compression_algorithms_typelib); +static MYSQL_SYSVAR_ULONG(have_lz4, srv_have_lz4, + PLUGIN_VAR_READONLY, + "InnoDB compiled support with liblz4", + NULL, NULL, srv_have_lz4, + 0, 1, 0); + +static MYSQL_SYSVAR_ULONG(have_lzo, srv_have_lzo, + PLUGIN_VAR_READONLY, + "InnoDB compiled support with liblzo", + NULL, NULL, srv_have_lzo, + 0, 1, 0); + static MYSQL_SYSVAR_LONG(mtflush_threads, srv_mtflush_threads, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "Number of multi-threaded flush threads", @@ -17201,6 +17251,8 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(compression_algorithm), MYSQL_SYSVAR(mtflush_threads), MYSQL_SYSVAR(use_mtflush), + MYSQL_SYSVAR(have_lz4), + MYSQL_SYSVAR(have_lzo), NULL }; @@ -17703,3 +17755,72 @@ innobase_convert_to_system_charset( static_cast<uint>(len), errors)); } +/*************************************************************//** +Check for a valid value of innobase_compression_algorithm. +@return 0 for valid innodb_compression_algorithm. */ +static +int +innodb_compression_algorithm_validate( +/*==================================*/ + THD* thd, /*!< in: thread handle */ + struct st_mysql_sys_var* var, /*!< in: pointer to system + variable */ + void* save, /*!< out: immediate result + for update function */ + struct st_mysql_value* value) /*!< in: incoming string */ +{ + long compression_algorithm; + DBUG_ENTER("innobase_compression_algorithm_validate"); + + if (value->value_type(value) == MYSQL_VALUE_TYPE_STRING) { + char buff[STRING_BUFFER_USUAL_SIZE]; + const char *str; + int length= sizeof(buff); + + if (!(str= value->val_str(value, buff, &length))) { + DBUG_RETURN(1); + } + + if ((compression_algorithm= (long)find_type(str, &page_compression_algorithms_typelib, 0) - 1) < 0) { + DBUG_RETURN(1); + } + } else { + long long tmp; + + if (value->val_int(value, &tmp)) { + DBUG_RETURN(1); + } + + if (tmp < 0 || tmp >= page_compression_algorithms_typelib.count) { + DBUG_RETURN(1); + } + + compression_algorithm= (long) tmp; + } + + *reinterpret_cast<ulong*>(save) = compression_algorithm; + +#ifndef HAVE_LZ4 + if (compression_algorithm == PAGE_LZ4_ALGORITHM) { + push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + HA_ERR_UNSUPPORTED, + "InnoDB: innodb_compression_algorithm = %lu unsupported.\n" + "InnoDB: liblz4 is not installed. \n", + compression_algorithm); + DBUG_RETURN(1); + } +#endif + +#ifndef HAVE_LZO + if (compression_algorithm == PAGE_LZO_ALGORITHM) { + push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + HA_ERR_UNSUPPORTED, + "InnoDB: innodb_compression_algorithm = %lu unsupported.\n" + "InnoDB: liblzo is not installed. \n", + compression_algorithm); + DBUG_RETURN(1); + } +#endif + + DBUG_RETURN(0); +} diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h index 905d4a0afa7..c428b6a7348 100644 --- a/storage/innobase/include/srv0srv.h +++ b/storage/innobase/include/srv0srv.h @@ -264,6 +264,9 @@ extern long srv_mtflush_threads; /* If this flag is TRUE, then we will use multi threaded flush. */ extern my_bool srv_use_mtflush; +extern ulong srv_have_lz4; +extern ulong srv_have_lzo; + #ifdef __WIN__ extern ibool srv_use_native_conditions; #endif /* __WIN__ */ @@ -916,6 +919,8 @@ struct export_var_t{ compression */ ib_int64_t innodb_pages_page_compression_error;/*!< Number of page compression errors */ + ulint innodb_have_lz4; /*!< HAVE_LZ4 */ + ulint innodb_have_lzo; /*!< HAVE_LZO */ }; /** Thread slot in the thread table. */ diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 05b9d5e518c..3a6a05a0c03 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -224,12 +224,7 @@ struct os_aio_slot_t{ int n_bytes; /* bytes written/read. */ int ret; /* AIO return code */ #endif /* WIN_ASYNC_IO */ -#ifdef HAVE_LZO - byte lzo_mem[LZO1X_1_15_MEM_COMPRESS]; -#else - byte lzo_mem[1]; /* Temporal memory used by LZO */ -#endif - + byte *lzo_mem; /* Temporal memory used by LZO */ }; /** The asynchronous i/o array structure */ @@ -366,6 +361,17 @@ os_slot_alloc_page_buf( /*===================*/ os_aio_slot_t* slot); /*!< in: slot structure */ +#ifdef HAVE_LZO +/**********************************************************************//** +Allocate memory for temporal memory used for page compression when +LZO compression method is used */ +UNIV_INTERN +void +os_slot_alloc_lzo_mem( +/*===================*/ + os_aio_slot_t* slot); /*!< in: slot structure */ +#endif + /****************************************************************//** Does error handling when a file operation fails. @return TRUE if we should retry the operation */ @@ -4094,6 +4100,11 @@ os_aio_array_free( ut_free(slot->page_compression_page); slot->page_compression_page = NULL; } + + if (slot->lzo_mem) { + ut_free(slot->lzo_mem); + slot->lzo_mem = NULL; + } } ut_free(array->slots); @@ -4548,7 +4559,11 @@ found: os_slot_alloc_page_buf(slot); } - ut_ad(slot->page_buf); +#ifdef HAVE_LZO + if (innodb_compression_algorithm == 3 && slot->lzo_mem == NULL) { + os_slot_alloc_lzo_mem(slot); + } +#endif /* Call page compression */ tmp = fil_compress_page(fil_node_get_space_id(slot->message1), @@ -5232,7 +5247,11 @@ os_aio_windows_handle( if (slot->page_buf == NULL) { os_slot_alloc_page_buf(slot); } - ut_ad(slot->page_buf); +#ifdef HAVE_LZO + if (innodb_compression_algorithm == 3 && slot->lzo_mem == NULL) { + os_slot_alloc_lzo_mem(slot); + } +#endif if (slot->type == OS_FILE_READ) { if (fil_page_is_compressed(slot->buf)) { @@ -5346,7 +5365,12 @@ retry: if (slot->page_buf == NULL) { os_slot_alloc_page_buf(slot); } - ut_ad(slot->page_buf); + +#ifdef HAVE_LZO + if (innodb_compression_algorithm == 3 && slot->lzo_mem == NULL) { + os_slot_alloc_lzo_mem(slot); + } +#endif if (slot->type == OS_FILE_READ) { if (fil_page_is_compressed(slot->buf)) { @@ -6351,9 +6375,27 @@ os_slot_alloc_page_buf( byte* cbuf2; byte* cbuf; + ut_a(slot != NULL); /* We allocate extra to avoid memory overwrite on compression */ cbuf2 = static_cast<byte *>(ut_malloc(UNIV_PAGE_SIZE*2)); cbuf = static_cast<byte *>(ut_align(cbuf2, UNIV_PAGE_SIZE)); slot->page_compression_page = static_cast<byte *>(cbuf2); slot->page_buf = static_cast<byte *>(cbuf); + ut_a(slot->page_buf != NULL); +} + +#ifdef HAVE_LZO +/**********************************************************************//** +Allocate memory for temporal memory used for page compression when +LZO compression method is used */ +UNIV_INTERN +void +os_slot_alloc_lzo_mem( +/*===================*/ + os_aio_slot_t* slot) /*!< in: slot structure */ +{ + ut_a(slot != NULL); + slot->lzo_mem = static_cast<byte *>(ut_malloc(LZO1X_1_15_MEM_COMPRESS)); + ut_a(slot->lzo_mem != NULL); } +#endif diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index 71edadea9fc..d7d91b078e8 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -209,6 +209,18 @@ UNIV_INTERN uint srv_flush_log_at_timeout = 1; UNIV_INTERN ulong srv_page_size = UNIV_PAGE_SIZE_DEF; UNIV_INTERN ulong srv_page_size_shift = UNIV_PAGE_SIZE_SHIFT_DEF; +#ifdef HAVE_LZ4 +UNIV_INTERN ulong srv_have_lz4 = 1; +#else +UNIV_INTERN ulong srv_have_lz4 = 0; +#endif + +#ifdef HAVE_LZO +UNIV_INTERN ulong srv_have_lzo = 1; +#else +UNIV_INTERN ulong srv_have_lzo = 0; +#endif + /* Try to flush dirty pages so as to avoid IO bursts at the checkpoints. */ UNIV_INTERN char srv_adaptive_flushing = TRUE; @@ -1422,6 +1434,9 @@ srv_export_innodb_status(void) #endif export_vars.innodb_page_size = UNIV_PAGE_SIZE; + export_vars.innodb_have_lz4 = srv_have_lz4; + export_vars.innodb_have_lzo = srv_have_lzo; + export_vars.innodb_log_waits = srv_stats.log_waits; export_vars.innodb_os_log_written = srv_stats.os_log_written; diff --git a/storage/xtradb/CMakeLists.txt b/storage/xtradb/CMakeLists.txt index c3acfb85fb3..fa3ed7b6899 100644 --- a/storage/xtradb/CMakeLists.txt +++ b/storage/xtradb/CMakeLists.txt @@ -21,8 +21,8 @@ INCLUDE(CheckCSourceRuns) INCLUDE(lz4) INCLUDE(lzo) -MYSQL_CHECK_LZ4_STATIC() -MYSQL_CHECK_LZO_STATIC() +MYSQL_CHECK_LZ4() +MYSQL_CHECK_LZO() # OS tests IF(UNIX) diff --git a/storage/xtradb/fil/fil0pagecompress.cc b/storage/xtradb/fil/fil0pagecompress.cc index 836920a5818..6ca6491cc4f 100644 --- a/storage/xtradb/fil/fil0pagecompress.cc +++ b/storage/xtradb/fil/fil0pagecompress.cc @@ -173,6 +173,10 @@ fil_compress_page( } break; + case PAGE_UNCOMPRESSED: + *out_len = len; + return (buf); + break; default: ut_error; break; diff --git a/storage/xtradb/handler/ha_innodb.cc b/storage/xtradb/handler/ha_innodb.cc index 8bc8e6d46d7..cf39f84b55f 100644 --- a/storage/xtradb/handler/ha_innodb.cc +++ b/storage/xtradb/handler/ha_innodb.cc @@ -654,6 +654,20 @@ static int innobase_checkpoint_state(handlerton *hton, bool disable) return 0; } +/*************************************************************//** +Check for a valid value of innobase_compression_algorithm. +@return 0 for valid innodb_compression_algorithm. */ +static +int +innodb_compression_algorithm_validate( +/*==================================*/ + THD* thd, /*!< in: thread handle */ + struct st_mysql_sys_var* var, /*!< in: pointer to system + variable */ + void* save, /*!< out: immediate result + for update function */ + struct st_mysql_value* value); /*!< in: incoming string */ + static const char innobase_hton_name[]= "InnoDB"; static MYSQL_THDVAR_BOOL(support_xa, PLUGIN_VAR_OPCMDARG, @@ -919,6 +933,10 @@ static SHOW_VAR innodb_status_variables[]= { (char*) &export_vars.innodb_page_compressed_trim_op_saved, SHOW_LONGLONG}, {"num_pages_page_decompressed", (char*) &export_vars.innodb_pages_page_decompressed, SHOW_LONGLONG}, + {"have_lz4", + (char*) &export_vars.innodb_have_lz4, SHOW_LONG}, + {"have_lzo", + (char*) &export_vars.innodb_have_lzo, SHOW_LONG}, {NullS, NullS, SHOW_LONG} }; @@ -3373,6 +3391,24 @@ innobase_init( } } +#ifndef HAVE_LZ4 + if (innodb_compression_algorithm == PAGE_LZ4_ALGORITHM) { + sql_print_error("InnoDB: innodb_compression_algorithm = %lu unsupported.\n" + "InnoDB: liblz4 is not installed. \n", + innodb_compression_algorithm); + goto error; + } +#endif + +#ifndef HAVE_LZO + if (innodb_compression_algorithm == PAGE_LZO_ALGORITHM) { + sql_print_error("InnoDB: innodb_compression_algorithm = %lu unsupported.\n" + "InnoDB: liblzo is not installed. \n", + innodb_compression_algorithm); + goto error; + } +#endif + os_innodb_umask = (ulint) my_umask; /* First calculate the default path for innodb_data_home_dir etc., @@ -18200,9 +18236,21 @@ static TYPELIB page_compression_algorithms_typelib= static MYSQL_SYSVAR_ENUM(compression_algorithm, innodb_compression_algorithm, PLUGIN_VAR_OPCMDARG, "Compression algorithm used on page compression. One of: none, zlib, lz4, or lzo", - NULL, NULL, default_compression_algorithm, + innodb_compression_algorithm_validate, NULL, default_compression_algorithm, &page_compression_algorithms_typelib); +static MYSQL_SYSVAR_ULONG(have_lz4, srv_have_lz4, + PLUGIN_VAR_READONLY, + "InnoDB compiled support with liblz4", + NULL, NULL, srv_have_lz4, + 0, 1, 0); + +static MYSQL_SYSVAR_ULONG(have_lzo, srv_have_lzo, + PLUGIN_VAR_READONLY, + "InnoDB compiled support with liblzo", + NULL, NULL, srv_have_lzo, + 0, 1, 0); + static MYSQL_SYSVAR_LONG(mtflush_threads, srv_mtflush_threads, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "Number of multi-threaded flush threads", @@ -18417,6 +18465,9 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(compression_algorithm), MYSQL_SYSVAR(mtflush_threads), MYSQL_SYSVAR(use_mtflush), + MYSQL_SYSVAR(have_lz4), + MYSQL_SYSVAR(have_lzo), + NULL }; @@ -18917,12 +18968,83 @@ int ha_innobase::multi_range_read_explain_info(uint mrr_mode, char *str, size_t return ds_mrr.dsmrr_explain_info(mrr_mode, str, size); } -/* +/* A helper function used only in index_cond_func_innodb */ bool ha_innobase::is_thd_killed() -{ +{ return thd_kill_level(user_thd); } +/*************************************************************//** +Check for a valid value of innobase_compression_algorithm. +@return 0 for valid innodb_compression_algorithm. */ +static +int +innodb_compression_algorithm_validate( +/*==================================*/ + THD* thd, /*!< in: thread handle */ + struct st_mysql_sys_var* var, /*!< in: pointer to system + variable */ + void* save, /*!< out: immediate result + for update function */ + struct st_mysql_value* value) /*!< in: incoming string */ +{ + long compression_algorithm; + DBUG_ENTER("innobase_compression_algorithm_validate"); + + if (value->value_type(value) == MYSQL_VALUE_TYPE_STRING) { + char buff[STRING_BUFFER_USUAL_SIZE]; + const char *str; + int length= sizeof(buff); + + if (!(str= value->val_str(value, buff, &length))) { + DBUG_RETURN(1); + } + + if ((compression_algorithm= (long)find_type(str, &page_compression_algorithms_typelib, 0) - 1) < 0) { + DBUG_RETURN(1); + } + } else { + long long tmp; + + if (value->val_int(value, &tmp)) { + DBUG_RETURN(1); + } + + if (tmp < 0 || tmp >= page_compression_algorithms_typelib.count) { + DBUG_RETURN(1); + } + + compression_algorithm= (long) tmp; + } + + *reinterpret_cast<ulong*>(save) = compression_algorithm; + +#ifndef HAVE_LZ4 + if (compression_algorithm == PAGE_LZ4_ALGORITHM) { + push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + HA_ERR_UNSUPPORTED, + "InnoDB: innodb_compression_algorithm = %lu unsupported.\n" + "InnoDB: liblz4 is not installed. \n", + compression_algorithm); + DBUG_RETURN(1); + } +#endif + +#ifndef HAVE_LZO + if (compression_algorithm == PAGE_LZO_ALGORITHM) { + push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + HA_ERR_UNSUPPORTED, + "InnoDB: innodb_compression_algorithm = %lu unsupported.\n" + "InnoDB: liblzo is not installed. \n", + compression_algorithm); + DBUG_RETURN(1); + } +#endif + + DBUG_RETURN(0); +} + + diff --git a/storage/xtradb/include/srv0srv.h b/storage/xtradb/include/srv0srv.h index a02c8a96e1a..f56d7b805f6 100644 --- a/storage/xtradb/include/srv0srv.h +++ b/storage/xtradb/include/srv0srv.h @@ -282,6 +282,9 @@ extern long srv_mtflush_threads; /* If this flag is TRUE, then we will use multi threaded flush. */ extern my_bool srv_use_mtflush; +extern ulong srv_have_lz4; +extern ulong srv_have_lzo; + /** Server undo tablespaces directory, can be absolute path. */ extern char* srv_undo_dir; @@ -1127,6 +1130,8 @@ struct export_var_t{ compression */ ib_int64_t innodb_pages_page_compression_error;/*!< Number of page compression errors */ + ulint innodb_have_lz4; /*!< HAVE_LZ4 */ + ulint innodb_have_lzo; /*!< HAVE_LZO */ }; /** Thread slot in the thread table. */ diff --git a/storage/xtradb/os/os0file.cc b/storage/xtradb/os/os0file.cc index fe81354ad15..e7fdb3e37b9 100644 --- a/storage/xtradb/os/os0file.cc +++ b/storage/xtradb/os/os0file.cc @@ -233,12 +233,7 @@ struct os_aio_slot_t{ int n_bytes; /* bytes written/read. */ int ret; /* AIO return code */ #endif /* WIN_ASYNC_IO */ -#ifdef HAVE_LZO - byte lzo_mem[LZO1X_1_15_MEM_COMPRESS]; -#else - byte lzo_mem[1]; /* Temporal memory used by LZO */ -#endif - + byte *lzo_mem; /* Temporal memory used by LZO */ }; /** The asynchronous i/o array structure */ @@ -366,6 +361,17 @@ os_slot_alloc_page_buf( /*===================*/ os_aio_slot_t* slot); /*!< in: slot structure */ +#ifdef HAVE_LZO +/**********************************************************************//** +Allocate memory for temporal memory used for page compression when +LZO compression method is used */ +UNIV_INTERN +void +os_slot_alloc_lzo_mem( +/*===================*/ + os_aio_slot_t* slot); /*!< in: slot structure */ +#endif + /****************************************************************//** Does error handling when a file operation fails. @return TRUE if we should retry the operation */ @@ -4202,6 +4208,11 @@ os_aio_array_free( ut_free(slot->page_compression_page); slot->page_compression_page = NULL; } + + if (slot->lzo_mem) { + ut_free(slot->lzo_mem); + slot->lzo_mem = NULL; + } } ut_free(array->slots); @@ -4669,7 +4680,11 @@ found: os_slot_alloc_page_buf(slot); } - ut_ad(slot->page_buf); +#ifdef HAVE_LZO + if (innodb_compression_algorithm == 3 && slot->lzo_mem == NULL) { + os_slot_alloc_lzo_mem(slot); + } +#endif /* Call page compression */ tmp = fil_compress_page(fil_node_get_space_id(slot->message1), @@ -5299,8 +5314,12 @@ os_aio_windows_handle( if (slot->page_buf == NULL) { os_slot_alloc_page_buf(slot); } - ut_ad(slot->page_buf); +#ifdef HAVE_LZO + if (innodb_compression_algorithm == 3 && slot->lzo_mem == NULL) { + os_slot_alloc_lzo_mem(slot); + } +#endif if (slot->type == OS_FILE_READ) { if (fil_page_is_compressed(slot->buf)) { fil_decompress_page(slot->page_buf, slot->buf, slot->len, slot->write_size); @@ -5413,8 +5432,12 @@ retry: if (slot->page_buf == NULL) { os_slot_alloc_page_buf(slot); } - ut_ad(slot->page_buf); +#ifdef HAVE_LZO + if (innodb_compression_algorithm == 3 && slot->lzo_mem == NULL) { + os_slot_alloc_lzo_mem(slot); + } +#endif if (slot->type == OS_FILE_READ) { if (fil_page_is_compressed(slot->buf)) { fil_decompress_page(slot->page_buf, slot->buf, slot->len, slot->write_size); @@ -6459,9 +6482,27 @@ os_slot_alloc_page_buf( byte* cbuf2; byte* cbuf; + ut_a(slot != NULL); /* We allocate extra to avoid memory overwrite on compression */ cbuf2 = static_cast<byte *>(ut_malloc(UNIV_PAGE_SIZE*2)); cbuf = static_cast<byte *>(ut_align(cbuf2, UNIV_PAGE_SIZE)); slot->page_compression_page = static_cast<byte *>(cbuf2); slot->page_buf = static_cast<byte *>(cbuf); + ut_a(slot->page_buf != NULL); +} + +#ifdef HAVE_LZO +/**********************************************************************//** +Allocate memory for temporal memory used for page compression when +LZO compression method is used */ +UNIV_INTERN +void +os_slot_alloc_lzo_mem( +/*===================*/ + os_aio_slot_t* slot) /*!< in: slot structure */ +{ + ut_a(slot != NULL); + slot->lzo_mem = static_cast<byte *>(ut_malloc(LZO1X_1_15_MEM_COMPRESS)); + ut_a(slot->lzo_mem != NULL); } +#endif diff --git a/storage/xtradb/srv/srv0srv.cc b/storage/xtradb/srv/srv0srv.cc index 7c1058f536f..20b58077958 100644 --- a/storage/xtradb/srv/srv0srv.cc +++ b/storage/xtradb/srv/srv0srv.cc @@ -237,6 +237,18 @@ UNIV_INTERN ulong srv_page_size = UNIV_PAGE_SIZE_DEF; UNIV_INTERN ulong srv_page_size_shift = UNIV_PAGE_SIZE_SHIFT_DEF; UNIV_INTERN char srv_use_global_flush_log_at_trx_commit = TRUE; +#ifdef HAVE_LZ4 +UNIV_INTERN ulong srv_have_lz4 = 1; +#else +UNIV_INTERN ulong srv_have_lz4 = 0; +#endif + +#ifdef HAVE_LZO +UNIV_INTERN ulong srv_have_lzo = 1; +#else +UNIV_INTERN ulong srv_have_lzo = 0; +#endif + /* Try to flush dirty pages so as to avoid IO bursts at the checkpoints. */ UNIV_INTERN char srv_adaptive_flushing = TRUE; @@ -1801,6 +1813,9 @@ srv_export_innodb_status(void) #endif export_vars.innodb_page_size = UNIV_PAGE_SIZE; + export_vars.innodb_have_lz4 = srv_have_lz4; + export_vars.innodb_have_lzo = srv_have_lzo; + export_vars.innodb_log_waits = srv_stats.log_waits; export_vars.innodb_os_log_written = srv_stats.os_log_written; |