# Tests for PERFORMANCE_SCHEMA

--source include/have_log_bin.inc
--source include/not_embedded.inc
--source include/have_perfschema.inc
--source include/master-slave.inc

--disable_warnings
drop table if exists test.t1;
--sync_slave_with_master
reset master;
--enable_warnings

create table test.t1(a int);
drop table test.t1;

--source include/show_binlog_events.inc

# Notes
#
# The point of this test is to make sure code is properly instrumented,
# where instruments have the proper key (binlog or relaylog),
# it is not to dive into statistics for each instruments.
# Different test execution sequence in different platforms do make the
# results vary, making the test results very sensitive to changes.
# To ensure robustness:
# - log file rotation is limited to file .000001 and .000002
# - statistics are normalized to "NONE" or "MANY"
# - statistics on ::update_cond conditions are not collected,
#   since this is too much dependent on execution.
# - statistics on COND_binlog_background_thread and COND_xid_list are not
#   collected, as they depend on exact timing for background binlog
#   checkpointing operations.
#

connection master;

select
  substring(file_name, locate("master-", file_name)) as FILE_NAME,
  EVENT_NAME,
  if (count_read > 0, "MANY", "NONE") as COUNT_READ,
  if (count_write > 0,"MANY", "NONE") as COUNT_WRITE,
  if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ,
  if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE
  from performance_schema.file_summary_by_instance
  where file_name like "%master-%" order by file_name;

select * from performance_schema.file_summary_by_instance
  where file_name like "%slave-%" order by file_name;

-- echo "Expect a master binlog + binlog_index"

select
  substring(file_name, locate("master-", file_name)) as FILE_NAME,
  EVENT_NAME,
  if (count_read > 0, "MANY", "NONE") as COUNT_READ,
  if (count_write > 0,"MANY", "NONE") as COUNT_WRITE,
  if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ,
  if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE
  from performance_schema.file_summary_by_instance
  where event_name like "%binlog%" order by file_name;

select
  EVENT_NAME,
  if (count_read > 0, "MANY", "NONE") as COUNT_READ,
  if (count_write > 0,"MANY", "NONE") as COUNT_WRITE,
  if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ,
  if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE
  from performance_schema.file_summary_by_event_name
  where event_name like "%binlog%" order by event_name;

select
  EVENT_NAME,
  if (count_star > 0, "MANY", "NONE") as COUNT_STAR
  from performance_schema.events_waits_summary_global_by_event_name
  where event_name like "%MYSQL_BIN_LOG%"
  and event_name not like "%MYSQL_BIN_LOG::update_cond"
  and event_name not like "%MYSQL_BIN_LOG::COND_binlog_background_thread%"
  and event_name not like "%MYSQL_BIN_LOG::COND_xid_list"
  order by event_name;

-- echo "Expect no slave relay log"

select * from performance_schema.file_summary_by_instance
  where event_name like "%relaylog%" order by file_name;

select * from performance_schema.file_summary_by_event_name
  where event_name like "%relaylog%" order by event_name;

select * from performance_schema.events_waits_summary_global_by_event_name
  where event_name like "%MYSQL_RELAY_LOG%"
  and event_name not like "%MYSQL_RELAY_LOG::update_cond"
  order by event_name;

sync_slave_with_master;
-- echo "============ Performance schema on slave ============"

select * from performance_schema.file_summary_by_instance
  where file_name like "%master-%" order by file_name;

select
  substring(file_name, locate("slave-", file_name)) as FILE_NAME,
  EVENT_NAME,
  if (count_read > 0, "MANY", "NONE") as COUNT_READ,
  if (count_write > 0,"MANY", "NONE") as COUNT_WRITE,
  if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ,
  if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE
  from performance_schema.file_summary_by_instance
  where file_name like "%slave-%"
  and (file_name not like "%slave-relay-bin.0%"
       or file_name like "%slave-relay-bin.000001"
       or file_name like "%slave-relay-bin.000002")
  order by file_name;

-- echo "Expect a slave binlog + binlog_index"

select
  substring(file_name, locate("slave-", file_name)) as FILE_NAME,
  EVENT_NAME,
  if (count_read > 0, "MANY", "NONE") as COUNT_READ,
  if (count_write > 0,"MANY", "NONE") as COUNT_WRITE,
  if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ,
  if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE
  from performance_schema.file_summary_by_instance
  where event_name like "%binlog%" order by file_name;

select
  EVENT_NAME,
  if (count_read > 0, "MANY", "NONE") as COUNT_READ,
  if (count_write > 0,"MANY", "NONE") as COUNT_WRITE,
  if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ,
  if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE
  from performance_schema.file_summary_by_event_name
  where event_name like "%binlog%" order by event_name;

select
  EVENT_NAME,
  if (count_star > 0, "MANY", "NONE") as COUNT_STAR
  from performance_schema.events_waits_summary_global_by_event_name
  where event_name like "%MYSQL_BIN_LOG%"
  and event_name not like "%MYSQL_BIN_LOG::update_cond"
  and event_name not like "%MYSQL_BIN_LOG::COND_binlog_background_thread%"
  and event_name not like "%MYSQL_BIN_LOG::COND_xid_list"
  order by event_name;

-- echo "Expect a slave relay log"

select
  substring(file_name, locate("slave-", file_name)) as FILE_NAME,
  EVENT_NAME,
  if (count_read > 0, "MANY", "NONE") as COUNT_READ,
  if (count_write > 0,"MANY", "NONE") as COUNT_WRITE,
  if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ,
  if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE
  from performance_schema.file_summary_by_instance
  where event_name like "%relaylog%"
  and (file_name not like "%slave-relay-bin.0%"
       or file_name like "%slave-relay-bin.000001"
       or file_name like "%slave-relay-bin.000002")
  order by file_name;

select
  EVENT_NAME,
  if (count_read > 0, "MANY", "NONE") as COUNT_READ,
  if (count_write > 0,"MANY", "NONE") as COUNT_WRITE,
  if (sum_number_of_bytes_read > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_READ,
  if (sum_number_of_bytes_write > 0, "MANY", "NONE") as SUM_NUMBER_OF_BYTES_WRITE
  from performance_schema.file_summary_by_event_name
  where event_name like "%relaylog%" order by event_name;

select
  EVENT_NAME,
  if (count_star > 0, "MANY", "NONE") as COUNT_STAR
  from performance_schema.events_waits_summary_global_by_event_name
  where event_name like "%MYSQL_RELAY_LOG%"
  and event_name not like "%MYSQL_RELAY_LOG::update_cond"
  order by event_name;

--source include/stop_slave.inc

