mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 11:01:52 +01:00
9bc874a594
Let us introduce the parameter innodb_read_only_compressed that is ON by default, making any ROW_FORMAT=COMPRESSED tables read-only. I developed the ROW_FORMAT=COMPRESSED format based on Heikki Tuuri's rough design between 2005 and 2008. It might have been a good idea back then, but no proper benchmarks were ever run to validate the design or the implementation. The format has been more or less obsolete for years. It limits innodb_page_size to 16384 bytes (the default), and instant ALTER TABLE is not supported. This is the first step towards deprecating and removing write support for ROW_FORMAT=COMPRESSED tables.
199 lines
9.1 KiB
Text
199 lines
9.1 KiB
Text
-- source include/have_innodb.inc
|
|
-- source include/have_innodb_lzo.inc
|
|
-- source include/not_embedded.inc
|
|
|
|
# lzo
|
|
set global innodb_compression_algorithm = 3;
|
|
|
|
--disable_query_log
|
|
SET GLOBAL innodb_read_only_compressed=OFF;
|
|
--enable_query_log
|
|
|
|
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,
|
|
algorithm=instant;
|
|
show warnings;
|
|
show create table innodb_normal;
|
|
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
|
|
alter table innodb_compressed row_format=default page_compressed=1 page_compression_level=8 key_block_size=0, algorithm=instant;
|
|
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
|
|
alter table innodb_compressed row_format=default page_compressed=1 page_compression_level=8 key_block_size=0, algorithm=nocopy;
|
|
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;
|
|
|
|
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;
|
|
|
|
--source include/restart_mysqld.inc
|
|
|
|
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;
|
|
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;
|
|
|
|
--source include/restart_mysqld.inc
|
|
|
|
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;
|
|
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;
|