Commit 86975e04 authored by Oleksandr Byelkin's avatar Oleksandr Byelkin

MDEV-7901: re-implement analyze table for low impact

Table before collecting engine independent statistics now is reopened in read mode,
InnoDB allow write operations in this case.
parent ba4ed3ee
#
# MDEV-7901: re-implement analyze table for low impact
#
create table t1 (a int, b int, c int, key IDX1(a), key IDX2(a,b)) engine=innodb;
insert into t1 select seq/10, seq/2, seq from seq_0_to_9;
SET DEBUG_SYNC='statistics_collection_start1 SIGNAL analyzing WAIT_FOR written';
analyze table t1 persistent for all;
connect con1, localhost, root,,;
connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR analyzing';
select count(*) from t1;
count(*)
10
insert into t1 values (333,333,333);
update t1 set a=1;
SET DEBUG_SYNC= 'now SIGNAL written';
connection default;
Table Op Msg_type Msg_text
test.t1 analyze status Engine-independent statistics collected
test.t1 analyze status OK
select count(*) from t1;
count(*)
11
set debug_sync='RESET';
drop table t1;
#
# MDEV-7901: re-implement analyze table for low impact
#
create table t1 (a int, b int, c int, key IDX1(a), key IDX2(a,b)) engine=myisam;
insert into t1 select seq/10, seq/2, seq from seq_0_to_9;
SET DEBUG_SYNC='statistics_collection_start1 SIGNAL analyzing WAIT_FOR written';
analyze table t1 persistent for all;
connect con1, localhost, root,,;
connection con1;
SET DEBUG_SYNC= 'now WAIT_FOR analyzing';
select count(*) from t1;
count(*)
10
insert into t1 values (333,333,333);
SET DEBUG_SYNC= 'now SIGNAL written';
connection default;
Table Op Msg_type Msg_text
test.t1 analyze status Engine-independent statistics collected
test.t1 analyze status Table is already up to date
select count(*) from t1;
count(*)
11
set debug_sync='RESET';
drop table t1;
--source include/have_innodb.inc
--source include/have_sequence.inc
--source include/have_stat_tables.inc
--source include/have_debug_sync.inc
--source include/not_embedded.inc
--echo #
--echo # MDEV-7901: re-implement analyze table for low impact
--echo #
create table t1 (a int, b int, c int, key IDX1(a), key IDX2(a,b)) engine=innodb;
insert into t1 select seq/10, seq/2, seq from seq_0_to_9;
SET DEBUG_SYNC='statistics_collection_start1 SIGNAL analyzing WAIT_FOR written';
send analyze table t1 persistent for all;
connect (con1, localhost, root,,);
--connection con1
SET DEBUG_SYNC= 'now WAIT_FOR analyzing';
select count(*) from t1;
# insert will work even with MyISAM because it allow to append file
insert into t1 values (333,333,333);
# but update now hang for MyISAM bacause can't get lock (InnoDB/XtraDB works)
update t1 set a=1;
SET DEBUG_SYNC= 'now SIGNAL written';
--connection default
--reap
select count(*) from t1;
set debug_sync='RESET';
drop table t1;
--source include/have_sequence.inc
--source include/have_stat_tables.inc
--source include/have_debug_sync.inc
--source include/not_embedded.inc
--echo #
--echo # MDEV-7901: re-implement analyze table for low impact
--echo #
create table t1 (a int, b int, c int, key IDX1(a), key IDX2(a,b)) engine=myisam;
insert into t1 select seq/10, seq/2, seq from seq_0_to_9;
SET DEBUG_SYNC='statistics_collection_start1 SIGNAL analyzing WAIT_FOR written';
send analyze table t1 persistent for all;
connect (con1, localhost, root,,);
--connection con1
SET DEBUG_SYNC= 'now WAIT_FOR analyzing';
select count(*) from t1;
# insert will work even with MyISAM because it allow to append file
insert into t1 values (333,333,333);
SET DEBUG_SYNC= 'now SIGNAL written';
--connection default
--reap
select count(*) from t1;
set debug_sync='RESET';
drop table t1;
This diff is collapsed.
......@@ -15502,6 +15502,7 @@ ha_innobase::store_lock(
/* Use consistent read for checksum table */
if (sql_command == SQLCOM_CHECKSUM
|| (sql_command == SQLCOM_ANALYZE && lock_type == TL_READ)
|| ((srv_locks_unsafe_for_binlog
|| trx->isolation_level <= TRX_ISO_READ_COMMITTED)
&& trx->isolation_level != TRX_ISO_SERIALIZABLE
......
......@@ -16247,7 +16247,7 @@ ha_innobase::store_lock(
/* Use consistent read for checksum table */
if (sql_command == SQLCOM_CHECKSUM
|| sql_command == SQLCOM_CHECKSUM
|| (sql_command == SQLCOM_ANALYZE && lock_type == TL_READ)
|| ((srv_locks_unsafe_for_binlog
|| trx->isolation_level <= TRX_ISO_READ_COMMITTED)
&& trx->isolation_level != TRX_ISO_SERIALIZABLE
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment