mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
c9f612dbde
This was done to get more information about where time is spent. Now we can get proper timing for time spent in commit, rollback, binlog write etc. Following stages was added: - Commit - Commit_implicit - Rollback - Rollback implicit - Binlog write - Init for update - This is used instead of "Init" for insert, update and delete. - Staring cleanup Following stages where changed: - "Unlocking tables" stage reset stage to previous stage at end - "binlog write" stage resets stage to previous stage at end - "end" -> "end of update loop" - "cleaning up" -> "Reset for next command" - Added stage_searching_rows_for_update when searching for rows to be deleted. Other things: - Renamed all stages to start with big letter (before there was no consitency) - Increased performance_schema_max_stage_classes from 150 to 160. - Most of the test changes in performance schema comes from renaming of stages. - Removed duplicate output of variables and inital state in a lot of performance schema tests. This was done to make it easier to change a default value for a performance variable without affecting all tests. - Added start_server_variables.test to check configuration - Removed some duplicate "closing tables" stages - Updated position for "stage_init_update" and "stage_updating" for delete, insert and update to be just before update loop (for more exact timing). - Don't set "Checking permissions" twice in a row. - Remove stage_end stage from creating views (not done for create table either). - Updated default performance history size from 10 to 20 because of new stages - Ensure that ps_enabled is correct (to be used in a later patch)
351 lines
13 KiB
PHP
351 lines
13 KiB
PHP
# Tests for the performance schema
|
|
|
|
# =============
|
|
# DOCUMENTATION
|
|
# =============
|
|
|
|
# Verify how events are aggregated into various tables
|
|
#
|
|
# In the thread dimension:
|
|
# - events_waits_summary_by_thread_by_event_name
|
|
# - events_waits_summary_by_account_by_event_name
|
|
# - events_waits_summary_by_user_by_event_name
|
|
# - events_waits_summary_by_host_by_event_name
|
|
# - events_stages_summary_by_thread_by_event_name
|
|
# - events_stages_summary_by_account_by_event_name
|
|
# - events_stages_summary_by_user_by_event_name
|
|
# - events_stages_summary_by_host_by_event_name
|
|
# - events_statements_summary_by_thread_by_event_name
|
|
# - events_statements_summary_by_account_by_event_name
|
|
# - events_statements_summary_by_user_by_event_name
|
|
# - events_statements_summary_by_host_by_event_name
|
|
#
|
|
# Globally:
|
|
# - events_waits_summary_global_by_event_name
|
|
# - events_stages_summary_global_by_event_name
|
|
# - events_statements_summary_global_by_event_name
|
|
#
|
|
# The tests are written with the following helpers:
|
|
# - include/event_aggregate_setup.inc
|
|
# - include/event_aggregate_load.inc
|
|
# - include/event_aggregate_cleanup.inc
|
|
#
|
|
# Helpers are intended to be used as follows.
|
|
#
|
|
# A Typical test t/event_aggregate_xxx.test will consist of:
|
|
# --source ../include/event_aggregate_setup.inc
|
|
# --source ../include/event_aggregate_load.inc
|
|
# --source ../include/event_aggregate_cleanup.inc
|
|
# and a t/event_aggregate_xxx-master.opt file
|
|
#
|
|
# Naming conventions for t/event_aggregate_xxx.test are as follows:
|
|
# t/event_aggregate_<account><user><host>
|
|
#
|
|
# <account> corresponds to different sizing settings for
|
|
# the variable performance-schema-accounts-size
|
|
# - (blank): accounts-size sufficient to represent all records
|
|
# - no_a: accounts-size set to 0
|
|
#
|
|
# <user> corresponds to different sizing settings for
|
|
# the variable performance-schema-users-size
|
|
# - (blank): users-size sufficient to represent all records
|
|
# - no_u: users-size set to 0
|
|
#
|
|
# <host> corresponds to different sizing settings for
|
|
# the variable performance-schema-hosts-size
|
|
# - (blank): hosts-size sufficient to represent all records
|
|
# - no_h: hosts-size set to 0
|
|
|
|
# ========================================
|
|
# HELPER include/event_aggregate_setup.inc
|
|
# ========================================
|
|
|
|
--source include/not_embedded.inc
|
|
--source include/have_perfschema.inc
|
|
--source include/no_protocol.inc
|
|
--source ../include/wait_for_pfs_thread_count.inc
|
|
|
|
--disable_query_log
|
|
create user user1@localhost;
|
|
grant ALL on *.* to user1@localhost;
|
|
create user user2@localhost;
|
|
grant ALL on *.* to user2@localhost;
|
|
create user user3@localhost;
|
|
grant ALL on *.* to user3@localhost;
|
|
create user user4@localhost;
|
|
grant ALL on *.* to user4@localhost;
|
|
|
|
flush privileges;
|
|
|
|
# Purge old users, hosts, user/host from previous tests
|
|
truncate table performance_schema.accounts;
|
|
truncate table performance_schema.users;
|
|
truncate table performance_schema.hosts;
|
|
|
|
# Save the setup
|
|
|
|
--disable_warnings
|
|
drop table if exists test.setup_actors;
|
|
drop table if exists test.t1;
|
|
--enable_warnings
|
|
|
|
create table test.t1(a varchar(64));
|
|
|
|
create table test.setup_actors as
|
|
select * from performance_schema.setup_actors;
|
|
|
|
# Only instrument the user connections
|
|
truncate table performance_schema.setup_actors;
|
|
insert into performance_schema.setup_actors
|
|
set host= 'localhost', user= 'user1', role= '%';
|
|
insert into performance_schema.setup_actors
|
|
set host= 'localhost', user= 'user2', role= '%';
|
|
insert into performance_schema.setup_actors
|
|
set host= 'localhost', user= 'user3', role= '%';
|
|
insert into performance_schema.setup_actors
|
|
set host= 'localhost', user= 'user4', role= '%';
|
|
|
|
update performance_schema.threads set instrumented='NO';
|
|
|
|
# Only instrument a few events of each kind
|
|
update performance_schema.setup_instruments set enabled='NO', timed='NO';
|
|
|
|
update performance_schema.setup_instruments set enabled='YES', timed='YES'
|
|
where name in ('wait/synch/mutex/sql/LOCK_connection_count',
|
|
'wait/synch/mutex/sql/LOCK_user_locks',
|
|
'wait/synch/rwlock/sql/LOCK_grant',
|
|
'wait/io/file/sql/query_log',
|
|
'idle');
|
|
|
|
update performance_schema.setup_instruments set enabled='YES', timed='YES'
|
|
where name in ('stage/sql/Init', 'stage/sql/Init for update',
|
|
'stage/sql/Checking permissions',
|
|
'stage/sql/Opening tables',
|
|
'stage/sql/Closing tables');
|
|
|
|
update performance_schema.setup_instruments set enabled='YES', timed='YES'
|
|
where name in ('statement/sql/select',
|
|
'statement/sql/insert',
|
|
'statement/abstract/new_packet',
|
|
'statement/abstract/Query',
|
|
'statement/com/Quit',
|
|
'statement/com/error');
|
|
|
|
# Start from a known clean state, to avoid noise from previous tests
|
|
flush tables;
|
|
flush status;
|
|
truncate performance_schema.events_waits_summary_by_thread_by_event_name;
|
|
truncate performance_schema.events_waits_summary_by_account_by_event_name;
|
|
truncate performance_schema.events_waits_summary_by_user_by_event_name;
|
|
truncate performance_schema.events_waits_summary_by_host_by_event_name;
|
|
truncate performance_schema.events_waits_summary_global_by_event_name;
|
|
truncate performance_schema.events_waits_history_long;
|
|
|
|
truncate performance_schema.events_stages_summary_by_thread_by_event_name;
|
|
truncate performance_schema.events_stages_summary_by_account_by_event_name;
|
|
truncate performance_schema.events_stages_summary_by_user_by_event_name;
|
|
truncate performance_schema.events_stages_summary_by_host_by_event_name;
|
|
truncate performance_schema.events_stages_summary_global_by_event_name;
|
|
truncate performance_schema.events_stages_history_long;
|
|
|
|
truncate performance_schema.events_statements_summary_by_thread_by_event_name;
|
|
truncate performance_schema.events_statements_summary_by_account_by_event_name;
|
|
truncate performance_schema.events_statements_summary_by_user_by_event_name;
|
|
truncate performance_schema.events_statements_summary_by_host_by_event_name;
|
|
truncate performance_schema.events_statements_summary_global_by_event_name;
|
|
truncate performance_schema.events_statements_history_long;
|
|
|
|
--disable_warnings
|
|
drop procedure if exists dump_thread;
|
|
drop procedure if exists dump_one_thread;
|
|
--enable_warnings
|
|
|
|
delimiter $$;
|
|
|
|
create procedure dump_thread()
|
|
begin
|
|
call dump_one_thread('user1');
|
|
call dump_one_thread('user2');
|
|
call dump_one_thread('user3');
|
|
call dump_one_thread('user4');
|
|
end
|
|
$$
|
|
|
|
create procedure dump_one_thread(in username varchar(64))
|
|
begin
|
|
declare my_thread_id int;
|
|
|
|
set my_thread_id = (select thread_id from performance_schema.threads
|
|
where processlist_user=username);
|
|
|
|
if (my_thread_id is not null) then
|
|
select username, event_name, count_star
|
|
from performance_schema.events_waits_summary_by_thread_by_event_name
|
|
where event_name in ('wait/synch/mutex/sql/LOCK_connection_count',
|
|
'wait/synch/mutex/sql/LOCK_user_locks',
|
|
'wait/synch/rwlock/sql/LOCK_grant',
|
|
'wait/io/file/sql/query_log')
|
|
and thread_id = my_thread_id
|
|
order by event_name;
|
|
else
|
|
select username, "not found" as status;
|
|
end if;
|
|
end
|
|
$$
|
|
|
|
delimiter ;$$
|
|
|
|
prepare dump_waits_account from
|
|
"select user, host, event_name, count_star
|
|
from performance_schema.events_waits_summary_by_account_by_event_name
|
|
where user like \'user%\'
|
|
and event_name in ('wait/synch/mutex/sql/LOCK_connection_count',
|
|
'wait/synch/mutex/sql/LOCK_user_locks',
|
|
'wait/synch/rwlock/sql/LOCK_grant',
|
|
'wait/io/file/sql/query_log')
|
|
order by user, host, event_name;";
|
|
|
|
prepare dump_waits_user from
|
|
"select user, event_name, count_star
|
|
from performance_schema.events_waits_summary_by_user_by_event_name
|
|
where user like \'user%\'
|
|
and event_name in ('wait/synch/mutex/sql/LOCK_connection_count',
|
|
'wait/synch/mutex/sql/LOCK_user_locks',
|
|
'wait/synch/rwlock/sql/LOCK_grant',
|
|
'wait/io/file/sql/query_log')
|
|
order by user, event_name;";
|
|
|
|
prepare dump_waits_host from
|
|
"select host, event_name, count_star
|
|
from performance_schema.events_waits_summary_by_host_by_event_name
|
|
where host=\'localhost\'
|
|
and event_name in ('wait/synch/mutex/sql/LOCK_connection_count',
|
|
'wait/synch/mutex/sql/LOCK_user_locks',
|
|
'wait/synch/rwlock/sql/LOCK_grant',
|
|
'wait/io/file/sql/query_log')
|
|
order by host, event_name;";
|
|
|
|
prepare dump_waits_global from
|
|
"select event_name, count_star
|
|
from performance_schema.events_waits_summary_global_by_event_name
|
|
where event_name in ('wait/synch/mutex/sql/LOCK_connection_count',
|
|
'wait/synch/mutex/sql/LOCK_user_locks',
|
|
'wait/synch/rwlock/sql/LOCK_grant',
|
|
'wait/io/file/sql/query_log')
|
|
order by event_name;";
|
|
|
|
prepare dump_waits_history from
|
|
"select event_name, count(event_name)
|
|
from performance_schema.events_waits_history_long
|
|
where event_name in ('wait/synch/mutex/sql/LOCK_connection_count',
|
|
'wait/synch/mutex/sql/LOCK_user_locks',
|
|
'wait/synch/rwlock/sql/LOCK_grant',
|
|
'wait/io/file/sql/query_log')
|
|
group by event_name order by event_name;";
|
|
|
|
prepare dump_stages_account from
|
|
"select user, host, event_name, count_star
|
|
from performance_schema.events_stages_summary_by_account_by_event_name
|
|
where user like \'user%\'
|
|
and event_name in ('stage/sql/init', 'stage/sql/Init for update',
|
|
'stage/sql/checking permissions',
|
|
'stage/sql/Opening tables',
|
|
'stage/sql/closing tables')
|
|
order by user, host, event_name;";
|
|
|
|
prepare dump_stages_user from
|
|
"select user, event_name, count_star
|
|
from performance_schema.events_stages_summary_by_user_by_event_name
|
|
where user like \'user%\'
|
|
and event_name in ('stage/sql/init', 'stage/sql/Init for update',
|
|
'stage/sql/checking permissions',
|
|
'stage/sql/Opening tables',
|
|
'stage/sql/closing tables')
|
|
order by user, event_name;";
|
|
|
|
prepare dump_stages_host from
|
|
"select host, event_name, count_star
|
|
from performance_schema.events_stages_summary_by_host_by_event_name
|
|
where host=\'localhost\'
|
|
and event_name in ('stage/sql/init', 'stage/sql/Init for update',
|
|
'stage/sql/checking permissions',
|
|
'stage/sql/Opening tables',
|
|
'stage/sql/closing tables')
|
|
order by host, event_name;";
|
|
|
|
prepare dump_stages_global from
|
|
"select event_name, count_star
|
|
from performance_schema.events_stages_summary_global_by_event_name
|
|
where event_name in ('stage/sql/init', 'stage/sql/Init for update',
|
|
'stage/sql/checking permissions',
|
|
'stage/sql/Opening tables',
|
|
'stage/sql/closing tables')
|
|
order by event_name;";
|
|
|
|
prepare dump_stages_history from
|
|
"select event_name, count(event_name)
|
|
from performance_schema.events_stages_history_long
|
|
where event_name in ('stage/sql/init', 'stage/sql/Init for update',
|
|
'stage/sql/checking permissions',
|
|
'stage/sql/Opening tables',
|
|
'stage/sql/closing tables')
|
|
group by event_name order by event_name;";
|
|
|
|
prepare dump_statements_account from
|
|
"select user, host, event_name, count_star
|
|
from performance_schema.events_statements_summary_by_account_by_event_name
|
|
where user like \'user%\'
|
|
and event_name in ('statement/sql/select',
|
|
'statement/sql/insert',
|
|
'statement/com/Quit',
|
|
'statement/com/error')
|
|
order by user, host, event_name;";
|
|
|
|
prepare dump_statements_user from
|
|
"select user, event_name, count_star
|
|
from performance_schema.events_statements_summary_by_user_by_event_name
|
|
where user like \'user%\'
|
|
and event_name in ('statement/sql/select',
|
|
'statement/sql/insert',
|
|
'statement/com/Quit',
|
|
'statement/com/error')
|
|
order by user, event_name;";
|
|
|
|
prepare dump_statements_host from
|
|
"select host, event_name, count_star
|
|
from performance_schema.events_statements_summary_by_host_by_event_name
|
|
where host=\'localhost\'
|
|
and event_name in ('statement/sql/select',
|
|
'statement/sql/insert',
|
|
'statement/com/Quit',
|
|
'statement/com/error')
|
|
order by host, event_name;";
|
|
|
|
prepare dump_statements_global from
|
|
"select event_name, count_star
|
|
from performance_schema.events_statements_summary_global_by_event_name
|
|
where event_name in ('statement/sql/select',
|
|
'statement/sql/insert',
|
|
'statement/com/Quit',
|
|
'statement/com/error')
|
|
order by event_name;";
|
|
|
|
prepare dump_statements_history from
|
|
"select event_name, count(event_name)
|
|
from performance_schema.events_statements_history_long
|
|
where event_name in ('statement/sql/select',
|
|
'statement/sql/insert',
|
|
'statement/com/Quit',
|
|
'statement/com/error')
|
|
group by event_name order by event_name;";
|
|
|
|
prepare dump_users from
|
|
"select * from performance_schema.users where user is not null order by user;";
|
|
|
|
prepare dump_hosts from
|
|
"select * from performance_schema.hosts where host is not null order by host;";
|
|
|
|
prepare dump_accounts from
|
|
"select * from performance_schema.accounts where (user is not null) and (host is not null) order by user, host;";
|
|
|
|
--enable_query_log
|