mirror of
https://github.com/MariaDB/server.git
synced 2025-07-07 06:01:31 +03:00
Before this fix, the test myisam_file_io executed: - (a) an update on setup_instrument to disable non myisam file io instruments - (b) a truncate on events_waits_history_long and later - (c) a select on events_waits_history_long Surprisingly, events that were supposed to be disabled in (a) and removed in (b) still were found in (c). This happened for events such as wait/io/file/innodb/innodb_data_file fil0fil.c: sync because the sync was started before (a) and completed after (b), and as a consequence was added in the performance schema history, as expected. Presence of these records in the history made the test fail. This fix makes the test script more robust to account for extra spill waits records in (c).
75 lines
2.5 KiB
Plaintext
75 lines
2.5 KiB
Plaintext
# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; version 2 of the License.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software Foundation,
|
|
# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
|
|
|
# Tests for PERFORMANCE_SCHEMA
|
|
|
|
--source include/not_embedded.inc
|
|
--source include/have_perfschema.inc
|
|
|
|
# Setup
|
|
|
|
update performance_schema.setup_instruments set enabled='NO';
|
|
update performance_schema.setup_instruments set enabled='YES'
|
|
where name like "wait/io/file/myisam/%";
|
|
|
|
update performance_schema.setup_consumers
|
|
set enabled='YES';
|
|
|
|
truncate table performance_schema.events_waits_history_long;
|
|
|
|
# Reset lost counters to a known state
|
|
flush status;
|
|
|
|
# Code to test
|
|
|
|
--disable_warnings
|
|
drop table if exists test.no_index_tab;
|
|
--enable_warnings
|
|
|
|
create table test.no_index_tab ( a varchar(255), b int ) engine=myisam;
|
|
insert into no_index_tab set a = 'foo', b = 1;
|
|
insert into no_index_tab set a = 'foo', b = 1;
|
|
insert into no_index_tab set a = 'foo', b = 1;
|
|
|
|
# Verification
|
|
# Note that mi_create.c contains mysql_file_tell() calls in debug only,
|
|
# so the result are filtered to remove 'tell'.
|
|
# Note that even after setting other instruments to enabled='NO'
|
|
# and truncating the events_waits_history_long table,
|
|
# some events -- that were already started but not completed --
|
|
# for other instruments could still be added in the history.
|
|
# To protect against that, an extra where clause
|
|
# "and event_name like "wait/io/file/myisam/%"
|
|
# is added to the select to filter out the result.
|
|
|
|
select event_name,
|
|
left(source, locate(":", source)) as short_source,
|
|
operation, number_of_bytes,
|
|
substring(object_name, locate("no_index_tab", object_name)) as short_name
|
|
from performance_schema.events_waits_history_long
|
|
where operation not like "tell"
|
|
and event_name like "wait/io/file/myisam/%"
|
|
order by thread_id, event_id;
|
|
|
|
# In case of failures, this will tell if file io are lost.
|
|
show status like 'performance_schema_%';
|
|
|
|
# Cleanup
|
|
|
|
update performance_schema.setup_instruments set enabled='YES';
|
|
|
|
drop table test.no_index_tab;
|
|
|