mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
ac24289e66
The table option page_compression_level is something that only affects future writes, not actually the data format. Therefore, we can allow instant changes of this option. Similarly, the table option page_compressed can be set on a previously uncompressed table without rebuilding the table, because an uncompressed page would be considered valid when reading a page_compressed table. Removing the page_compressed option will continue to require the table to be rebuilt. ha_innobase_inplace_ctx::page_compression_level: The requested page_compression_level at the start of ALTER TABLE, or 0 if page_compressed=OFF. alter_options_need_rebuild(): Renamed from create_option_need_rebuild(). Allow page_compression_level and page_compressed to be changed as above, without rebuilding the table. ha_innobase::check_if_supported_inplace_alter(): Allow ALGORITHM=INSTANT for ALTER_OPTIONS if the table is not to be rebuilt. If rebuild is needed, set ha_alter_info->unsupported_reason. innobase_page_compression_try(): Update SYS_TABLES.TYPE according to the table flags, for an instant change of page_compression_level or page_compressed. commit_cache_norebuild(): Adjust dict_table_t::flags, fil_space_t::flags and (if needed) FSP_SPACE_FLAGS if page_compression_level was specified.
195 lines
9 KiB
Text
195 lines
9 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;
|
|
|
|
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;
|