# Tests for PERFORMANCE_SCHEMA # Miscelaneous --source include/not_embedded.inc --source include/have_perfschema.inc --source include/have_innodb.inc --source include/no_protocol.inc # # Bug#12790483 OBJECTS_SUMMARY_GLOBAL_BY_TYPE AND RENAME TABLE # # Rename table leaves old tables names behind in # performance_schema.objects_summary_global_by_type # SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type WHERE object_schema='test'; CREATE TABLE test.t_before(a INT); INSERT INTO test.t_before VALUES (1); # The new table should appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE. SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type WHERE object_schema='test'; RENAME TABLE test.t_before TO test.t_after; # The renamed table should appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE, but only # after it is accessed. SELECT COUNT(*) FROM test.t_after; SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type WHERE object_schema='test'; DROP TABLE test.t_after; # The renamed table should not appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE. SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type WHERE object_schema='test'; # # Verify table views are ignored by the table io instrumentation. # CREATE TABLE test.t1(a INT); INSERT INTO test.t1 VALUES (1); CREATE VIEW test.v1 AS SELECT * FROM test.t1; SELECT COUNT(*) FROM test.v1; # Verify that a PFS table share was not created for the view. SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type WHERE object_schema='test'; DROP VIEW test.v1; DROP TABLE test.t1; SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type WHERE object_schema='test'; # # Bug#45496 Performance schema: assertion fails in # ha_perfschema::rnd_init:223 # --disable_result_log SELECT EVENT_ID FROM performance_schema.events_waits_current WHERE THREAD_ID IN (SELECT THREAD_ID FROM performance_schema.threads) AND EVENT_NAME IN (SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE "wait/synch/%") LIMIT 1; --enable_result_log # # Bug#45088 Should not be able to create tables of engine PERFORMANCE_SCHEMA # --error ER_CANT_CREATE_TABLE create table test.t1(a int) engine=performance_schema; # The table should not appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type WHERE object_schema='test'; # # Bug#44897 Performance Schema: can create a ghost table in another database # --error ER_CANT_CREATE_TABLE create table test.t1 like performance_schema.events_waits_current; # The table should not appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type WHERE object_schema='test'; # # Bug#44898 PerformanceSchema: can create a table in db performance_schema, cannot insert # --error ER_TABLEACCESS_DENIED_ERROR create table performance_schema.t1(a int); # The table should not appear in OBJECTS_SUMMARY_GLOBAL_BY_TYPE SELECT object_schema, object_name FROM performance_schema.objects_summary_global_by_type WHERE object_schema='test'; # # Bug#51447 performance schema evil twin files # --disable_warnings drop table if exists test.ghost; --enable_warnings create table test.ghost (a int, b int); alter table test.ghost add index index_a(a); alter table test.ghost add index index_b(b); insert into test.ghost values (1, 3); insert into test.ghost values (2, 4); select * from test.ghost; drop table test.ghost; # Shoud return nothing select * from performance_schema.file_instances where file_name like "%ghost%"; # # Bug#52586 Misleading error message on attempt to access # a P_S table using a wrong name --error ER_NO_SUCH_TABLE select * from performance_schema.no_such_table; # # Bug#12370950 - 60905: TABLE_IO_WAITS_SUMMARY_BY_INDEX_USAGE AGGREGATES NON-INSERT DML WRONGLY # --disable_warnings DROP TABLE IF EXISTS t_60905; --enable_warnings CREATE TABLE t_60905 (i INT, j INT, KEY(i)) ENGINE = InnoDB; INSERT INTO t_60905 VALUES (1,2), (3,4), (5,6), (7,8), (9,10); # should delete with a "single" PRIMARY lookup (2 PRIMARY fetch, 1 PRIMARY delete) DELETE FROM t_60905 WHERE i = 1; # should delete with a full scan (5 NULL fetch, 1 NULL delete) DELETE FROM t_60905 WHERE j = 8; # show the instrument data. SELECT object_schema, object_name, index_name, count_fetch, count_insert, count_update, count_delete FROM performance_schema.table_io_waits_summary_by_index_usage WHERE object_schema = 'test' AND object_name = 't_60905'; DROP TABLE t_60905; # # Bug#71278 NUMBER OF ROWS IN PERFORMANCE SCHEMA TABLES # show global variables like "performance_schema_max_thread_instances"; explain select * from performance_schema.threads; # # Bug #73082 SHOW EVENTS in performance_schema gives Access Denied # use performance_schema; show events; show events from performance_schema; show events where Db= 'performance_schema'; use test; # # Bug#11929832 - EVENTS_STATEMENTS_HISTORY HAS ERRORS=0 WHEN THERE ARE ERRORS # # Verify that SQL errors are properly counted. use test; truncate performance_schema.events_statements_history; truncate performance_schema.events_statements_history_long; --error ER_NO_SUCH_TABLE select * from t1; --echo select mysql_errno, returned_sqlstate, message_text, errors, warnings from performance_schema.events_statements_history where errors > 0; --echo # select mysql_errno, returned_sqlstate, message_text, errors, warnings from performance_schema.events_statements_history_long where errors > 0; # # Bug#20519832 - TRUNCATED SQL_TEXT values are not suffixed with '...' # # Verify that truncated SQL statements are suffixed with '...' use performance_schema; truncate performance_schema.events_statements_history; # Should truncate at 1024 bytes (1024 characters) select 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' AS A; # Should truncate at 1024 bytes (487 characters) select _utf8mb4 'васÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑвасÑ' as B; select count(*) from events_statements_history where sql_text like "%..."; # # MDEV-10486 MariaDB 10.x does not update rows_examined in performance_schema tables # Verify that the rows_examined counter is set properly. use test; create table t1 (id int); insert into t1 values (1), (2), (3); truncate performance_schema.events_statements_history; select * from t1; insert into t1 select RAND()*10000 from t1; select sql_text, rows_examined from performance_schema.events_statements_history; drop table t1; --echo # --echo # MDEV-17896 Assertion `pfs->get_refcount() > 0' failed --echo # in release_table_share --echo # # There must be at least one available slot in PFS table_share_array for # this test to be meaningful. If there are no free slots we must # restart mysqld, it is the only way to reset PFS table_share_array let $query= SELECT COUNT(*)<@@performance_schema_max_table_instances FROM performance_schema.objects_summary_global_by_type WHERE OBJECT_TYPE='TABLE'; let $free_slots_available= `$query`; if (!$free_slots_available) { source include/restart_mysqld.inc; } eval $query; CREATE TABLE t0(a INT); # TABLE_SHARE must be cached in the table definition cache. SELECT * FROM t0; # Dropping t0 using DROP TEMPORARY frees up a slot in table_share_array, # but the persistent table is not correctly dropped, i.e. TABLE_SHARE::m_psi # still points to that slot in table_share_array. DROP TEMPORARY TABLE IF EXISTS t0; # Try re-using each and every slot in PFS table_share_array. If bug is # there, we re-use t0 slot. # The newly created table that re-uses the t0 slot ends up # resetting the PFS_table_share refcount. let $i= `SELECT @@performance_schema_max_table_instances`; disable_query_log; while ($i) { # Memory engine is here to reduce disk IO eval CREATE TABLE t$i(a INT) ENGINE=MEMORY; eval DROP TABLE t$i; dec $i; } enable_query_log; # FLUSH TABLE crashes the server when PFS_table_share is found with # an unexpected refcount. FLUSH TABLE t0; DROP TABLE t0; --echo # --echo # MDEV-24364 Alter rename table does not remove PFS share --echo # create or replace table yt4 (x int) engine innodb; alter table yt4 rename to t1, algorithm=copy; drop tables t1; select object_type, object_schema, object_name from performance_schema.objects_summary_global_by_type where object_schema="test"; --echo # --echo # MDEV-28344: sys.ps_setup_save and dependent procedures fail --echo # with ER_ILLEGAL_HA_CREATE_OPTION --echo # # It is not allowed to create temporary tables with performance schema --error ER_ILLEGAL_HA_CREATE_OPTION CREATE TEMPORARY TABLE t1 (t int) ENGINE = PERFORMANCE_SCHEMA; --error ER_ILLEGAL_HA_CREATE_OPTION CREATE TEMPORARY TABLE t1 LIKE performance_schema.setup_actors; SET @default_storage_engine_old = @@default_storage_engine; SET default_storage_engine = performance_schema; --error ER_ILLEGAL_HA_CREATE_OPTION CREATE TEMPORARY TABLE t1 (t int); SET @@default_storage_engine = @default_storage_engine_old;