mariadb/mysql-test/suite/perfschema/t/alter_table_progress.test
2024-10-03 09:31:39 +03:00

151 lines
3.5 KiB
Text

# Tests for PERFORMANCE_SCHEMA
--source include/not_embedded.inc
--source include/have_innodb.inc
--source include/have_perfschema.inc
--source include/have_debug.inc
--source include/have_debug_sync.inc
# Presence of the query cache changes query stages,
# causing noise in the test output
#--source include/have_query_cache_disabled.inc
# Setup
connect (con1, localhost, root, , );
let $con1_THREAD_ID=`select thread_id from performance_schema.threads
where PROCESSLIST_ID = connection_id()`;
--disable_warnings
drop table if exists t1;
--enable_warnings
create table t1(a int) engine = myisam;
insert into t1 values (1), (2), (3), (4), (5);
--connection default
update performance_schema.threads
set instrumented = 'NO'
where processlist_id = connection_id();
truncate table performance_schema.events_statements_history_long;
truncate table performance_schema.events_stages_history_long;
--disable_cursor_protocol
--disable_query_log
eval select $con1_THREAD_ID into @con1_thread_id;
--enable_query_log
--enable_cursor_protocol
--connection con1
# ALTER TABLE statement to inspect,
# execution should instrument progress
SET DEBUG_SYNC='RESET';
SET DEBUG_SYNC='copy_data_between_tables_before SIGNAL found_row WAIT_FOR wait_row EXECUTE 5';
--send ALTER TABLE t1 engine = innodb;
--connection default
SET DEBUG_SYNC='now WAIT_FOR found_row';
# Find the statement id of the ALTER TABLE
--disable_cursor_protocol
--enable_prepare_warnings
select event_id from performance_schema.events_statements_current
where thread_id = @con1_thread_id into @con1_stmt_id;
--disable_prepare_warnings
--enable_cursor_protocol
# completed 0
select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
from performance_schema.events_stages_current
where (thread_id = @con1_thread_id);
SET DEBUG_SYNC='now SIGNAL wait_row';
#======
SET DEBUG_SYNC='now WAIT_FOR found_row';
# completed 1
select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
from performance_schema.events_stages_current
where (thread_id = @con1_thread_id);
SET DEBUG_SYNC='now SIGNAL wait_row';
#======
SET DEBUG_SYNC='now WAIT_FOR found_row';
# completed 2
select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
from performance_schema.events_stages_current
where (thread_id = @con1_thread_id);
SET DEBUG_SYNC='now SIGNAL wait_row';
#======
SET DEBUG_SYNC='now WAIT_FOR found_row';
# completed 3
select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
from performance_schema.events_stages_current
where (thread_id = @con1_thread_id);
SET DEBUG_SYNC='now SIGNAL wait_row';
#======
SET DEBUG_SYNC='now WAIT_FOR found_row';
# completed 4
select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
from performance_schema.events_stages_current
where (thread_id = @con1_thread_id);
SET DEBUG_SYNC='now SIGNAL wait_row';
#======
--connection con1
# Complete the ALTER TABLE statement.
--reap
# Make sure the ALTER TABLE cleanup is executed,
# as the last stages are after writing back to the client,
# and done asynchronously from the last 'reap'.
select "After payload";
--connection default
--echo # Dumping ALTER TABLE stages
# Print all stages for this ALTER TABLE statement
select EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
from performance_schema.events_stages_history_long
where (thread_id = @con1_thread_id)
and (nesting_event_id = @con1_stmt_id)
order by thread_id, event_id;
SET DEBUG_SYNC='RESET';
--connection con1
drop table t1;
--disconnect con1
--connection default
update performance_schema.threads
set instrumented = 'YES'
where processlist_id = connection_id();