mariadb/mysql-test/suite/perfschema/t/sizing_growth.test
Sergei Golubchik 06d874ba90 perfschema 5.6.10 initial commit.
5.6 files
2014-05-06 23:22:16 +02:00

478 lines
12 KiB
Text

# Tests for PERFORMANCE_SCHEMA
--source include/not_embedded.inc
--source include/have_perfschema.inc
#
# Important note:
# this test is extremely sensitive to how threads are running inside the server,
# so it has it's own -master.opt file, to enforce it runs alone in mysqld
#
# Setup
flush status;
flush tables;
# Remove to debug
--disable_result_log
# Make sure the internal server caches are all full
select * from performance_schema.mutex_instances;
select * from performance_schema.rwlock_instances;
select * from performance_schema.cond_instances;
select * from performance_schema.file_instances;
select count(*) from performance_schema.mutex_instances
into @v0_mutex_instances;
select count(*) from performance_schema.rwlock_instances
into @v0_rwlock_instances;
select count(*) from performance_schema.cond_instances
into @v0_cond_instances;
select count(*) from performance_schema.file_instances
into @v0_file_instances;
select count(*) from performance_schema.mutex_instances
into @v1_mutex_instances;
select count(*) from performance_schema.rwlock_instances
into @v1_rwlock_instances;
select count(*) from performance_schema.cond_instances
into @v1_cond_instances;
select count(*) from performance_schema.file_instances
into @v1_file_instances;
select count(name), name from performance_schema.mutex_instances
group by name;
select count(name), name from performance_schema.rwlock_instances
group by name;
select count(name), name from performance_schema.cond_instances
group by name;
select count(event_name), event_name from performance_schema.file_instances
group by event_name;
begin;
create table test.t1(a int) engine = innodb;
create table test.t2(a int) engine = innodb;
create table test.t3(a int) engine = innodb;
create table test.t4(a int) engine = innodb;
create table test.t5(a int) engine = innodb;
create table test.t6(a int) engine = innodb;
create table test.t7(a int) engine = innodb;
create table test.t8(a int) engine = innodb;
create table test.t9(a int) engine = innodb;
create table test.t10(a int) engine = innodb;
# Make sure there is at least 1 table handle,
# to fully initialize the storage engine share if needed.
select * from test.t1;
select * from test.t2;
select * from test.t3;
select * from test.t4;
select * from test.t5;
select * from test.t6;
select * from test.t7;
select * from test.t8;
select * from test.t9;
select * from test.t10;
commit;
select count(*) from performance_schema.mutex_instances
into @v2_mutex_instances;
select count(*) from performance_schema.rwlock_instances
into @v2_rwlock_instances;
select count(*) from performance_schema.cond_instances
into @v2_cond_instances;
select count(*) from performance_schema.file_instances
into @v2_file_instances;
select count(name), name from performance_schema.mutex_instances
group by name;
select count(name), name from performance_schema.rwlock_instances
group by name;
select count(name), name from performance_schema.cond_instances
group by name;
select count(event_name), event_name from performance_schema.file_instances
group by event_name;
select @v2_mutex_instances, @v1_mutex_instances, @v0_mutex_instances;
select @v2_rwlock_instances, @v1_rwlock_instances, @v0_rwlock_instances;
select @v2_cond_instances, @v1_cond_instances, @v0_cond_instances;
select @v2_file_instances, @v1_file_instances, @v0_file_instances;
select round((@v2_mutex_instances - @v1_mutex_instances) / 10)
into @mutex_per_share;
select round((@v2_rwlock_instances - @v1_rwlock_instances) / 10)
into @rwlock_per_share;
select round((@v2_cond_instances - @v1_cond_instances) / 10)
into @cond_per_share;
select round((@v2_file_instances - @v1_file_instances) / 10)
into @file_per_share;
connect (con1, localhost, root,,);
select "con1 connected";
connect (con2, localhost, root,,);
select "con2 connected";
connect (con3, localhost, root,,);
select "con3 connected";
connect (con4, localhost, root,,);
select "con4 connected";
connect (con5, localhost, root,,);
select "con5 connected";
connect (con6, localhost, root,,);
select "con6 connected";
connect (con7, localhost, root,,);
select "con7 connected";
connect (con8, localhost, root,,);
select "con8 connected";
connect (con9, localhost, root,,);
select "con9 connected";
connect (con10, localhost, root,,);
select "con10 connected";
connection default;
select count(*) from performance_schema.mutex_instances
into @v3_mutex_instances;
select count(*) from performance_schema.rwlock_instances
into @v3_rwlock_instances;
select count(*) from performance_schema.cond_instances
into @v3_cond_instances;
select count(*) from performance_schema.file_instances
into @v3_file_instances;
select count(name), name from performance_schema.mutex_instances
group by name;
select count(name), name from performance_schema.rwlock_instances
group by name;
select count(name), name from performance_schema.cond_instances
group by name;
select count(event_name), event_name from performance_schema.file_instances
group by event_name;
select @v3_mutex_instances, @v2_mutex_instances;
select @v3_rwlock_instances, @v2_rwlock_instances;
select @v3_cond_instances, @v2_cond_instances;
select @v3_file_instances, @v2_file_instances;
select round((@v3_mutex_instances - @v2_mutex_instances) / 10)
into @mutex_per_con;
select round((@v3_rwlock_instances - @v2_rwlock_instances) / 10)
into @rwlock_per_con;
select round((@v3_cond_instances - @v2_cond_instances) / 10)
into @cond_per_con;
select round((@v3_file_instances - @v2_file_instances) / 10)
into @file_per_con;
--connection con1
lock table test.t1 write, test.t2 write, test.t3 write, test.t4 write,
test.t5 write, test.t6 write, test.t7 write, test.t8 write, test.t9 write,
test.t10 write;
--send
select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
--connection con2
--send
select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
--connection con3
--send
select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
--connection con4
--send
select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
--connection con5
--send
select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
--connection con6
--send
select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
--connection con7
--send
select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
--connection con8
--send
select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
--connection con9
--send
select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
--connection con10
--send
select t1.*, t2.*, t3.*, t4.*, t5.*, t6.*, t7.*, t8.*, t9.*, t10.*
from t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
connection default;
select count(*) from performance_schema.mutex_instances
into @v4_mutex_instances;
select count(*) from performance_schema.rwlock_instances
into @v4_rwlock_instances;
select count(*) from performance_schema.cond_instances
into @v4_cond_instances;
select count(*) from performance_schema.file_instances
into @v4_file_instances;
select count(name), name from performance_schema.mutex_instances
group by name;
select count(name), name from performance_schema.rwlock_instances
group by name;
select count(name), name from performance_schema.cond_instances
group by name;
select count(event_name), event_name from performance_schema.file_instances
group by event_name;
select @v4_mutex_instances, @v3_mutex_instances;
select @v4_rwlock_instances, @v3_rwlock_instances;
select @v4_cond_instances, @v3_cond_instances;
select @v4_file_instances, @v3_file_instances;
select round((@v4_mutex_instances - @v3_mutex_instances) / 10)
into @mutex_per_handle;
select round((@v4_rwlock_instances - @v3_rwlock_instances) / 10)
into @rwlock_per_handle;
select round((@v4_cond_instances - @v3_cond_instances) / 10)
into @cond_per_handle;
select round((@v4_file_instances - @v3_file_instances) / 10)
into @file_per_handle;
--connection con1
--reap
unlock tables;
--connection con2
--reap
--connection con3
--reap
--connection con4
--reap
--connection con5
--reap
--connection con6
--reap
--connection con7
--reap
--connection con8
--reap
--connection con9
--reap
--connection con10
--reap
--disconnect con1
--disconnect con2
--disconnect con3
--disconnect con4
--disconnect con5
--disconnect con6
--disconnect con7
--disconnect con8
--disconnect con9
--disconnect con10
--connection default
drop table test.t1;
drop table test.t2;
drop table test.t3;
drop table test.t4;
drop table test.t5;
drop table test.t6;
drop table test.t7;
drop table test.t8;
drop table test.t9;
drop table test.t10;
--enable_result_log
#
# This test must have *_lost = 0,
# otherwise the measurement is just wrong.
#
show status like "performance_schema%";
#
# Expecting 2:
# - wait/synch/mutex/sql/MDL_wait::LOCK_wait_status
# - wait/synch/mutex/sql/TABLE_SHARE::LOCK_ha_data
# plus mutexes used inside the storage engine
# This is very storage engine dependent
# For innodb:
# - wait/synch/mutex/innodb/autoinc_mutex
# - wait/synch/mutex/innodb/os_mutex
# Note that depending on the platform,
# and the version of the compiler used,
# code in the server may use either native platform atomics
# or a mutex.
# Note also that in DEBUG builds, code uses more mutexes.
# Because of all these parameters,
# this test is disabled, as predicting an exact number is difficult.
#
# commented: select @mutex_per_share <= 5;
#
# Expecting 1:
# - wait/synch/rwlock/sql/MDL_lock::rwlock
# plus rwlocks used inside the storage engine
# This is very storage engine dependent
#
select @rwlock_per_share <= 3;
#
# Expecting 0:
#
select @cond_per_share;
#
# Expecting 1:
# - wait/io/file/sql/FRM
# plus files used inside the storage engine
# This is very storage engine dependent
#
select @file_per_share <= 3;
#
# Expecting 3:
# - wait/synch/mutex/mysys/my_thread_var::mutex
# - wait/synch/mutex/mysys/THR_LOCK::mutex
# - wait/synch/mutex/sql/THD::LOCK_thd_data
#
select @mutex_per_con;
#
# Expecting 1:
# - wait/synch/rwlock/sql/MDL_context::LOCK_waiting_for
#
select @rwlock_per_con;
#
# Expecting 2:
# - wait/synch/cond/mysys/my_thread_var::suspend
# - wait/synch/cond/sql/MDL_context::COND_wait_status
#
select @cond_per_con;
#
# Expecting 0:
#
select @file_per_con;
#
# Expecting 0:
#
select @mutex_per_handle;
#
# Expecting 0:
#
select @rwlock_per_handle;
#
# Expecting 0:
#
select @cond_per_handle;
#
# Expecting 0:
#
select @file_per_handle;
#
# IMPORTANT NOTE:
# when any measurement here changes, the heuristics
# in storage/perfschema/pfs_autosize.cc need to be updated.
# Note that this in turns will lead to different estimations for automated
# sizing, and imply to update the results for sizing_*.
#
# commented: (@mutex_per_share <= 5)
# Mutexes are not instrumented by default,
# not enforcing mutex estimates
select if(
(@rwlock_per_share <= 3)
AND (@cond_per_share = 0)
AND (@file_per_share <= 3)
AND (@mutex_per_con = 3)
AND (@rwlock_per_con = 1)
AND (@cond_per_con = 2)
AND (@file_per_con = 0)
AND (@mutex_per_handle = 0)
AND (@rwlock_per_handle = 0)
AND (@cond_per_handle = 0)
AND (@file_per_handle = 0),
"OK: heuristics are up to date",
"FAILED: heuristics need to be updated")
as status;