summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorMarc Alff <marc.alff@sun.com>2010-01-11 18:47:27 -0700
committerMarc Alff <marc.alff@sun.com>2010-01-11 18:47:27 -0700
commit67a48e1a4cfd73875e54f9416afa7328d676d7bd (patch)
treec111d4c62b1e1eb7a74ec68860756418e29cb61e /mysql-test
parenta4c3bc618bb83884a19dc157bc56d4e3d2432c22 (diff)
downloadmariadb-git-67a48e1a4cfd73875e54f9416afa7328d676d7bd.tar.gz
WL#2360 Performance schema
Part V: performance schema implementation
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/Makefile.am8
-rw-r--r--mysql-test/include/default_my.cnf17
-rw-r--r--mysql-test/include/default_mysqld.cnf18
-rwxr-xr-xmysql-test/mysql-test-run.pl19
-rw-r--r--mysql-test/r/1st.result1
-rw-r--r--mysql-test/r/drop.result2
-rw-r--r--mysql-test/r/information_schema.result4
-rw-r--r--mysql-test/r/mysqld--help-notwin.result482
-rw-r--r--mysql-test/r/mysqld--help-win.result486
-rw-r--r--mysql-test/r/ps_1general.result1
-rw-r--r--mysql-test/r/schema.result1
-rw-r--r--mysql-test/r/show_check.result1
-rw-r--r--mysql-test/suite/binlog/r/binlog_database.result1
-rw-r--r--mysql-test/suite/binlog/r/binlog_unsafe.result20
-rw-r--r--mysql-test/suite/funcs_1/r/is_schemata.result1
-rw-r--r--mysql-test/suite/jp/r/jp_create_db_sjis.result1
-rw-r--r--mysql-test/suite/jp/r/jp_create_db_ucs2.result1
-rw-r--r--mysql-test/suite/jp/r/jp_create_db_ujis.result1
-rw-r--r--mysql-test/suite/jp/r/jp_create_db_utf8.result1
-rw-r--r--mysql-test/suite/perfschema/include/binlog_common.inc49
-rw-r--r--mysql-test/suite/perfschema/include/cleanup_helper.inc25
-rw-r--r--mysql-test/suite/perfschema/include/privilege.inc194
-rw-r--r--mysql-test/suite/perfschema/include/setup_helper.inc54
-rw-r--r--mysql-test/suite/perfschema/include/start_server_common.inc62
-rw-r--r--mysql-test/suite/perfschema/r/aggregate.result101
-rw-r--r--mysql-test/suite/perfschema/r/bad_option_1.result2
-rw-r--r--mysql-test/suite/perfschema/r/bad_option_2.result1
-rw-r--r--mysql-test/suite/perfschema/r/binlog_mix.result49
-rw-r--r--mysql-test/suite/perfschema/r/binlog_row.result49
-rw-r--r--mysql-test/suite/perfschema/r/binlog_stmt.result48
-rw-r--r--mysql-test/suite/perfschema/r/cnf_option.result6
-rw-r--r--mysql-test/suite/perfschema/r/column_privilege.result27
-rw-r--r--mysql-test/suite/perfschema/r/ddl_cond_instances.result8
-rw-r--r--mysql-test/suite/perfschema/r/ddl_events_waits_current.result7
-rw-r--r--mysql-test/suite/perfschema/r/ddl_events_waits_history.result7
-rw-r--r--mysql-test/suite/perfschema/r/ddl_events_waits_history_long.result7
-rw-r--r--mysql-test/suite/perfschema/r/ddl_ews_by_event_name.result7
-rw-r--r--mysql-test/suite/perfschema/r/ddl_ews_by_instance.result7
-rw-r--r--mysql-test/suite/perfschema/r/ddl_ews_by_thread_by_event_name.result9
-rw-r--r--mysql-test/suite/perfschema/r/ddl_file_instances.result8
-rw-r--r--mysql-test/suite/perfschema/r/ddl_fs_by_event_name.result7
-rw-r--r--mysql-test/suite/perfschema/r/ddl_fs_by_instance.result7
-rw-r--r--mysql-test/suite/perfschema/r/ddl_mutex_instances.result8
-rw-r--r--mysql-test/suite/perfschema/r/ddl_performance_timers.result8
-rw-r--r--mysql-test/suite/perfschema/r/ddl_processlist.result8
-rw-r--r--mysql-test/suite/perfschema/r/ddl_rwlock_instances.result8
-rw-r--r--mysql-test/suite/perfschema/r/ddl_setup_consumers.result8
-rw-r--r--mysql-test/suite/perfschema/r/ddl_setup_instruments.result8
-rw-r--r--mysql-test/suite/perfschema/r/ddl_setup_objects.result7
-rw-r--r--mysql-test/suite/perfschema/r/ddl_setup_timers.result8
-rw-r--r--mysql-test/suite/perfschema/r/dml_cond_instances.result23
-rw-r--r--mysql-test/suite/perfschema/r/dml_events_waits_current.result28
-rw-r--r--mysql-test/suite/perfschema/r/dml_events_waits_history.result36
-rw-r--r--mysql-test/suite/perfschema/r/dml_events_waits_history_long.result36
-rw-r--r--mysql-test/suite/perfschema/r/dml_ews_by_event_name.result28
-rw-r--r--mysql-test/suite/perfschema/r/dml_ews_by_instance.result45
-rw-r--r--mysql-test/suite/perfschema/r/dml_ews_by_thread_by_event_name.result29
-rw-r--r--mysql-test/suite/perfschema/r/dml_file_instances.result23
-rw-r--r--mysql-test/suite/perfschema/r/dml_file_summary_by_event_name.result28
-rw-r--r--mysql-test/suite/perfschema/r/dml_file_summary_by_instance.result28
-rw-r--r--mysql-test/suite/perfschema/r/dml_mutex_instances.result23
-rw-r--r--mysql-test/suite/perfschema/r/dml_performance_timers.result29
-rw-r--r--mysql-test/suite/perfschema/r/dml_processlist.result27
-rw-r--r--mysql-test/suite/perfschema/r/dml_rwlock_instances.result23
-rw-r--r--mysql-test/suite/perfschema/r/dml_setup_consumers.result45
-rw-r--r--mysql-test/suite/perfschema/r/dml_setup_instruments.result72
-rw-r--r--mysql-test/suite/perfschema/r/dml_setup_objects.result35
-rw-r--r--mysql-test/suite/perfschema/r/dml_setup_timers.result33
-rw-r--r--mysql-test/suite/perfschema/r/func_file_io.result117
-rw-r--r--mysql-test/suite/perfschema/r/func_mutex.result113
-rw-r--r--mysql-test/suite/perfschema/r/global_read_lock.result33
-rw-r--r--mysql-test/suite/perfschema/r/information_schema.result198
-rw-r--r--mysql-test/suite/perfschema/r/misc.result13
-rw-r--r--mysql-test/suite/perfschema/r/myisam_file_io.result59
-rw-r--r--mysql-test/suite/perfschema/r/no_threads.result43
-rw-r--r--mysql-test/suite/perfschema/r/one_thread_per_con.result38
-rw-r--r--mysql-test/suite/perfschema/r/privilege.result577
-rw-r--r--mysql-test/suite/perfschema/r/query_cache.result66
-rw-r--r--mysql-test/suite/perfschema/r/read_only.result49
-rw-r--r--mysql-test/suite/perfschema/r/schema.result211
-rw-r--r--mysql-test/suite/perfschema/r/selects.result97
-rw-r--r--mysql-test/suite/perfschema/r/server_init.result233
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_cond_class.result74
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_cond_inst.result77
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_file_class.result74
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_file_inst.result77
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_mutex_class.result74
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result77
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result74
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result77
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_thread_class.result74
-rw-r--r--mysql-test/suite/perfschema/r/start_server_no_thread_inst.result73
-rw-r--r--mysql-test/suite/perfschema/r/start_server_off.result73
-rw-r--r--mysql-test/suite/perfschema/r/start_server_on.result73
-rw-r--r--mysql-test/suite/perfschema/r/tampered_perfschema_table1.result6
-rw-r--r--mysql-test/suite/perfschema/t/aggregate.test187
-rw-r--r--mysql-test/suite/perfschema/t/bad_option_1.test45
-rw-r--r--mysql-test/suite/perfschema/t/bad_option_2.test44
-rw-r--r--mysql-test/suite/perfschema/t/binlog_mix.test28
-rw-r--r--mysql-test/suite/perfschema/t/binlog_row.test28
-rw-r--r--mysql-test/suite/perfschema/t/binlog_stmt.test25
-rw-r--r--mysql-test/suite/perfschema/t/cnf_option.cnf25
-rw-r--r--mysql-test/suite/perfschema/t/cnf_option.test24
-rw-r--r--mysql-test/suite/perfschema/t/column_privilege.test82
-rw-r--r--mysql-test/suite/perfschema/t/ddl_cond_instances.test32
-rw-r--r--mysql-test/suite/perfschema/t/ddl_events_waits_current.test31
-rw-r--r--mysql-test/suite/perfschema/t/ddl_events_waits_history.test31
-rw-r--r--mysql-test/suite/perfschema/t/ddl_events_waits_history_long.test31
-rw-r--r--mysql-test/suite/perfschema/t/ddl_ews_by_event_name.test31
-rw-r--r--mysql-test/suite/perfschema/t/ddl_ews_by_instance.test31
-rw-r--r--mysql-test/suite/perfschema/t/ddl_ews_by_thread_by_event_name.test33
-rw-r--r--mysql-test/suite/perfschema/t/ddl_file_instances.test32
-rw-r--r--mysql-test/suite/perfschema/t/ddl_fs_by_event_name.test31
-rw-r--r--mysql-test/suite/perfschema/t/ddl_fs_by_instance.test31
-rw-r--r--mysql-test/suite/perfschema/t/ddl_mutex_instances.test32
-rw-r--r--mysql-test/suite/perfschema/t/ddl_performance_timers.test32
-rw-r--r--mysql-test/suite/perfschema/t/ddl_processlist.test32
-rw-r--r--mysql-test/suite/perfschema/t/ddl_rwlock_instances.test32
-rw-r--r--mysql-test/suite/perfschema/t/ddl_setup_consumers.test33
-rw-r--r--mysql-test/suite/perfschema/t/ddl_setup_instruments.test33
-rw-r--r--mysql-test/suite/perfschema/t/ddl_setup_objects.test32
-rw-r--r--mysql-test/suite/perfschema/t/ddl_setup_timers.test33
-rw-r--r--mysql-test/suite/perfschema/t/disabled.def27
-rw-r--r--mysql-test/suite/perfschema/t/dml_cond_instances.test55
-rw-r--r--mysql-test/suite/perfschema/t/dml_events_waits_current.test62
-rw-r--r--mysql-test/suite/perfschema/t/dml_events_waits_history.test70
-rw-r--r--mysql-test/suite/perfschema/t/dml_events_waits_history_long.test70
-rw-r--r--mysql-test/suite/perfschema/t/dml_ews_by_event_name.test62
-rw-r--r--mysql-test/suite/perfschema/t/dml_ews_by_instance.test79
-rw-r--r--mysql-test/suite/perfschema/t/dml_ews_by_thread_by_event_name.test63
-rw-r--r--mysql-test/suite/perfschema/t/dml_file_instances.test55
-rw-r--r--mysql-test/suite/perfschema/t/dml_file_summary_by_event_name.test62
-rw-r--r--mysql-test/suite/perfschema/t/dml_file_summary_by_instance.test62
-rw-r--r--mysql-test/suite/perfschema/t/dml_mutex_instances.test55
-rw-r--r--mysql-test/suite/perfschema/t/dml_performance_timers.test57
-rw-r--r--mysql-test/suite/perfschema/t/dml_processlist.test61
-rw-r--r--mysql-test/suite/perfschema/t/dml_rwlock_instances.test55
-rw-r--r--mysql-test/suite/perfschema/t/dml_setup_consumers.test59
-rw-r--r--mysql-test/suite/perfschema/t/dml_setup_instruments.test100
-rw-r--r--mysql-test/suite/perfschema/t/dml_setup_objects.test75
-rw-r--r--mysql-test/suite/perfschema/t/dml_setup_timers.test61
-rw-r--r--mysql-test/suite/perfschema/t/func_file_io.test192
-rw-r--r--mysql-test/suite/perfschema/t/func_mutex.test131
-rw-r--r--mysql-test/suite/perfschema/t/global_read_lock.test90
-rw-r--r--mysql-test/suite/perfschema/t/information_schema.test67
-rw-r--r--mysql-test/suite/perfschema/t/misc.test57
-rw-r--r--mysql-test/suite/perfschema/t/myisam_file_io.opt1
-rw-r--r--mysql-test/suite/perfschema/t/myisam_file_io.test63
-rw-r--r--mysql-test/suite/perfschema/t/no_threads-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/no_threads.test69
-rw-r--r--mysql-test/suite/perfschema/t/one_thread_per_con-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/one_thread_per_con.test94
-rw-r--r--mysql-test/suite/perfschema/t/pool_of_threads-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/privilege.test362
-rw-r--r--mysql-test/suite/perfschema/t/query_cache.test68
-rw-r--r--mysql-test/suite/perfschema/t/read_only.test96
-rw-r--r--mysql-test/suite/perfschema/t/schema.test46
-rw-r--r--mysql-test/suite/perfschema/t/selects.test156
-rw-r--r--mysql-test/suite/perfschema/t/server_init.test263
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_cond_class-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_cond_class.test38
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_cond_inst-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_cond_inst.test41
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_file_class-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_file_class.test38
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_file_inst-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_file_inst.test41
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_mutex_class-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_mutex_class.test38
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_mutex_inst-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_mutex_inst.test41
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_rwlock_class-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_rwlock_class.test38
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_rwlock_inst-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_rwlock_inst.test41
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_thread_class-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_thread_class.test38
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_thread_inst-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/start_server_no_thread_inst.test42
-rw-r--r--mysql-test/suite/perfschema/t/start_server_off-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/start_server_off.test25
-rw-r--r--mysql-test/suite/perfschema/t/start_server_on-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/start_server_on.test25
-rw-r--r--mysql-test/suite/perfschema/t/tampered_perfschema_table1-master.opt1
-rw-r--r--mysql-test/suite/perfschema/t/tampered_perfschema_table1.test44
-rw-r--r--mysql-test/suite/perfschema_stress/README34
-rw-r--r--mysql-test/suite/perfschema_stress/include/settings.inc17
-rw-r--r--mysql-test/suite/perfschema_stress/r/modify.result17
-rw-r--r--mysql-test/suite/perfschema_stress/r/read.result29
-rw-r--r--mysql-test/suite/perfschema_stress/r/work.result16
-rw-r--r--mysql-test/suite/perfschema_stress/stress_init.txt1
-rw-r--r--mysql-test/suite/perfschema_stress/stress_tests.txt10
-rw-r--r--mysql-test/suite/perfschema_stress/t/modify.test55
-rw-r--r--mysql-test/suite/perfschema_stress/t/read.test49
-rw-r--r--mysql-test/suite/perfschema_stress/t/setup.test64
-rw-r--r--mysql-test/suite/perfschema_stress/t/work.test47
-rw-r--r--mysql-test/suite/rpl/r/rpl_loaddata_m.result1
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result2
-rw-r--r--mysql-test/t/bug46080-master.opt2
-rw-r--r--mysql-test/t/mysqld--help-notwin.test16
-rw-r--r--mysql-test/t/mysqld--help-win.test16
201 files changed, 9649 insertions, 450 deletions
diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am
index 2686cd36355..6d870f4bcdf 100644
--- a/mysql-test/Makefile.am
+++ b/mysql-test/Makefile.am
@@ -1,4 +1,4 @@
-# Copyright (C) 2000-2006 MySQL AB
+# Copyright (C) 2000-2006 MySQL AB, 2008-2009 Sun Microsystems, Inc.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
@@ -75,6 +75,8 @@ EXTRA_DIST = README \
# List of directories containing test + result files and the
# related test data files that should be copied
+# If you want to add a new suite, please check DEFAULT_SUITES in
+# mysql-test-run.pl.
TEST_DIRS = t r include std_data std_data/parts collections \
std_data/ndb_backup50 std_data/ndb_backup51 \
std_data/ndb_backup51_data_be std_data/ndb_backup51_data_le \
@@ -100,7 +102,9 @@ TEST_DIRS = t r include std_data std_data/parts collections \
suite/rpl_ndb suite/rpl_ndb/t suite/rpl_ndb/r \
suite/parts suite/parts/t suite/parts/r suite/parts/inc \
suite/innodb suite/innodb/t suite/innodb/r suite/innodb/include \
- suite/sys_vars suite/sys_vars/t suite/sys_vars/inc suite/sys_vars/r
+ suite/sys_vars suite/sys_vars/t suite/sys_vars/inc suite/sys_vars/r \
+ suite/perfschema suite/perfschema/t suite/perfschema/r \
+ suite/perfschema/include
# Used by dist-hook and install-data-local to copy all
# test files into either dist or install directory
diff --git a/mysql-test/include/default_my.cnf b/mysql-test/include/default_my.cnf
index 428c2166947..6888a69b0a4 100644
--- a/mysql-test/include/default_my.cnf
+++ b/mysql-test/include/default_my.cnf
@@ -1,3 +1,18 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
# Use default setting for mysqld processes
!include default_mysqld.cnf
!include default_client.cnf
@@ -9,6 +24,8 @@
log-bin= master-bin
+# Run tests with the performance schema instrumentation
+loose-enable-performance-schema
[mysqlbinlog]
disable-force-if-open
diff --git a/mysql-test/include/default_mysqld.cnf b/mysql-test/include/default_mysqld.cnf
index 6116b20d8bb..def14abf55a 100644
--- a/mysql-test/include/default_mysqld.cnf
+++ b/mysql-test/include/default_mysqld.cnf
@@ -1,3 +1,18 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
# Default values that applies to all MySQL Servers
[mysqld]
open-files-limit= 1024
@@ -26,3 +41,6 @@ slave-net-timeout=120
log-bin=mysqld-bin
+# Run tests with the performance schema instrumentation
+loose-enable-performance-schema
+
diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
index 27f4891c39e..02404af5eea 100755
--- a/mysql-test/mysql-test-run.pl
+++ b/mysql-test/mysql-test-run.pl
@@ -1,6 +1,21 @@
#!/usr/bin/perl
# -*- cperl -*-
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
#
##############################################################################
#
@@ -128,7 +143,9 @@ my $path_config_file; # The generated config file, var/my.cnf
# executables will be used by the test suite.
our $opt_vs_config = $ENV{'MTR_VS_CONFIG'};
-my $DEFAULT_SUITES= "main,sys_vars,binlog,federated,rpl,rpl_ndb,ndb,innodb";
+# If you add a new suite, please check TEST_DIRS in Makefile.am.
+#
+my $DEFAULT_SUITES= "main,sys_vars,binlog,federated,rpl,rpl_ndb,ndb,innodb,perfschema";
my $opt_suites;
our $opt_verbose= 0; # Verbose output, enable with --verbose
diff --git a/mysql-test/r/1st.result b/mysql-test/r/1st.result
index 4a82f8c66e9..ae9989ce563 100644
--- a/mysql-test/r/1st.result
+++ b/mysql-test/r/1st.result
@@ -3,6 +3,7 @@ Database
information_schema
mtr
mysql
+performance_schema
test
show tables in mysql;
Tables_in_mysql
diff --git a/mysql-test/r/drop.result b/mysql-test/r/drop.result
index 54bd05e526f..ae75f21955e 100644
--- a/mysql-test/r/drop.result
+++ b/mysql-test/r/drop.result
@@ -50,6 +50,7 @@ information_schema
mtr
mysql
mysqltest
+performance_schema
test
flush tables with read lock;
drop database mysqltest;
@@ -61,6 +62,7 @@ Database
information_schema
mtr
mysql
+performance_schema
test
drop database mysqltest;
ERROR HY000: Can't drop database 'mysqltest'; database doesn't exist
diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result
index ea0f28d123d..017aa6331ff 100644
--- a/mysql-test/r/information_schema.result
+++ b/mysql-test/r/information_schema.result
@@ -11,12 +11,14 @@ select * from information_schema.SCHEMATA where schema_name > 'm';
CATALOG_NAME SCHEMA_NAME DEFAULT_CHARACTER_SET_NAME DEFAULT_COLLATION_NAME SQL_PATH
def mtr latin1 latin1_swedish_ci NULL
def mysql latin1 latin1_swedish_ci NULL
+def performance_schema utf8 utf8_general_ci NULL
def test latin1 latin1_swedish_ci NULL
select schema_name from information_schema.schemata;
schema_name
information_schema
mtr
mysql
+performance_schema
test
show databases like 't%';
Database (t%)
@@ -26,6 +28,7 @@ Database
information_schema
mtr
mysql
+performance_schema
test
show databases where `database` = 't%';
Database
@@ -363,6 +366,7 @@ c
information_schema
mtr
mysql
+performance_schema
test
explain select * from v0;
id select_type table type possible_keys key key_len ref rows Extra
diff --git a/mysql-test/r/mysqld--help-notwin.result b/mysql-test/r/mysqld--help-notwin.result
index 2ba7df6b7e3..99e2756e029 100644
--- a/mysql-test/r/mysqld--help-notwin.result
+++ b/mysql-test/r/mysqld--help-notwin.result
@@ -417,6 +417,38 @@ The following options may be given as the first argument:
is one of {on, off, default}
--partition[=name] Enable or disable partition plugin. Possible values are
ON, OFF, FORCE (don't start if the plugin fails to load).
+ --performance-schema
+ Enable the performance schema.
+ --performance-schema-events-waits-history-long-size=#
+ Number of rows in EVENTS_WAITS_HISTORY_LONG.
+ --performance-schema-events-waits-history-size=#
+ Number of rows per thread in EVENTS_WAITS_HISTORY.
+ --performance-schema-max-cond-classes=#
+ Maximum number of condition instruments.
+ --performance-schema-max-cond-instances=#
+ Maximum number of instrumented condition objects.
+ --performance-schema-max-file-classes=#
+ Maximum number of file instruments.
+ --performance-schema-max-file-handles=#
+ Maximum number of opened instrumented files.
+ --performance-schema-max-file-instances=#
+ Maximum number of instrumented files.
+ --performance-schema-max-mutex-classes=#
+ Maximum number of mutex instruments.
+ --performance-schema-max-mutex-instances=#
+ Maximum number of instrumented MUTEX objects.
+ --performance-schema-max-rwlock-classes=#
+ Maximum number of rwlock instruments.
+ --performance-schema-max-rwlock-instances=#
+ Maximum number of instrumented RWLOCK objects.
+ --performance-schema-max-table-handles=#
+ Maximum number of opened instrumented tables.
+ --performance-schema-max-table-instances=#
+ Maximum number of instrumented tables.
+ --performance-schema-max-thread-classes=#
+ Maximum number of thread instruments.
+ --performance-schema-max-thread-instances=#
+ Maximum number of instrumented threads.
--pid-file=name Pid file used by safe_mysqld
--plugin-dir=name Directory for plugins
--plugin-load=name Optional semicolon-separated list of plugins to load,
@@ -716,223 +748,239 @@ The following options may be given as the first argument:
-W, --warnings[=#] Deprecated; use --log-warnings instead.
Variables (--variable-name=value)
-and boolean options {FALSE|TRUE} Value (after reading options)
------------------------------------ --------------------------------------
-abort-slave-event-count 0
-allow-suspicious-udfs FALSE
-archive ON
-auto-increment-increment 1
-auto-increment-offset 1
-automatic-sp-privileges TRUE
-back-log 50
-big-tables FALSE
-bind-address (No default value)
-binlog-cache-size 32768
-binlog-format STATEMENT
-binlog-row-event-max-size 1024
-blackhole ON
-bulk-insert-buffer-size 8388608
-character-set-client-handshake TRUE
-character-set-filesystem binary
-character-set-server latin1
-character-sets-dir MYSQL_SHAREDIR/charsets/
-chroot (No default value)
-collation-server latin1_swedish_ci
-completion-type NO_CHAIN
-concurrent-insert AUTO
-connect-timeout 10
-console FALSE
-datadir MYSQLTEST_VARDIR/install.db/
-date-format %Y-%m-%d
-datetime-format %Y-%m-%d %H:%i:%s
-default-character-set latin1
-default-collation latin1_swedish_ci
-default-storage-engine MyISAM
-default-time-zone (No default value)
-default-week-format 0
-delay-key-write ON
-delayed-insert-limit 100
-delayed-insert-timeout 300
-delayed-queue-size 1000
-disconnect-slave-event-count 0
-div-precision-increment 4
-enable-locking FALSE
-engine-condition-pushdown TRUE
-event-scheduler OFF
-expire-logs-days 0
-external-locking FALSE
-federated ON
-flush FALSE
-flush-time 0
-ft-boolean-syntax + -><()~*:""&|
-ft-max-word-len 84
-ft-min-word-len 4
-ft-query-expansion-limit 20
-ft-stopword-file (No default value)
-gdb FALSE
-general-log FALSE
-group-concat-max-len 1024
-help TRUE
-ignore-builtin-innodb FALSE
-init-connect
-init-file (No default value)
-init-rpl-role MASTER
-init-slave
-interactive-timeout 28800
-join-buffer-size 131072
-keep-files-on-create FALSE
-key-buffer-size 8388608
-key-cache-age-threshold 300
-key-cache-block-size 1024
-key-cache-division-limit 100
-language MYSQL_SHAREDIR/
-large-pages FALSE
-lc-messages en_US
-lc-messages-dir MYSQL_SHAREDIR/
-lc-time-names en_US
-local-infile TRUE
-log-bin (No default value)
-log-bin-index (No default value)
-log-bin-trust-function-creators FALSE
-log-error
-log-isam myisam.log
-log-output FILE
-log-queries-not-using-indexes FALSE
-log-short-format FALSE
-log-slave-updates FALSE
-log-slow-admin-statements FALSE
-log-slow-slave-statements FALSE
-log-tc tc.log
-log-tc-size 24576
-log-update (No default value)
-log-warnings 1
-long-query-time 10
-low-priority-updates FALSE
-lower-case-table-names 1
-master-info-file master.info
-master-retry-count 86400
-max-allowed-packet 1048576
-max-binlog-cache-size 18446744073709547520
-max-binlog-dump-events 0
-max-binlog-size 1073741824
-max-connect-errors 10
-max-connections 151
-max-delayed-threads 20
-max-error-count 64
-max-heap-table-size 16777216
-max-join-size 18446744073709551615
-max-length-for-sort-data 1024
-max-prepared-stmt-count 16382
-max-relay-log-size 0
-max-seeks-for-key 18446744073709551615
-max-sort-length 1024
-max-sp-recursion-depth 0
-max-tmp-tables 32
-max-user-connections 0
-max-write-lock-count 18446744073709551615
-memlock FALSE
-min-examined-row-limit 0
-multi-range-count 256
-myisam-block-size 1024
-myisam-data-pointer-size 6
-myisam-max-sort-file-size 9223372036853727232
-myisam-mmap-size 18446744073709551615
-myisam-recover-options OFF
-myisam-repair-threads 1
-myisam-sort-buffer-size 8388608
-myisam-stats-method nulls_unequal
-myisam-use-mmap FALSE
-net-buffer-length 16384
-net-read-timeout 30
-net-retry-count 10
-net-write-timeout 60
-new FALSE
-old FALSE
-old-alter-table FALSE
-old-passwords FALSE
-old-style-user-limits FALSE
-optimizer-prune-level 1
-optimizer-search-depth 62
-optimizer-switch index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on
-partition ON
-plugin-dir MYSQL_LIBDIR/mysql/plugin
-plugin-load (No default value)
-port 3306
-port-open-timeout 0
-preload-buffer-size 32768
-profiling-history-size 15
-query-alloc-block-size 8192
-query-cache-limit 1048576
-query-cache-min-res-unit 4096
-query-cache-size 0
-query-cache-type ON
-query-cache-wlock-invalidate FALSE
-query-prealloc-size 8192
-range-alloc-block-size 4096
-read-buffer-size 131072
-read-only FALSE
-read-rnd-buffer-size 262144
-record-buffer 131072
-relay-log (No default value)
-relay-log-index (No default value)
-relay-log-info-file relay-log.info
-relay-log-purge TRUE
-relay-log-recovery FALSE
-relay-log-space-limit 0
-replicate-same-server-id FALSE
-report-host (No default value)
-report-password (No default value)
-report-port 3306
-report-user (No default value)
-rpl-recovery-rank 0
-safe-user-create FALSE
-secure-auth FALSE
-secure-file-priv (No default value)
-server-id 0
-show-slave-auth-info FALSE
-skip-grant-tables TRUE
-skip-networking FALSE
-skip-show-database FALSE
-skip-slave-start FALSE
-slave-compressed-protocol FALSE
-slave-exec-mode STRICT
-slave-load-tmpdir MYSQLTEST_VARDIR/tmp/
-slave-net-timeout 3600
-slave-skip-errors (No default value)
-slave-transaction-retries 10
-slow-launch-time 2
-slow-query-log FALSE
-socket /tmp/mysql.sock
-sort-buffer-size 2097152
-sporadic-binlog-dump-fail FALSE
-sql-mode
-symbolic-links FALSE
-sync-binlog 0
-sync-frm TRUE
-sync-master-info 0
-sync-relay-log 0
-sync-relay-log-info 0
-sysdate-is-now FALSE
-table-cache 400
-table-definition-cache 400
-table-lock-wait-timeout 50
-table-open-cache 400
-tc-heuristic-recover COMMIT
-thread-cache-size 0
-thread-handling one-thread-per-connection
-thread-stack 262144
-time-format %H:%i:%s
-timed-mutexes FALSE
-tmp-table-size 16777216
-tmpdir MYSQLTEST_VARDIR/tmp/
-transaction-alloc-block-size 8192
-transaction-isolation REPEATABLE-READ
-transaction-prealloc-size 4096
-updatable-views-with-limit YES
-use-symbolic-links FALSE
-verbose TRUE
-wait-timeout 28800
-warnings 1
+and boolean options {FALSE|TRUE} Value (after reading options)
+------------------------------------------------- ------------------------
+abort-slave-event-count 0
+allow-suspicious-udfs FALSE
+archive ON
+auto-increment-increment 1
+auto-increment-offset 1
+automatic-sp-privileges TRUE
+back-log 50
+big-tables FALSE
+bind-address (No default value)
+binlog-cache-size 32768
+binlog-format STATEMENT
+binlog-row-event-max-size 1024
+blackhole ON
+bulk-insert-buffer-size 8388608
+character-set-client-handshake TRUE
+character-set-filesystem binary
+character-set-server latin1
+character-sets-dir MYSQL_SHAREDIR/charsets/
+chroot (No default value)
+collation-server latin1_swedish_ci
+completion-type NO_CHAIN
+concurrent-insert AUTO
+connect-timeout 10
+console FALSE
+datadir MYSQLTEST_VARDIR/install.db/
+date-format %Y-%m-%d
+datetime-format %Y-%m-%d %H:%i:%s
+default-character-set latin1
+default-collation latin1_swedish_ci
+default-storage-engine MyISAM
+default-time-zone (No default value)
+default-week-format 0
+delay-key-write ON
+delayed-insert-limit 100
+delayed-insert-timeout 300
+delayed-queue-size 1000
+disconnect-slave-event-count 0
+div-precision-increment 4
+enable-locking FALSE
+engine-condition-pushdown TRUE
+event-scheduler OFF
+expire-logs-days 0
+external-locking FALSE
+federated ON
+flush FALSE
+flush-time 0
+ft-boolean-syntax + -><()~*:""&|
+ft-max-word-len 84
+ft-min-word-len 4
+ft-query-expansion-limit 20
+ft-stopword-file (No default value)
+gdb FALSE
+general-log FALSE
+group-concat-max-len 1024
+help TRUE
+ignore-builtin-innodb FALSE
+init-connect
+init-file (No default value)
+init-rpl-role MASTER
+init-slave
+interactive-timeout 28800
+join-buffer-size 131072
+keep-files-on-create FALSE
+key-buffer-size 8388608
+key-cache-age-threshold 300
+key-cache-block-size 1024
+key-cache-division-limit 100
+language MYSQL_SHAREDIR/
+large-pages FALSE
+lc-messages en_US
+lc-messages-dir MYSQL_SHAREDIR/
+lc-time-names en_US
+local-infile TRUE
+log-bin (No default value)
+log-bin-index (No default value)
+log-bin-trust-function-creators FALSE
+log-error
+log-isam myisam.log
+log-output FILE
+log-queries-not-using-indexes FALSE
+log-short-format FALSE
+log-slave-updates FALSE
+log-slow-admin-statements FALSE
+log-slow-slave-statements FALSE
+log-tc tc.log
+log-tc-size 24576
+log-update (No default value)
+log-warnings 1
+long-query-time 10
+low-priority-updates FALSE
+lower-case-table-names 1
+master-info-file master.info
+master-retry-count 86400
+max-allowed-packet 1048576
+max-binlog-cache-size 18446744073709547520
+max-binlog-dump-events 0
+max-binlog-size 1073741824
+max-connect-errors 10
+max-connections 151
+max-delayed-threads 20
+max-error-count 64
+max-heap-table-size 16777216
+max-join-size 18446744073709551615
+max-length-for-sort-data 1024
+max-prepared-stmt-count 16382
+max-relay-log-size 0
+max-seeks-for-key 18446744073709551615
+max-sort-length 1024
+max-sp-recursion-depth 0
+max-tmp-tables 32
+max-user-connections 0
+max-write-lock-count 18446744073709551615
+memlock FALSE
+min-examined-row-limit 0
+multi-range-count 256
+myisam-block-size 1024
+myisam-data-pointer-size 6
+myisam-max-sort-file-size 9223372036853727232
+myisam-mmap-size 18446744073709551615
+myisam-recover-options OFF
+myisam-repair-threads 1
+myisam-sort-buffer-size 8388608
+myisam-stats-method nulls_unequal
+myisam-use-mmap FALSE
+net-buffer-length 16384
+net-read-timeout 30
+net-retry-count 10
+net-write-timeout 60
+new FALSE
+old FALSE
+old-alter-table FALSE
+old-passwords FALSE
+old-style-user-limits FALSE
+optimizer-prune-level 1
+optimizer-search-depth 62
+optimizer-switch index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on
+partition ON
+performance-schema FALSE
+performance-schema-events-waits-history-long-size 10000
+performance-schema-events-waits-history-size 10
+performance-schema-max-cond-classes 80
+performance-schema-max-cond-instances 1000
+performance-schema-max-file-classes 50
+performance-schema-max-file-handles 32768
+performance-schema-max-file-instances 10000
+performance-schema-max-mutex-classes 200
+performance-schema-max-mutex-instances 1000
+performance-schema-max-rwlock-classes 20
+performance-schema-max-rwlock-instances 1000
+performance-schema-max-table-handles 100000
+performance-schema-max-table-instances 50000
+performance-schema-max-thread-classes 50
+performance-schema-max-thread-instances 1000
+plugin-dir MYSQL_LIBDIR/mysql/plugin
+plugin-load (No default value)
+port 3306
+port-open-timeout 0
+preload-buffer-size 32768
+profiling-history-size 15
+query-alloc-block-size 8192
+query-cache-limit 1048576
+query-cache-min-res-unit 4096
+query-cache-size 0
+query-cache-type ON
+query-cache-wlock-invalidate FALSE
+query-prealloc-size 8192
+range-alloc-block-size 4096
+read-buffer-size 131072
+read-only FALSE
+read-rnd-buffer-size 262144
+record-buffer 131072
+relay-log (No default value)
+relay-log-index (No default value)
+relay-log-info-file relay-log.info
+relay-log-purge TRUE
+relay-log-recovery FALSE
+relay-log-space-limit 0
+replicate-same-server-id FALSE
+report-host (No default value)
+report-password (No default value)
+report-port 3306
+report-user (No default value)
+rpl-recovery-rank 0
+safe-user-create FALSE
+secure-auth FALSE
+secure-file-priv (No default value)
+server-id 0
+show-slave-auth-info FALSE
+skip-grant-tables TRUE
+skip-networking FALSE
+skip-show-database FALSE
+skip-slave-start FALSE
+slave-compressed-protocol FALSE
+slave-exec-mode STRICT
+slave-load-tmpdir MYSQLTEST_VARDIR/tmp/
+slave-net-timeout 3600
+slave-skip-errors (No default value)
+slave-transaction-retries 10
+slow-launch-time 2
+slow-query-log FALSE
+socket /tmp/mysql.sock
+sort-buffer-size 2097152
+sporadic-binlog-dump-fail FALSE
+sql-mode
+symbolic-links FALSE
+sync-binlog 0
+sync-frm TRUE
+sync-master-info 0
+sync-relay-log 0
+sync-relay-log-info 0
+sysdate-is-now FALSE
+table-cache 400
+table-definition-cache 400
+table-lock-wait-timeout 50
+table-open-cache 400
+tc-heuristic-recover COMMIT
+thread-cache-size 0
+thread-handling one-thread-per-connection
+thread-stack 262144
+time-format %H:%i:%s
+timed-mutexes FALSE
+tmp-table-size 16777216
+tmpdir MYSQLTEST_VARDIR/tmp/
+transaction-alloc-block-size 8192
+transaction-isolation REPEATABLE-READ
+transaction-prealloc-size 4096
+updatable-views-with-limit YES
+use-symbolic-links FALSE
+verbose TRUE
+wait-timeout 28800
+warnings 1
To see what values a running MySQL server is using, type
'mysqladmin variables' instead of 'mysqld --verbose --help'.
diff --git a/mysql-test/r/mysqld--help-win.result b/mysql-test/r/mysqld--help-win.result
index 5627716f6ec..b20e19bda04 100644
--- a/mysql-test/r/mysqld--help-win.result
+++ b/mysql-test/r/mysqld--help-win.result
@@ -417,6 +417,38 @@ The following options may be given as the first argument:
is one of {on, off, default}
--partition[=name] Enable or disable partition plugin. Possible values are
ON, OFF, FORCE (don't start if the plugin fails to load).
+ --performance-schema
+ Enable the performance schema.
+ --performance-schema-events-waits-history-long-size=#
+ Number of rows in EVENTS_WAITS_HISTORY_LONG.
+ --performance-schema-events-waits-history-size=#
+ Number of rows per thread in EVENTS_WAITS_HISTORY.
+ --performance-schema-max-cond-classes=#
+ Maximum number of condition instruments.
+ --performance-schema-max-cond-instances=#
+ Maximum number of instrumented condition objects.
+ --performance-schema-max-file-classes=#
+ Maximum number of file instruments.
+ --performance-schema-max-file-handles=#
+ Maximum number of opened instrumented files.
+ --performance-schema-max-file-instances=#
+ Maximum number of instrumented files.
+ --performance-schema-max-mutex-classes=#
+ Maximum number of mutex instruments.
+ --performance-schema-max-mutex-instances=#
+ Maximum number of instrumented MUTEX objects.
+ --performance-schema-max-rwlock-classes=#
+ Maximum number of rwlock instruments.
+ --performance-schema-max-rwlock-instances=#
+ Maximum number of instrumented RWLOCK objects.
+ --performance-schema-max-table-handles=#
+ Maximum number of opened instrumented tables.
+ --performance-schema-max-table-instances=#
+ Maximum number of instrumented tables.
+ --performance-schema-max-thread-classes=#
+ Maximum number of thread instruments.
+ --performance-schema-max-thread-instances=#
+ Maximum number of instrumented threads.
--pid-file=name Pid file used by safe_mysqld
--plugin-dir=name Directory for plugins
--plugin-load=name Optional semicolon-separated list of plugins to load,
@@ -720,225 +752,241 @@ The following options may be given as the first argument:
-W, --warnings[=#] Deprecated; use --log-warnings instead.
Variables (--variable-name=value)
-and boolean options {FALSE|TRUE} Value (after reading options)
---------------------------------- ----------------------------------------
-abort-slave-event-count 0
-allow-suspicious-udfs FALSE
-archive ON
-auto-increment-increment 1
-auto-increment-offset 1
-automatic-sp-privileges TRUE
-back-log 50
-big-tables FALSE
-bind-address (No default value)
-binlog-cache-size 32768
-binlog-format STATEMENT
-binlog-row-event-max-size 1024
-blackhole ON
-bulk-insert-buffer-size 8388608
-character-set-client-handshake TRUE
-character-set-filesystem binary
-character-set-server latin1
-character-sets-dir MYSQL_SHAREDIR/charsets/
-chroot (No default value)
-collation-server latin1_swedish_ci
-completion-type NO_CHAIN
-concurrent-insert AUTO
-connect-timeout 10
-console FALSE
-datadir MYSQLTEST_VARDIR/install.db/
-date-format %Y-%m-%d
-datetime-format %Y-%m-%d %H:%i:%s
-default-character-set latin1
-default-collation latin1_swedish_ci
-default-storage-engine MyISAM
-default-time-zone (No default value)
-default-week-format 0
-delay-key-write ON
-delayed-insert-limit 100
-delayed-insert-timeout 300
-delayed-queue-size 1000
-disconnect-slave-event-count 0
-div-precision-increment 4
-enable-locking FALSE
-engine-condition-pushdown TRUE
-event-scheduler OFF
-expire-logs-days 0
-external-locking FALSE
-federated ON
-flush FALSE
-flush-time 1800
-ft-boolean-syntax + -><()~*:""&|
-ft-max-word-len 84
-ft-min-word-len 4
-ft-query-expansion-limit 20
-ft-stopword-file (No default value)
-gdb FALSE
-general-log FALSE
-group-concat-max-len 1024
-help TRUE
-ignore-builtin-innodb FALSE
-init-connect
-init-file (No default value)
-init-rpl-role MASTER
-init-slave
-interactive-timeout 28800
-join-buffer-size 131072
-keep-files-on-create FALSE
-key-buffer-size 8388608
-key-cache-age-threshold 300
-key-cache-block-size 1024
-key-cache-division-limit 100
-language MYSQL_SHAREDIR/
-lc-messages en_US
-lc-messages-dir MYSQL_SHAREDIR/
-lc-time-names en_US
-local-infile TRUE
-log-bin (No default value)
-log-bin-index (No default value)
-log-bin-trust-function-creators FALSE
-log-error
-log-isam myisam.log
-log-output FILE
-log-queries-not-using-indexes FALSE
-log-short-format FALSE
-log-slave-updates FALSE
-log-slow-admin-statements FALSE
-log-slow-slave-statements FALSE
-log-tc tc.log
-log-tc-size 24576
-log-update (No default value)
-log-warnings 1
-long-query-time 10
-low-priority-updates FALSE
-lower-case-table-names 1
-master-info-file master.info
-master-retry-count 86400
-max-allowed-packet 1048576
-max-binlog-cache-size 18446744073709547520
-max-binlog-dump-events 0
-max-binlog-size 1073741824
-max-connect-errors 10
-max-connections 151
-max-delayed-threads 20
-max-error-count 64
-max-heap-table-size 16777216
-max-join-size 18446744073709551615
-max-length-for-sort-data 1024
-max-prepared-stmt-count 16382
-max-relay-log-size 0
-max-seeks-for-key 18446744073709551615
-max-sort-length 1024
-max-sp-recursion-depth 0
-max-tmp-tables 32
-max-user-connections 0
-max-write-lock-count 18446744073709551615
-memlock FALSE
-min-examined-row-limit 0
-multi-range-count 256
-myisam-block-size 1024
-myisam-data-pointer-size 6
-myisam-max-sort-file-size 9223372036853727232
-myisam-mmap-size 18446744073709551615
-myisam-recover-options OFF
-myisam-repair-threads 1
-myisam-sort-buffer-size 8388608
-myisam-stats-method nulls_unequal
-myisam-use-mmap FALSE
-named-pipe FALSE
-net-buffer-length 16384
-net-read-timeout 30
-net-retry-count 10
-net-write-timeout 60
-new FALSE
-old FALSE
-old-alter-table FALSE
-old-passwords FALSE
-old-style-user-limits FALSE
-optimizer-prune-level 1
-optimizer-search-depth 62
-optimizer-switch index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on
-partition ON
-plugin-dir MYSQL_LIBDIR/plugin
-plugin-load (No default value)
-port 3306
-port-open-timeout 0
-preload-buffer-size 32768
-profiling-history-size 15
-query-alloc-block-size 8192
-query-cache-limit 1048576
-query-cache-min-res-unit 4096
-query-cache-size 0
-query-cache-type ON
-query-cache-wlock-invalidate FALSE
-query-prealloc-size 8192
-range-alloc-block-size 4096
-read-buffer-size 131072
-read-only FALSE
-read-rnd-buffer-size 262144
-record-buffer 131072
-relay-log (No default value)
-relay-log-index (No default value)
-relay-log-info-file relay-log.info
-relay-log-purge TRUE
-relay-log-recovery FALSE
-relay-log-space-limit 0
-replicate-same-server-id FALSE
-report-host (No default value)
-report-password (No default value)
-report-port 3306
-report-user (No default value)
-rpl-recovery-rank 0
-safe-user-create FALSE
-secure-auth FALSE
-secure-file-priv (No default value)
-server-id 0
-shared-memory FALSE
-shared-memory-base-name MYSQL
-show-slave-auth-info FALSE
-skip-grant-tables TRUE
-skip-networking FALSE
-skip-show-database FALSE
-skip-slave-start FALSE
-slave-compressed-protocol FALSE
-slave-exec-mode STRICT
-slave-load-tmpdir MYSQLTEST_VARDIR/tmp/
-slave-net-timeout 3600
-slave-skip-errors (No default value)
-slave-transaction-retries 10
-slow-launch-time 2
-slow-query-log FALSE
-socket MySQL
-sort-buffer-size 2097152
-sporadic-binlog-dump-fail FALSE
-sql-mode
-symbolic-links FALSE
-sync-binlog 0
-sync-frm TRUE
-sync-master-info 0
-sync-relay-log 0
-sync-relay-log-info 0
-sysdate-is-now FALSE
-table-cache 400
-table-definition-cache 400
-table-lock-wait-timeout 50
-table-open-cache 400
-tc-heuristic-recover COMMIT
-thread-cache-size 0
-thread-handling one-thread-per-connection
-thread-stack 262144
-time-format %H:%i:%s
-timed-mutexes FALSE
-tmp-table-size 16777216
-tmpdir MYSQLTEST_VARDIR/tmp/
-transaction-alloc-block-size 8192
-transaction-isolation REPEATABLE-READ
-transaction-prealloc-size 4096
-updatable-views-with-limit YES
-use-symbolic-links FALSE
-verbose TRUE
-wait-timeout 28800
-warnings 1
+and boolean options {FALSE|TRUE} Value (after reading options)
+------------------------------------------------- ------------------------
+abort-slave-event-count 0
+allow-suspicious-udfs FALSE
+archive ON
+auto-increment-increment 1
+auto-increment-offset 1
+automatic-sp-privileges TRUE
+back-log 50
+big-tables FALSE
+bind-address (No default value)
+binlog-cache-size 32768
+binlog-format STATEMENT
+binlog-row-event-max-size 1024
+blackhole ON
+bulk-insert-buffer-size 8388608
+character-set-client-handshake TRUE
+character-set-filesystem binary
+character-set-server latin1
+character-sets-dir MYSQL_SHAREDIR/charsets/
+chroot (No default value)
+collation-server latin1_swedish_ci
+completion-type NO_CHAIN
+concurrent-insert AUTO
+connect-timeout 10
+console FALSE
+datadir MYSQLTEST_VARDIR/install.db/
+date-format %Y-%m-%d
+datetime-format %Y-%m-%d %H:%i:%s
+default-character-set latin1
+default-collation latin1_swedish_ci
+default-storage-engine MyISAM
+default-time-zone (No default value)
+default-week-format 0
+delay-key-write ON
+delayed-insert-limit 100
+delayed-insert-timeout 300
+delayed-queue-size 1000
+disconnect-slave-event-count 0
+div-precision-increment 4
+enable-locking FALSE
+engine-condition-pushdown TRUE
+event-scheduler OFF
+expire-logs-days 0
+external-locking FALSE
+federated ON
+flush FALSE
+flush-time 1800
+ft-boolean-syntax + -><()~*:""&|
+ft-max-word-len 84
+ft-min-word-len 4
+ft-query-expansion-limit 20
+ft-stopword-file (No default value)
+gdb FALSE
+general-log FALSE
+group-concat-max-len 1024
+help TRUE
+ignore-builtin-innodb FALSE
+init-connect
+init-file (No default value)
+init-rpl-role MASTER
+init-slave
+interactive-timeout 28800
+join-buffer-size 131072
+keep-files-on-create FALSE
+key-buffer-size 8388608
+key-cache-age-threshold 300
+key-cache-block-size 1024
+key-cache-division-limit 100
+language MYSQL_SHAREDIR/
+lc-messages en_US
+lc-messages-dir MYSQL_SHAREDIR/
+lc-time-names en_US
+local-infile TRUE
+log-bin (No default value)
+log-bin-index (No default value)
+log-bin-trust-function-creators FALSE
+log-error
+log-isam myisam.log
+log-output FILE
+log-queries-not-using-indexes FALSE
+log-short-format FALSE
+log-slave-updates FALSE
+log-slow-admin-statements FALSE
+log-slow-slave-statements FALSE
+log-tc tc.log
+log-tc-size 24576
+log-update (No default value)
+log-warnings 1
+long-query-time 10
+low-priority-updates FALSE
+lower-case-table-names 1
+master-info-file master.info
+master-retry-count 86400
+max-allowed-packet 1048576
+max-binlog-cache-size 18446744073709547520
+max-binlog-dump-events 0
+max-binlog-size 1073741824
+max-connect-errors 10
+max-connections 151
+max-delayed-threads 20
+max-error-count 64
+max-heap-table-size 16777216
+max-join-size 18446744073709551615
+max-length-for-sort-data 1024
+max-prepared-stmt-count 16382
+max-relay-log-size 0
+max-seeks-for-key 18446744073709551615
+max-sort-length 1024
+max-sp-recursion-depth 0
+max-tmp-tables 32
+max-user-connections 0
+max-write-lock-count 18446744073709551615
+memlock FALSE
+min-examined-row-limit 0
+multi-range-count 256
+myisam-block-size 1024
+myisam-data-pointer-size 6
+myisam-max-sort-file-size 9223372036853727232
+myisam-mmap-size 18446744073709551615
+myisam-recover-options OFF
+myisam-repair-threads 1
+myisam-sort-buffer-size 8388608
+myisam-stats-method nulls_unequal
+myisam-use-mmap FALSE
+named-pipe FALSE
+net-buffer-length 16384
+net-read-timeout 30
+net-retry-count 10
+net-write-timeout 60
+new FALSE
+old FALSE
+old-alter-table FALSE
+old-passwords FALSE
+old-style-user-limits FALSE
+optimizer-prune-level 1
+optimizer-search-depth 62
+optimizer-switch index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on
+partition ON
+performance-schema FALSE
+performance-schema-events-waits-history-long-size 10000
+performance-schema-events-waits-history-size 10
+performance-schema-max-cond-classes 80
+performance-schema-max-cond-instances 1000
+performance-schema-max-file-classes 50
+performance-schema-max-file-handles 32768
+performance-schema-max-file-instances 10000
+performance-schema-max-mutex-classes 200
+performance-schema-max-mutex-instances 1000
+performance-schema-max-rwlock-classes 20
+performance-schema-max-rwlock-instances 1000
+performance-schema-max-table-handles 100000
+performance-schema-max-table-instances 50000
+performance-schema-max-thread-classes 50
+performance-schema-max-thread-instances 1000
+plugin-dir MYSQL_LIBDIR/plugin
+plugin-load (No default value)
+port 3306
+port-open-timeout 0
+preload-buffer-size 32768
+profiling-history-size 15
+query-alloc-block-size 8192
+query-cache-limit 1048576
+query-cache-min-res-unit 4096
+query-cache-size 0
+query-cache-type ON
+query-cache-wlock-invalidate FALSE
+query-prealloc-size 8192
+range-alloc-block-size 4096
+read-buffer-size 131072
+read-only FALSE
+read-rnd-buffer-size 262144
+record-buffer 131072
+relay-log (No default value)
+relay-log-index (No default value)
+relay-log-info-file relay-log.info
+relay-log-purge TRUE
+relay-log-recovery FALSE
+relay-log-space-limit 0
+replicate-same-server-id FALSE
+report-host (No default value)
+report-password (No default value)
+report-port 3306
+report-user (No default value)
+rpl-recovery-rank 0
+safe-user-create FALSE
+secure-auth FALSE
+secure-file-priv (No default value)
+server-id 0
+shared-memory FALSE
+shared-memory-base-name MYSQL
+show-slave-auth-info FALSE
+skip-grant-tables TRUE
+skip-networking FALSE
+skip-show-database FALSE
+skip-slave-start FALSE
+slave-compressed-protocol FALSE
+slave-exec-mode STRICT
+slave-load-tmpdir MYSQLTEST_VARDIR/tmp/
+slave-net-timeout 3600
+slave-skip-errors (No default value)
+slave-transaction-retries 10
+slow-launch-time 2
+slow-query-log FALSE
+socket MySQL
+sort-buffer-size 2097152
+sporadic-binlog-dump-fail FALSE
+sql-mode
+symbolic-links FALSE
+sync-binlog 0
+sync-frm TRUE
+sync-master-info 0
+sync-relay-log 0
+sync-relay-log-info 0
+sysdate-is-now FALSE
+table-cache 400
+table-definition-cache 400
+table-lock-wait-timeout 50
+table-open-cache 400
+tc-heuristic-recover COMMIT
+thread-cache-size 0
+thread-handling one-thread-per-connection
+thread-stack 262144
+time-format %H:%i:%s
+timed-mutexes FALSE
+tmp-table-size 16777216
+tmpdir MYSQLTEST_VARDIR/tmp/
+transaction-alloc-block-size 8192
+transaction-isolation REPEATABLE-READ
+transaction-prealloc-size 4096
+updatable-views-with-limit YES
+use-symbolic-links FALSE
+verbose TRUE
+wait-timeout 28800
+warnings 1
To see what values a running MySQL server is using, type
'mysqladmin variables' instead of 'mysqld --verbose --help'.
diff --git a/mysql-test/r/ps_1general.result b/mysql-test/r/ps_1general.result
index 1603ecec127..4f6e5238c3f 100644
--- a/mysql-test/r/ps_1general.result
+++ b/mysql-test/r/ps_1general.result
@@ -262,6 +262,7 @@ Database
information_schema
mtr
mysql
+performance_schema
test
prepare stmt4 from ' show tables from test like ''t2%'' ';
execute stmt4;
diff --git a/mysql-test/r/schema.result b/mysql-test/r/schema.result
index 564fb3626df..402d3e1d987 100644
--- a/mysql-test/r/schema.result
+++ b/mysql-test/r/schema.result
@@ -9,5 +9,6 @@ information_schema
foo
mtr
mysql
+performance_schema
test
drop schema foo;
diff --git a/mysql-test/r/show_check.result b/mysql-test/r/show_check.result
index fc995d42fae..4dcf6c52673 100644
--- a/mysql-test/r/show_check.result
+++ b/mysql-test/r/show_check.result
@@ -142,6 +142,7 @@ Database
information_schema
mtr
mysql
+performance_schema
test
show databases like "test%";
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
diff --git a/mysql-test/suite/binlog/r/binlog_database.result b/mysql-test/suite/binlog/r/binlog_database.result
index 1cc9281f3fc..eba93c3ae14 100644
--- a/mysql-test/suite/binlog/r/binlog_database.result
+++ b/mysql-test/suite/binlog/r/binlog_database.result
@@ -116,4 +116,5 @@ Database
information_schema
mtr
mysql
+performance_schema
test
diff --git a/mysql-test/suite/binlog/r/binlog_unsafe.result b/mysql-test/suite/binlog/r/binlog_unsafe.result
index 5ad12d953ab..1b36ce8f0d0 100644
--- a/mysql-test/suite/binlog/r/binlog_unsafe.result
+++ b/mysql-test/suite/binlog/r/binlog_unsafe.result
@@ -320,10 +320,10 @@ INSERT INTO t2 SET a = func_modify_t1();
SHOW BINLOG EVENTS FROM 12283;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 12283 Query 1 12351 BEGIN
-master-bin.000001 12351 Table_map 1 12393 table_id: 44 (test.t2)
-master-bin.000001 12393 Table_map 1 12435 table_id: 45 (test.t1)
-master-bin.000001 12435 Write_rows 1 12473 table_id: 45
-master-bin.000001 12473 Write_rows 1 12511 table_id: 44 flags: STMT_END_F
+master-bin.000001 12351 Table_map 1 12393 table_id: 62 (test.t2)
+master-bin.000001 12393 Table_map 1 12435 table_id: 63 (test.t1)
+master-bin.000001 12435 Write_rows 1 12473 table_id: 63
+master-bin.000001 12473 Write_rows 1 12511 table_id: 62 flags: STMT_END_F
master-bin.000001 12511 Query 1 12580 COMMIT
DROP TABLE t1,t2;
DROP FUNCTION func_modify_t1;
@@ -347,12 +347,12 @@ INSERT INTO t1 SET a = 2;
SHOW BINLOG EVENTS FROM 13426;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 13426 Query 1 13494 BEGIN
-master-bin.000001 13494 Table_map 1 13535 table_id: 47 (test.t1)
-master-bin.000001 13535 Table_map 1 13577 table_id: 48 (test.t3)
-master-bin.000001 13577 Table_map 1 13619 table_id: 49 (test.t2)
-master-bin.000001 13619 Write_rows 1 13657 table_id: 49
-master-bin.000001 13657 Write_rows 1 13695 table_id: 48
-master-bin.000001 13695 Write_rows 1 13729 table_id: 47 flags: STMT_END_F
+master-bin.000001 13494 Table_map 1 13535 table_id: 65 (test.t1)
+master-bin.000001 13535 Table_map 1 13577 table_id: 66 (test.t3)
+master-bin.000001 13577 Table_map 1 13619 table_id: 67 (test.t2)
+master-bin.000001 13619 Write_rows 1 13657 table_id: 67
+master-bin.000001 13657 Write_rows 1 13695 table_id: 66
+master-bin.000001 13695 Write_rows 1 13729 table_id: 65 flags: STMT_END_F
master-bin.000001 13729 Query 1 13798 COMMIT
DROP TABLE t1,t2,t3;
SET SESSION binlog_format = STATEMENT;
diff --git a/mysql-test/suite/funcs_1/r/is_schemata.result b/mysql-test/suite/funcs_1/r/is_schemata.result
index d96ad497da0..92e01814b0e 100644
--- a/mysql-test/suite/funcs_1/r/is_schemata.result
+++ b/mysql-test/suite/funcs_1/r/is_schemata.result
@@ -56,6 +56,7 @@ catalog_name schema_name sql_path
def information_schema NULL
def mtr NULL
def mysql NULL
+def performance_schema NULL
def test NULL
###############################################################################
# Testcases 3.2.9.2+3.2.9.3: INFORMATION_SCHEMA.SCHEMATA accessible information
diff --git a/mysql-test/suite/jp/r/jp_create_db_sjis.result b/mysql-test/suite/jp/r/jp_create_db_sjis.result
index fd66609b7bc..b7c09fbfbe9 100644
--- a/mysql-test/suite/jp/r/jp_create_db_sjis.result
+++ b/mysql-test/suite/jp/r/jp_create_db_sjis.result
@@ -13,6 +13,7 @@ information_schema
“ú–{Œê
ÆÎݺÞ
mysql
+performance_schema
test
USE `ÆÎݺÞ`;
USE `“ú–{Œê`;
diff --git a/mysql-test/suite/jp/r/jp_create_db_ucs2.result b/mysql-test/suite/jp/r/jp_create_db_ucs2.result
index 3a3316ecbaf..3832ff5a0c7 100644
--- a/mysql-test/suite/jp/r/jp_create_db_ucs2.result
+++ b/mysql-test/suite/jp/r/jp_create_db_ucs2.result
@@ -14,6 +14,7 @@ information_schema
íÜíÝíÞ
ŽÆŽÎŽÝŽºŽÞ
mysql
+performance_schema
test
USE `ŽÆŽÎŽÝŽºŽÞ`;
USE `ÆüËܸì`;
diff --git a/mysql-test/suite/jp/r/jp_create_db_ujis.result b/mysql-test/suite/jp/r/jp_create_db_ujis.result
index 4d6561b88ce..d6bf31336fd 100644
--- a/mysql-test/suite/jp/r/jp_create_db_ujis.result
+++ b/mysql-test/suite/jp/r/jp_create_db_ujis.result
@@ -13,6 +13,7 @@ information_schema
íÜíÝíÞ
ŽÆŽÎŽÝŽºŽÞ
mysql
+performance_schema
test
USE `ŽÆŽÎŽÝŽºŽÞ`;
USE `ÆüËܸì`;
diff --git a/mysql-test/suite/jp/r/jp_create_db_utf8.result b/mysql-test/suite/jp/r/jp_create_db_utf8.result
index 2f70903ac71..62202d43df0 100644
--- a/mysql-test/suite/jp/r/jp_create_db_utf8.result
+++ b/mysql-test/suite/jp/r/jp_create_db_utf8.result
@@ -13,6 +13,7 @@ information_schema
龔龖龗
ニホï¾ï½ºï¾ž
mysql
+performance_schema
test
USE `ニホï¾ï½ºï¾ž`;
USE `日本語`;
diff --git a/mysql-test/suite/perfschema/include/binlog_common.inc b/mysql-test/suite/perfschema/include/binlog_common.inc
new file mode 100644
index 00000000000..10afe54ab5b
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/binlog_common.inc
@@ -0,0 +1,49 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+RESET MASTER;
+
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO'
+ where name like "wait/synch/rwlock/%";
+
+select count(*) > 0 from performance_schema.EVENTS_WAITS_CURRENT;
+
+--disable_warnings
+drop table if exists test.t1;
+drop table if exists test.t2;
+--enable_warnings
+
+create table test.t1 (thread_id integer);
+create table test.t2 (name varchar(128));
+
+insert into test.t1
+ select thread_id from performance_schema.EVENTS_WAITS_CURRENT;
+
+insert into test.t2
+ select name from performance_schema.SETUP_INSTRUMENTS
+ where name like "wait/synch/rwlock/%";
+
+drop table test.t1;
+drop table test.t2;
+
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES'
+ where name like "wait/synch/rwlock/%";
+
+--source include/show_binlog_events.inc
+
diff --git a/mysql-test/suite/perfschema/include/cleanup_helper.inc b/mysql-test/suite/perfschema/include/cleanup_helper.inc
new file mode 100644
index 00000000000..5c2429ddb97
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/cleanup_helper.inc
@@ -0,0 +1,25 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+
+disconnect con1;
+disconnect con2;
+disconnect con3;
+
+connection default;
+
diff --git a/mysql-test/suite/perfschema/include/privilege.inc b/mysql-test/suite/perfschema/include/privilege.inc
new file mode 100644
index 00000000000..ef2acc995d5
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/privilege.inc
@@ -0,0 +1,194 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--disable_warnings
+drop table if exists test.t1;
+--enable_warnings
+
+## The result of show grants is not consistent across platforms ...
+## show grants;
+
+## Not enforced yet: deny CREATE_ACL and DROP_ACL
+## Waiting to remove .FRM files first
+##
+## --error ER_DBACCESS_DENIED_ERROR
+## create table performance_schema.t1(a int);
+##
+## --error ER_DBACCESS_DENIED_ERROR
+## drop table performance_schema.t1;
+##
+## --error ER_DBACCESS_DENIED_ERROR
+## create table performance_schema.SETUP_INSTRUMENTS(a int);
+##
+## --error ER_DBACCESS_DENIED_ERROR
+## create table performance_schema.EVENTS_WAITS_CURRENT(a int);
+##
+## --error ER_DBACCESS_DENIED_ERROR
+## create table performance_schema.FILE_INSTANCES(a int);
+##
+## --error ER_DBACCESS_DENIED_ERROR
+## drop table performance_schema.SETUP_INSTRUMENTS;
+##
+## --error ER_DBACCESS_DENIED_ERROR
+## drop table performance_schema.EVENTS_WAITS_CURRENT;
+##
+## --error ER_DBACCESS_DENIED_ERROR
+## drop table performance_schema.FILE_INSTANCES;
+
+--error ER_DBACCESS_DENIED_ERROR
+rename table performance_schema.SETUP_INSTRUMENTS to test.t1;
+
+--error ER_DBACCESS_DENIED_ERROR
+rename table performance_schema.EVENTS_WAITS_CURRENT to test.t1;
+
+--error ER_DBACCESS_DENIED_ERROR
+rename table performance_schema.FILE_INSTANCES to test.t1;
+
+--error ER_DBACCESS_DENIED_ERROR
+rename table performance_schema.SETUP_INSTRUMENTS to performance_schema.t1;
+
+--error ER_DBACCESS_DENIED_ERROR
+rename table performance_schema.EVENTS_WAITS_CURRENT to performance_schema.t1;
+
+--error ER_DBACCESS_DENIED_ERROR
+rename table performance_schema.FILE_INSTANCES to performance_schema.t1;
+
+--error ER_DBACCESS_DENIED_ERROR
+rename table performance_schema.SETUP_INSTRUMENTS
+ to performance_schema.EVENTS_WAITS_CURRENT;
+
+--error ER_DBACCESS_DENIED_ERROR
+rename table performance_schema.EVENTS_WAITS_CURRENT
+ to performance_schema.SETUP_INSTRUMENTS;
+
+--error ER_DBACCESS_DENIED_ERROR
+create procedure performance_schema.my_proc() begin end;
+
+--error ER_DBACCESS_DENIED_ERROR
+create function performance_schema.my_func() returns int return 0;
+
+--error ER_DBACCESS_DENIED_ERROR
+create event performance_schema.my_event on schedule every 15 minute
+do begin end;
+
+--error ER_DBACCESS_DENIED_ERROR
+create trigger performance_schema.bi_setup_instruments
+ before insert on performance_schema.SETUP_INSTRUMENTS
+ for each row begin end;
+
+--error ER_DBACCESS_DENIED_ERROR
+create trigger performance_schema.bi_events_waits_current
+ before insert on performance_schema.EVENTS_WAITS_CURRENT
+ for each row begin end;
+
+--error ER_DBACCESS_DENIED_ERROR
+create trigger performance_schema.bi_file_instances
+ before insert on performance_schema.FILE_INSTANCES
+ for each row begin end;
+
+--error ER_WRONG_PERFSCHEMA_USAGE
+create table test.t1(a int) engine=PERFORMANCE_SCHEMA;
+
+--error ER_WRONG_PERFSCHEMA_USAGE
+create table test.t1 like performance_schema.SETUP_INSTRUMENTS;
+
+--error ER_WRONG_PERFSCHEMA_USAGE
+create table test.t1 like performance_schema.EVENTS_WAITS_CURRENT;
+
+--error ER_WRONG_PERFSCHEMA_USAGE
+create table test.t1 like performance_schema.FILE_INSTANCES;
+
+--replace_result '\'setup_instruments' '\'SETUP_INSTRUMENTS'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.SETUP_INSTRUMENTS
+ set name="foo";
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.EVENTS_WAITS_CURRENT
+ set name="foo";
+
+--replace_result '\'file_instances' '\'FILE_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.FILE_INSTANCES
+ set name="foo";
+
+--replace_result '\'setup_instruments' '\'SETUP_INSTRUMENTS'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.SETUP_INSTRUMENTS;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.EVENTS_WAITS_CURRENT;
+
+--replace_result '\'file_instances' '\'FILE_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.FILE_INSTANCES;
+
+lock table performance_schema.SETUP_INSTRUMENTS read;
+unlock tables;
+
+lock table performance_schema.SETUP_INSTRUMENTS write;
+unlock tables;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+lock table performance_schema.EVENTS_WAITS_CURRENT read;
+unlock tables;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+lock table performance_schema.EVENTS_WAITS_CURRENT write;
+unlock tables;
+
+--replace_result '\'file_instances' '\'FILE_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+lock table performance_schema.FILE_INSTANCES read;
+unlock tables;
+
+--replace_result '\'file_instances' '\'FILE_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+lock table performance_schema.FILE_INSTANCES write;
+unlock tables;
+
+--echo #
+--echo # WL#4818, NFS2: Can use grants to give normal user access
+--echo # to view data from _CURRENT and _HISTORY tables
+--echo #
+--echo # Should work as pfs_user_1 and pfs_user_2, but not as pfs_user_3.
+--echo # (Except for EVENTS_WAITS_CURRENT, which is granted.)
+
+# Errors here will be caught by the diff afterwards
+--disable_abort_on_error
+
+--replace_result '\'events_waits_history' '\'EVENTS_WAITS_HISTORY'
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_HISTORY LIMIT 1;
+
+--replace_result '\'events_waits_history_long' '\'EVENTS_WAITS_HISTORY_LONG'
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_HISTORY_LONG LIMIT 1;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_CURRENT LIMIT 1;
+
+--replace_result '\'events_waits_summary_by_instance' '\'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE LIMIT 1;
+
+--replace_result '\'file_summary_by_instance' '\'FILE_SUMMARY_BY_INSTANCE'
+SELECT "can select" FROM performance_schema.FILE_SUMMARY_BY_INSTANCE LIMIT 1;
+
+--enable_abort_on_error
+
diff --git a/mysql-test/suite/perfschema/include/setup_helper.inc b/mysql-test/suite/perfschema/include/setup_helper.inc
new file mode 100644
index 00000000000..8a2dfa86496
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/setup_helper.inc
@@ -0,0 +1,54 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+let $MYSQLD_DATADIR= `select @@datadir`;
+let $MYSQLD_TMPDIR= `select @@tmpdir`;
+
+--disable_query_log
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO';
+update performance_schema.SETUP_CONSUMERS set enabled='YES';
+--enable_query_log
+
+connect (con1, localhost, root, , );
+
+let $con1_THREAD_ID=`select thread_id from performance_schema.PROCESSLIST
+ where ID in (select connection_id())`;
+
+connect (con2, localhost, root, , );
+
+let $con2_THREAD_ID=`select thread_id from performance_schema.PROCESSLIST
+ where ID in (select connection_id())`;
+
+connect (con3, localhost, root, , );
+
+let $con3_THREAD_ID=`select thread_id from performance_schema.PROCESSLIST
+ where ID in (select connection_id())`;
+
+connection default;
+
+--disable_query_log
+prepare stmt_dump_events from
+ "select event_name,
+ left(source, locate(\":\", source)) as short_source,
+ operation, number_of_bytes
+ from performance_schema.EVENTS_WAITS_HISTORY_LONG
+ where thread_id=? order by event_id;";
+
+prepare stmt_dump_thread from
+ "select name from performance_schema.PROCESSLIST where thread_id=? ;";
+--enable_query_log
+
diff --git a/mysql-test/suite/perfschema/include/start_server_common.inc b/mysql-test/suite/perfschema/include/start_server_common.inc
new file mode 100644
index 00000000000..fa1cb953f59
--- /dev/null
+++ b/mysql-test/suite/perfschema/include/start_server_common.inc
@@ -0,0 +1,62 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+show databases;
+
+select count(*) from performance_schema.PERFORMANCE_TIMERS;
+select count(*) from performance_schema.SETUP_CONSUMERS;
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+select count(*) from performance_schema.SETUP_TIMERS;
+
+# Make sure we don't crash, no matter what the starting parameters are
+
+--disable_result_log
+select * from performance_schema.COND_INSTANCES;
+select * from performance_schema.EVENTS_WAITS_CURRENT;
+select * from performance_schema.EVENTS_WAITS_HISTORY;
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+select * from performance_schema.FILE_INSTANCES;
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+select * from performance_schema.MUTEX_INSTANCES;
+select * from performance_schema.PERFORMANCE_TIMERS;
+select * from performance_schema.PROCESSLIST;
+select * from performance_schema.RWLOCK_INSTANCES;
+select * from performance_schema.SETUP_CONSUMERS;
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_OBJECTS;
+select * from performance_schema.SETUP_TIMERS;
+--enable_result_log
+
+# This has a stable output, printing the result:
+show variables like "performance_schema%";
+
+# This has an unrepeatable output, it does depends too much on
+# - the platform hardware (sizeof structures, padding)
+# - the compiler used (sizeof(enum))
+# - the platform header files (sizeof(size_t))
+# - the code path in the server (what gets executed and instrumented
+# at runtime)
+
+--disable_result_log
+show engine PERFORMANCE_SCHEMA status;
+show status like "performance_schema%";
+--enable_result_log
+
diff --git a/mysql-test/suite/perfschema/r/aggregate.result b/mysql-test/suite/perfschema/r/aggregate.result
new file mode 100644
index 00000000000..598f9297cc5
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/aggregate.result
@@ -0,0 +1,101 @@
+"General cleanup"
+drop table if exists t1;
+update performance_schema.SETUP_INSTRUMENTS set enabled = 'NO';
+update performance_schema.SETUP_CONSUMERS set enabled = 'NO';
+truncate table performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+truncate table performance_schema.FILE_SUMMARY_BY_INSTANCE;
+truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+update performance_schema.SETUP_CONSUMERS set enabled = 'YES';
+update performance_schema.SETUP_INSTRUMENTS
+set enabled = 'YES', timed = 'YES';
+create table t1 (
+id INT PRIMARY KEY,
+b CHAR(100) DEFAULT 'initial value')
+ENGINE=MyISAM;
+insert into t1 (id) values (1), (2), (3), (4), (5), (6), (7), (8);
+update performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO';
+set @dump_all=FALSE;
+"Verifying file aggregate consistency"
+SELECT EVENT_NAME, e.COUNT_READ, SUM(i.COUNT_READ)
+FROM performance_schema.FILE_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.FILE_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.COUNT_READ <> SUM(i.COUNT_READ))
+OR @dump_all;
+EVENT_NAME COUNT_READ SUM(i.COUNT_READ)
+SELECT EVENT_NAME, e.COUNT_WRITE, SUM(i.COUNT_WRITE)
+FROM performance_schema.FILE_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.FILE_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.COUNT_WRITE <> SUM(i.COUNT_WRITE))
+OR @dump_all;
+EVENT_NAME COUNT_WRITE SUM(i.COUNT_WRITE)
+SELECT EVENT_NAME, e.SUM_NUMBER_OF_BYTES_READ, SUM(i.SUM_NUMBER_OF_BYTES_READ)
+FROM performance_schema.FILE_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.FILE_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.SUM_NUMBER_OF_BYTES_READ <> SUM(i.SUM_NUMBER_OF_BYTES_READ))
+OR @dump_all;
+EVENT_NAME SUM_NUMBER_OF_BYTES_READ SUM(i.SUM_NUMBER_OF_BYTES_READ)
+SELECT EVENT_NAME, e.SUM_NUMBER_OF_BYTES_WRITE, SUM(i.SUM_NUMBER_OF_BYTES_WRITE)
+FROM performance_schema.FILE_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.FILE_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.SUM_NUMBER_OF_BYTES_WRITE <> SUM(i.SUM_NUMBER_OF_BYTES_WRITE))
+OR @dump_all;
+EVENT_NAME SUM_NUMBER_OF_BYTES_WRITE SUM(i.SUM_NUMBER_OF_BYTES_WRITE)
+"Verifying waits aggregate consistency (instance)"
+SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(i.SUM_TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.SUM_TIMER_WAIT <> SUM(i.SUM_TIMER_WAIT))
+OR @dump_all;
+EVENT_NAME SUM_TIMER_WAIT SUM(i.SUM_TIMER_WAIT)
+SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(i.MIN_TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.MIN_TIMER_WAIT <> MIN(i.MIN_TIMER_WAIT))
+AND (MIN(i.MIN_TIMER_WAIT) != 0)
+OR @dump_all;
+EVENT_NAME MIN_TIMER_WAIT MIN(i.MIN_TIMER_WAIT)
+SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(i.MAX_TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.MAX_TIMER_WAIT <> MAX(i.MAX_TIMER_WAIT))
+OR @dump_all;
+EVENT_NAME MAX_TIMER_WAIT MAX(i.MAX_TIMER_WAIT)
+"Verifying waits aggregate consistency (thread)"
+SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(t.SUM_TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t
+USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.SUM_TIMER_WAIT <> SUM(t.SUM_TIMER_WAIT))
+OR @dump_all;
+EVENT_NAME SUM_TIMER_WAIT SUM(t.SUM_TIMER_WAIT)
+SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(t.MIN_TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t
+USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.MIN_TIMER_WAIT <> MIN(t.MIN_TIMER_WAIT))
+AND (MIN(t.MIN_TIMER_WAIT) != 0)
+OR @dump_all;
+EVENT_NAME MIN_TIMER_WAIT MIN(t.MIN_TIMER_WAIT)
+SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(t.MAX_TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t
+USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.MAX_TIMER_WAIT <> MAX(t.MAX_TIMER_WAIT))
+OR @dump_all;
+EVENT_NAME MAX_TIMER_WAIT MAX(t.MAX_TIMER_WAIT)
+update performance_schema.SETUP_CONSUMERS set enabled = 'YES';
+update performance_schema.SETUP_INSTRUMENTS
+set enabled = 'YES', timed = 'YES';
+drop table test.t1;
diff --git a/mysql-test/suite/perfschema/r/bad_option_1.result b/mysql-test/suite/perfschema/r/bad_option_1.result
new file mode 100644
index 00000000000..02fd04afd33
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/bad_option_1.result
@@ -0,0 +1,2 @@
+Found: unknown variable 'performance-schema-enabled=maybe'
+Found: Aborting
diff --git a/mysql-test/suite/perfschema/r/bad_option_2.result b/mysql-test/suite/perfschema/r/bad_option_2.result
new file mode 100644
index 00000000000..d8fda2af3b6
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/bad_option_2.result
@@ -0,0 +1 @@
+Found: ambiguous option '--performance-schema-max_=12'
diff --git a/mysql-test/suite/perfschema/r/binlog_mix.result b/mysql-test/suite/perfschema/r/binlog_mix.result
new file mode 100644
index 00000000000..b437f4eda1f
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/binlog_mix.result
@@ -0,0 +1,49 @@
+set binlog_format=mixed;
+RESET MASTER;
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO'
+ where name like "wait/synch/rwlock/%";
+select count(*) > 0 from performance_schema.EVENTS_WAITS_CURRENT;
+count(*) > 0
+1
+drop table if exists test.t1;
+drop table if exists test.t2;
+create table test.t1 (thread_id integer);
+create table test.t2 (name varchar(128));
+insert into test.t1
+select thread_id from performance_schema.EVENTS_WAITS_CURRENT;
+insert into test.t2
+select name from performance_schema.SETUP_INSTRUMENTS
+where name like "wait/synch/rwlock/%";
+drop table test.t1;
+drop table test.t2;
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES'
+ where name like "wait/synch/rwlock/%";
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # BEGIN
+master-bin.000001 # Table_map # # table_id: # (performance_schema.SETUP_INSTRUMENTS)
+master-bin.000001 # Update_rows # # table_id: #
+master-bin.000001 # Update_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Query # # use `test`; drop table if exists test.t1
+master-bin.000001 # Query # # use `test`; drop table if exists test.t2
+master-bin.000001 # Query # # use `test`; create table test.t1 (thread_id integer)
+master-bin.000001 # Query # # use `test`; create table test.t2 (name varchar(128))
+master-bin.000001 # Query # # BEGIN
+master-bin.000001 # Table_map # # table_id: # (test.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Query # # BEGIN
+master-bin.000001 # Table_map # # table_id: # (test.t2)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Query # # use `test`; drop table test.t1
+master-bin.000001 # Query # # use `test`; drop table test.t2
+master-bin.000001 # Query # # BEGIN
+master-bin.000001 # Table_map # # table_id: # (performance_schema.SETUP_INSTRUMENTS)
+master-bin.000001 # Update_rows # # table_id: #
+master-bin.000001 # Update_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
diff --git a/mysql-test/suite/perfschema/r/binlog_row.result b/mysql-test/suite/perfschema/r/binlog_row.result
new file mode 100644
index 00000000000..50a201a81d9
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/binlog_row.result
@@ -0,0 +1,49 @@
+set binlog_format=row;
+RESET MASTER;
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO'
+ where name like "wait/synch/rwlock/%";
+select count(*) > 0 from performance_schema.EVENTS_WAITS_CURRENT;
+count(*) > 0
+1
+drop table if exists test.t1;
+drop table if exists test.t2;
+create table test.t1 (thread_id integer);
+create table test.t2 (name varchar(128));
+insert into test.t1
+select thread_id from performance_schema.EVENTS_WAITS_CURRENT;
+insert into test.t2
+select name from performance_schema.SETUP_INSTRUMENTS
+where name like "wait/synch/rwlock/%";
+drop table test.t1;
+drop table test.t2;
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES'
+ where name like "wait/synch/rwlock/%";
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # BEGIN
+master-bin.000001 # Table_map # # table_id: # (performance_schema.SETUP_INSTRUMENTS)
+master-bin.000001 # Update_rows # # table_id: #
+master-bin.000001 # Update_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Query # # use `test`; drop table if exists test.t1
+master-bin.000001 # Query # # use `test`; drop table if exists test.t2
+master-bin.000001 # Query # # use `test`; create table test.t1 (thread_id integer)
+master-bin.000001 # Query # # use `test`; create table test.t2 (name varchar(128))
+master-bin.000001 # Query # # BEGIN
+master-bin.000001 # Table_map # # table_id: # (test.t1)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Query # # BEGIN
+master-bin.000001 # Table_map # # table_id: # (test.t2)
+master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
+master-bin.000001 # Query # # use `test`; drop table test.t1
+master-bin.000001 # Query # # use `test`; drop table test.t2
+master-bin.000001 # Query # # BEGIN
+master-bin.000001 # Table_map # # table_id: # (performance_schema.SETUP_INSTRUMENTS)
+master-bin.000001 # Update_rows # # table_id: #
+master-bin.000001 # Update_rows # # table_id: # flags: STMT_END_F
+master-bin.000001 # Query # # COMMIT
diff --git a/mysql-test/suite/perfschema/r/binlog_stmt.result b/mysql-test/suite/perfschema/r/binlog_stmt.result
new file mode 100644
index 00000000000..cec46b20670
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/binlog_stmt.result
@@ -0,0 +1,48 @@
+set binlog_format=statement;
+RESET MASTER;
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO'
+ where name like "wait/synch/rwlock/%";
+Warnings:
+Note 1592 Statement may not be safe to log in statement format.
+select count(*) > 0 from performance_schema.EVENTS_WAITS_CURRENT;
+count(*) > 0
+1
+drop table if exists test.t1;
+drop table if exists test.t2;
+create table test.t1 (thread_id integer);
+create table test.t2 (name varchar(128));
+insert into test.t1
+select thread_id from performance_schema.EVENTS_WAITS_CURRENT;
+Warnings:
+Note 1592 Statement may not be safe to log in statement format.
+insert into test.t2
+select name from performance_schema.SETUP_INSTRUMENTS
+where name like "wait/synch/rwlock/%";
+Warnings:
+Note 1592 Statement may not be safe to log in statement format.
+drop table test.t1;
+drop table test.t2;
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES'
+ where name like "wait/synch/rwlock/%";
+Warnings:
+Note 1592 Statement may not be safe to log in statement format.
+show binlog events from <binlog_start>;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 # Query # # use `test`; update performance_schema.SETUP_INSTRUMENTS set enabled='NO'
+ where name like "wait/synch/rwlock/%"
+master-bin.000001 # Query # # use `test`; drop table if exists test.t1
+master-bin.000001 # Query # # use `test`; drop table if exists test.t2
+master-bin.000001 # Query # # use `test`; create table test.t1 (thread_id integer)
+master-bin.000001 # Query # # use `test`; create table test.t2 (name varchar(128))
+master-bin.000001 # Query # # use `test`; insert into test.t1
+select thread_id from performance_schema.EVENTS_WAITS_CURRENT
+master-bin.000001 # Query # # use `test`; insert into test.t2
+select name from performance_schema.SETUP_INSTRUMENTS
+where name like "wait/synch/rwlock/%"
+master-bin.000001 # Query # # use `test`; drop table test.t1
+master-bin.000001 # Query # # use `test`; drop table test.t2
+master-bin.000001 # Query # # use `test`; update performance_schema.SETUP_INSTRUMENTS set enabled='YES'
+ where name like "wait/synch/rwlock/%"
diff --git a/mysql-test/suite/perfschema/r/cnf_option.result b/mysql-test/suite/perfschema/r/cnf_option.result
new file mode 100644
index 00000000000..85adfb5113d
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/cnf_option.result
@@ -0,0 +1,6 @@
+show variables like 'performance_schema_max_thread_classes';
+Variable_name Value
+performance_schema_max_thread_classes 12
+show variables like 'performance_schema_max_thread_instances';
+Variable_name Value
+performance_schema_max_thread_instances 318
diff --git a/mysql-test/suite/perfschema/r/column_privilege.result b/mysql-test/suite/perfschema/r/column_privilege.result
new file mode 100644
index 00000000000..7bbc59ac452
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/column_privilege.result
@@ -0,0 +1,27 @@
+show grants;
+Grants for root@localhost
+GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
+grant usage on *.* to 'pfs_user_5'@localhost with GRANT OPTION;
+grant SELECT(thread_id, event_id) on performance_schema.EVENTS_WAITS_CURRENT
+to 'pfs_user_5'@localhost;
+grant UPDATE(enabled) on performance_schema.SETUP_INSTRUMENTS
+to 'pfs_user_5'@localhost;
+flush privileges;
+select thread_id from performance_schema.EVENTS_WAITS_CURRENT;
+select thread_id, event_id from performance_schema.EVENTS_WAITS_CURRENT;
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+select event_name from performance_schema.EVENTS_WAITS_CURRENT;
+ERROR 42000: SELECT command denied to user 'pfs_user_5'@'localhost' for column 'event_name' in table 'EVENTS_WAITS_CURRENT'
+select thread_id, event_id, event_name
+from performance_schema.EVENTS_WAITS_CURRENT;
+ERROR 42000: SELECT command denied to user 'pfs_user_5'@'localhost' for column 'event_name' in table 'EVENTS_WAITS_CURRENT'
+update performance_schema.SETUP_INSTRUMENTS set name='illegal';
+ERROR 42000: UPDATE command denied to user 'pfs_user_5'@'localhost' for column 'name' in table 'SETUP_INSTRUMENTS'
+update performance_schema.SETUP_INSTRUMENTS set timed='NO';
+ERROR 42000: UPDATE command denied to user 'pfs_user_5'@'localhost' for column 'timed' in table 'SETUP_INSTRUMENTS'
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'pfs_user_5'@localhost;
+DROP USER 'pfs_user_5'@localhost;
+flush privileges;
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES', timed = 'YES';
+UPDATE performance_schema.SETUP_CONSUMERS SET enabled = 'YES';
+UPDATE performance_schema.SETUP_TIMERS SET timer_name = 'CYCLE';
diff --git a/mysql-test/suite/perfschema/r/ddl_cond_instances.result b/mysql-test/suite/perfschema/r/ddl_cond_instances.result
new file mode 100644
index 00000000000..33adcebaceb
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_cond_instances.result
@@ -0,0 +1,8 @@
+alter table performance_schema.COND_INSTANCES add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.COND_INSTANCES;
+ERROR HY000: Invalid performance_schema usage.
+ALTER TABLE performance_schema.COND_INSTANCES ADD INDEX test_index(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.COND_INSTANCES(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_events_waits_current.result b/mysql-test/suite/perfschema/r/ddl_events_waits_current.result
new file mode 100644
index 00000000000..a438c93affe
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_events_waits_current.result
@@ -0,0 +1,7 @@
+alter table performance_schema.EVENTS_WAITS_CURRENT add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.EVENTS_WAITS_CURRENT;
+ALTER TABLE performance_schema.EVENTS_WAITS_CURRENT ADD INDEX test_index(EVENT_ID);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.EVENTS_WAITS_CURRENT(EVENT_ID);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_events_waits_history.result b/mysql-test/suite/perfschema/r/ddl_events_waits_history.result
new file mode 100644
index 00000000000..748dc2f29cd
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_events_waits_history.result
@@ -0,0 +1,7 @@
+alter table performance_schema.EVENTS_WAITS_HISTORY add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.EVENTS_WAITS_HISTORY;
+ALTER TABLE performance_schema.EVENTS_WAITS_HISTORY ADD INDEX test_index(EVENT_ID);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.EVENTS_WAITS_HISTORY(EVENT_ID);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_events_waits_history_long.result b/mysql-test/suite/perfschema/r/ddl_events_waits_history_long.result
new file mode 100644
index 00000000000..1a047a765f6
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_events_waits_history_long.result
@@ -0,0 +1,7 @@
+alter table performance_schema.EVENTS_WAITS_HISTORY_LONG add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.EVENTS_WAITS_HISTORY_LONG;
+ALTER TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG ADD INDEX test_index(EVENT_ID);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.EVENTS_WAITS_HISTORY_LONG(EVENT_ID);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_ews_by_event_name.result b/mysql-test/suite/perfschema/r/ddl_ews_by_event_name.result
new file mode 100644
index 00000000000..74fc4e1a640
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_ews_by_event_name.result
@@ -0,0 +1,7 @@
+alter table performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+ALTER TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME ADD INDEX test_index(EVENT_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME(EVENT_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_ews_by_instance.result b/mysql-test/suite/perfschema/r/ddl_ews_by_instance.result
new file mode 100644
index 00000000000..4a35565bae0
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_ews_by_instance.result
@@ -0,0 +1,7 @@
+alter table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+ALTER TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE ADD INDEX test_index(EVENT_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE(EVENT_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_ews_by_thread_by_event_name.result b/mysql-test/suite/perfschema/r/ddl_ews_by_thread_by_event_name.result
new file mode 100644
index 00000000000..18d98006220
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_ews_by_thread_by_event_name.result
@@ -0,0 +1,9 @@
+alter table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+ALTER TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME ADD INDEX test_index(THREAD_ID);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index
+ON performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME(THREAD_ID);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_file_instances.result b/mysql-test/suite/perfschema/r/ddl_file_instances.result
new file mode 100644
index 00000000000..21e65c62405
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_file_instances.result
@@ -0,0 +1,8 @@
+alter table performance_schema.FILE_INSTANCES add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.FILE_INSTANCES;
+ERROR HY000: Invalid performance_schema usage.
+ALTER TABLE performance_schema.FILE_INSTANCES ADD INDEX test_index(FILE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.FILE_INSTANCES(FILE_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_fs_by_event_name.result b/mysql-test/suite/perfschema/r/ddl_fs_by_event_name.result
new file mode 100644
index 00000000000..2f21ef56832
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_fs_by_event_name.result
@@ -0,0 +1,7 @@
+alter table performance_schema.FILE_SUMMARY_BY_EVENT_NAME add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+ALTER TABLE performance_schema.FILE_SUMMARY_BY_EVENT_NAME ADD INDEX test_index(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.FILE_SUMMARY_BY_EVENT_NAME(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_fs_by_instance.result b/mysql-test/suite/perfschema/r/ddl_fs_by_instance.result
new file mode 100644
index 00000000000..8e256d1fd8d
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_fs_by_instance.result
@@ -0,0 +1,7 @@
+alter table performance_schema.FILE_SUMMARY_BY_INSTANCE add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.FILE_SUMMARY_BY_INSTANCE;
+ALTER TABLE performance_schema.FILE_SUMMARY_BY_INSTANCE ADD INDEX test_index(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.FILE_SUMMARY_BY_INSTANCE(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_mutex_instances.result b/mysql-test/suite/perfschema/r/ddl_mutex_instances.result
new file mode 100644
index 00000000000..35397a5294d
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_mutex_instances.result
@@ -0,0 +1,8 @@
+alter table performance_schema.MUTEX_INSTANCES add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.MUTEX_INSTANCES;
+ERROR HY000: Invalid performance_schema usage.
+ALTER TABLE performance_schema.MUTEX_INSTANCES ADD INDEX test_index(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.MUTEX_INSTANCES(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_performance_timers.result b/mysql-test/suite/perfschema/r/ddl_performance_timers.result
new file mode 100644
index 00000000000..5de8193b205
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_performance_timers.result
@@ -0,0 +1,8 @@
+alter table performance_schema.PERFORMANCE_TIMERS add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.PERFORMANCE_TIMERS;
+ERROR HY000: Invalid performance_schema usage.
+ALTER TABLE performance_schema.PERFORMANCE_TIMERS ADD INDEX test_index(TIMER_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.PERFORMANCE_TIMERS(TIMER_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_processlist.result b/mysql-test/suite/perfschema/r/ddl_processlist.result
new file mode 100644
index 00000000000..5a9eb766349
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_processlist.result
@@ -0,0 +1,8 @@
+alter table performance_schema.PROCESSLIST add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.PROCESSLIST;
+ERROR HY000: Invalid performance_schema usage.
+ALTER TABLE performance_schema.PROCESSLIST ADD INDEX test_index(ID);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.PROCESSLIST(ID);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_rwlock_instances.result b/mysql-test/suite/perfschema/r/ddl_rwlock_instances.result
new file mode 100644
index 00000000000..849d191b17f
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_rwlock_instances.result
@@ -0,0 +1,8 @@
+alter table performance_schema.RWLOCK_INSTANCES add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.RWLOCK_INSTANCES;
+ERROR HY000: Invalid performance_schema usage.
+ALTER TABLE performance_schema.RWLOCK_INSTANCES ADD INDEX test_index(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.RWLOCK_INSTANCES(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_setup_consumers.result b/mysql-test/suite/perfschema/r/ddl_setup_consumers.result
new file mode 100644
index 00000000000..f141725ee1f
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_setup_consumers.result
@@ -0,0 +1,8 @@
+alter table performance_schema.SETUP_CONSUMERS add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.SETUP_CONSUMERS;
+ERROR HY000: Invalid performance_schema usage.
+ALTER TABLE performance_schema.SETUP_CONSUMERS ADD INDEX test_index(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.SETUP_CONSUMERS(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_setup_instruments.result b/mysql-test/suite/perfschema/r/ddl_setup_instruments.result
new file mode 100644
index 00000000000..42e54b587d8
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_setup_instruments.result
@@ -0,0 +1,8 @@
+alter table performance_schema.SETUP_INSTRUMENTS add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.SETUP_INSTRUMENTS;
+ERROR HY000: Invalid performance_schema usage.
+ALTER TABLE performance_schema.SETUP_INSTRUMENTS ADD INDEX test_index(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.SETUP_INSTRUMENTS(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_setup_objects.result b/mysql-test/suite/perfschema/r/ddl_setup_objects.result
new file mode 100644
index 00000000000..c0f00745963
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_setup_objects.result
@@ -0,0 +1,7 @@
+alter table performance_schema.SETUP_OBJECTS add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.SETUP_OBJECTS;
+ALTER TABLE performance_schema.SETUP_OBJECTS ADD INDEX test_index(OBJECT_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.SETUP_OBJECTS(OBJECT_NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/ddl_setup_timers.result b/mysql-test/suite/perfschema/r/ddl_setup_timers.result
new file mode 100644
index 00000000000..fc74730bd50
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/ddl_setup_timers.result
@@ -0,0 +1,8 @@
+alter table performance_schema.SETUP_TIMERS add column foo integer;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+truncate table performance_schema.SETUP_TIMERS;
+ERROR HY000: Invalid performance_schema usage.
+ALTER TABLE performance_schema.SETUP_TIMERS ADD INDEX test_index(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+CREATE UNIQUE INDEX test_index ON performance_schema.SETUP_TIMERS(NAME);
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
diff --git a/mysql-test/suite/perfschema/r/dml_cond_instances.result b/mysql-test/suite/perfschema/r/dml_cond_instances.result
new file mode 100644
index 00000000000..8adc632b91b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_cond_instances.result
@@ -0,0 +1,23 @@
+select * from performance_schema.COND_INSTANCES limit 1;
+NAME OBJECT_INSTANCE_BEGIN
+# #
+select * from performance_schema.COND_INSTANCES
+where name='FOO';
+NAME OBJECT_INSTANCE_BEGIN
+insert into performance_schema.COND_INSTANCES
+set name='FOO', object_instance_begin=12;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'COND_INSTANCES'
+update performance_schema.COND_INSTANCES
+set name='FOO';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'COND_INSTANCES'
+delete from performance_schema.COND_INSTANCES
+where name like "wait/%";
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'COND_INSTANCES'
+delete from performance_schema.COND_INSTANCES;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'COND_INSTANCES'
+LOCK TABLES performance_schema.COND_INSTANCES READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'COND_INSTANCES'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.COND_INSTANCES WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'COND_INSTANCES'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_events_waits_current.result b/mysql-test/suite/perfschema/r/dml_events_waits_current.result
new file mode 100644
index 00000000000..5cd0dba7ad1
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_events_waits_current.result
@@ -0,0 +1,28 @@
+select * from performance_schema.EVENTS_WAITS_CURRENT
+where event_name like 'Wait/Synch/%' limit 1;
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+# # # # # # # # NULL NULL NULL # NULL # NULL 0
+select * from performance_schema.EVENTS_WAITS_CURRENT
+where event_name='FOO';
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+insert into performance_schema.EVENTS_WAITS_CURRENT
+set thread_id='1', event_id=1,
+event_name='FOO', timer_start=1, timer_end=2, timer_wait=3;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+update performance_schema.EVENTS_WAITS_CURRENT
+set timer_start=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+update performance_schema.EVENTS_WAITS_CURRENT
+set timer_start=12 where thread_id=0;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+delete from performance_schema.EVENTS_WAITS_CURRENT
+where thread_id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+delete from performance_schema.EVENTS_WAITS_CURRENT;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+LOCK TABLES performance_schema.EVENTS_WAITS_CURRENT READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.EVENTS_WAITS_CURRENT WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_events_waits_history.result b/mysql-test/suite/perfschema/r/dml_events_waits_history.result
new file mode 100644
index 00000000000..953922868fb
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_events_waits_history.result
@@ -0,0 +1,36 @@
+select * from performance_schema.EVENTS_WAITS_HISTORY
+where event_name like 'Wait/Synch/%' limit 1;
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+# # # # # # # # NULL NULL NULL # NULL # NULL 0
+select * from performance_schema.EVENTS_WAITS_HISTORY
+where event_name='FOO';
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+select * from performance_schema.EVENTS_WAITS_HISTORY
+where event_name like 'Wait/Synch/%' order by timer_wait limit 1;
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+# # # # # # # # NULL NULL NULL # NULL # NULL 0
+select * from performance_schema.EVENTS_WAITS_HISTORY
+where event_name like 'Wait/Synch/%' order by timer_wait desc limit 1;
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+# # # # # # # # NULL NULL NULL # NULL # NULL 0
+insert into performance_schema.EVENTS_WAITS_HISTORY
+set thread_id='1', event_id=1,
+event_name='FOO', timer_start=1, timer_end=2, timer_wait=3;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY'
+update performance_schema.EVENTS_WAITS_HISTORY
+set timer_start=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY'
+update performance_schema.EVENTS_WAITS_HISTORY
+set timer_start=12 where thread_id=0;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY'
+delete from performance_schema.EVENTS_WAITS_HISTORY
+where thread_id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY'
+delete from performance_schema.EVENTS_WAITS_HISTORY;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY'
+LOCK TABLES performance_schema.EVENTS_WAITS_HISTORY READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.EVENTS_WAITS_HISTORY WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_events_waits_history_long.result b/mysql-test/suite/perfschema/r/dml_events_waits_history_long.result
new file mode 100644
index 00000000000..494469a0db8
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_events_waits_history_long.result
@@ -0,0 +1,36 @@
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG
+where event_name like 'Wait/Synch/%' limit 1;
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+# # # # # # # # NULL NULL NULL # NULL # NULL 0
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG
+where event_name='FOO';
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG
+where event_name like 'Wait/Synch/%' order by timer_wait limit 1;
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+# # # # # # # # NULL NULL NULL # NULL # NULL 0
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG
+where event_name like 'Wait/Synch/%' order by timer_wait desc limit 1;
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+# # # # # # # # NULL NULL NULL # NULL # NULL 0
+insert into performance_schema.EVENTS_WAITS_HISTORY_LONG
+set thread_id='1', event_id=1,
+event_name='FOO', timer_start=1, timer_end=2, timer_wait=3;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY_LONG'
+update performance_schema.EVENTS_WAITS_HISTORY_LONG
+set timer_start=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY_LONG'
+update performance_schema.EVENTS_WAITS_HISTORY_LONG
+set timer_start=12 where thread_id=0;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY_LONG'
+delete from performance_schema.EVENTS_WAITS_HISTORY_LONG
+where thread_id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY_LONG'
+delete from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY_LONG'
+LOCK TABLES performance_schema.EVENTS_WAITS_HISTORY_LONG READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY_LONG'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.EVENTS_WAITS_HISTORY_LONG WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_HISTORY_LONG'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_ews_by_event_name.result b/mysql-test/suite/perfschema/r/dml_ews_by_event_name.result
new file mode 100644
index 00000000000..675fba021fe
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_ews_by_event_name.result
@@ -0,0 +1,28 @@
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+where event_name like 'Wait/Synch/%' limit 1;
+EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
+# # # # # #
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+where event_name='FOO';
+EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
+insert into performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+set event_name='FOO', count_star=1, sum_timer_wait=2, min_timer_wait=3,
+avg_timer_wait=4, max_timer_wait=5;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+update performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+set count_star=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+update performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+set count_star=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+where count_star=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_ews_by_instance.result b/mysql-test/suite/perfschema/r/dml_ews_by_instance.result
new file mode 100644
index 00000000000..dc262982340
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_ews_by_instance.result
@@ -0,0 +1,45 @@
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+where event_name like 'Wait/Synch/%' limit 1;
+EVENT_NAME OBJECT_INSTANCE_BEGIN COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
+# # # # # # #
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+where event_name='FOO';
+EVENT_NAME OBJECT_INSTANCE_BEGIN COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+order by count_star limit 1;
+EVENT_NAME OBJECT_INSTANCE_BEGIN COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
+# # # # # # #
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+order by count_star desc limit 1;
+EVENT_NAME OBJECT_INSTANCE_BEGIN COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
+# # # # # # #
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+where min_timer_wait > 0 order by count_star limit 1;
+EVENT_NAME OBJECT_INSTANCE_BEGIN COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
+# # # # # # #
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+where min_timer_wait > 0 order by count_star desc limit 1;
+EVENT_NAME OBJECT_INSTANCE_BEGIN COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
+# # # # # # #
+insert into performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+set event_name='FOO', object_instance_begin=0,
+count_star=1, sum_timer_wait=2, min_timer_wait=3,
+avg_timer_wait=4, max_timer_wait=5;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+update performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+set count_star=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+update performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+set count_star=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+where count_star=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_ews_by_thread_by_event_name.result b/mysql-test/suite/perfschema/r/dml_ews_by_thread_by_event_name.result
new file mode 100644
index 00000000000..2a085659431
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_ews_by_thread_by_event_name.result
@@ -0,0 +1,29 @@
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+where event_name like 'Wait/Synch/%' limit 1;
+THREAD_ID EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
+# # # # # # #
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+where event_name='FOO';
+THREAD_ID EVENT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT
+insert into performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+set event_name='FOO', thread_id=1,
+count_star=1, sum_timer_wait=2, min_timer_wait=3,
+avg_timer_wait=4, max_timer_wait=5;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+update performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+set count_star=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+update performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+set count_star=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+where count_star=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_file_instances.result b/mysql-test/suite/perfschema/r/dml_file_instances.result
new file mode 100644
index 00000000000..e15d68cbad3
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_file_instances.result
@@ -0,0 +1,23 @@
+select * from performance_schema.FILE_INSTANCES limit 1;
+FILE_NAME EVENT_NAME OPEN_COUNT
+# # #
+select * from performance_schema.FILE_INSTANCES
+where file_name='FOO';
+FILE_NAME EVENT_NAME OPEN_COUNT
+insert into performance_schema.FILE_INSTANCES
+set file_name='FOO', event_name='BAR', open_count=12;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'FILE_INSTANCES'
+update performance_schema.FILE_INSTANCES
+set file_name='FOO';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'FILE_INSTANCES'
+delete from performance_schema.FILE_INSTANCES
+where event_name like "wait/%";
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'FILE_INSTANCES'
+delete from performance_schema.FILE_INSTANCES;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'FILE_INSTANCES'
+LOCK TABLES performance_schema.FILE_INSTANCES READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'FILE_INSTANCES'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.FILE_INSTANCES WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'FILE_INSTANCES'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_file_summary_by_event_name.result b/mysql-test/suite/perfschema/r/dml_file_summary_by_event_name.result
new file mode 100644
index 00000000000..1ecc82f40a5
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_file_summary_by_event_name.result
@@ -0,0 +1,28 @@
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME
+where event_name like 'Wait/io/%' limit 1;
+EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE
+# # # # #
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME
+where event_name='FOO';
+EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE
+insert into performance_schema.FILE_SUMMARY_BY_EVENT_NAME
+set event_name='FOO', count_read=1, count_write=2,
+sum_number_of_bytes_read=4, sum_number_of_bytes_write=5;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_EVENT_NAME'
+update performance_schema.FILE_SUMMARY_BY_EVENT_NAME
+set count_read=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_EVENT_NAME'
+update performance_schema.FILE_SUMMARY_BY_EVENT_NAME
+set count_write=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_EVENT_NAME'
+delete from performance_schema.FILE_SUMMARY_BY_EVENT_NAME
+where count_read=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_EVENT_NAME'
+delete from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_EVENT_NAME'
+LOCK TABLES performance_schema.FILE_SUMMARY_BY_EVENT_NAME READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_EVENT_NAME'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.FILE_SUMMARY_BY_EVENT_NAME WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_EVENT_NAME'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_file_summary_by_instance.result b/mysql-test/suite/perfschema/r/dml_file_summary_by_instance.result
new file mode 100644
index 00000000000..05b204cc1a9
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_file_summary_by_instance.result
@@ -0,0 +1,28 @@
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE
+where event_name like 'Wait/io/%' limit 1;
+FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE
+# # # # # #
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE
+where event_name='FOO';
+FILE_NAME EVENT_NAME COUNT_READ COUNT_WRITE SUM_NUMBER_OF_BYTES_READ SUM_NUMBER_OF_BYTES_WRITE
+insert into performance_schema.FILE_SUMMARY_BY_INSTANCE
+set event_name='FOO', count_read=1, count_write=2,
+sum_number_of_bytes_read=4, sum_number_of_bytes_write=5;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_INSTANCE'
+update performance_schema.FILE_SUMMARY_BY_INSTANCE
+set count_read=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_INSTANCE'
+update performance_schema.FILE_SUMMARY_BY_INSTANCE
+set count_write=12 where event_name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_INSTANCE'
+delete from performance_schema.FILE_SUMMARY_BY_INSTANCE
+where count_read=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_INSTANCE'
+delete from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_INSTANCE'
+LOCK TABLES performance_schema.FILE_SUMMARY_BY_INSTANCE READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_INSTANCE'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.FILE_SUMMARY_BY_INSTANCE WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'FILE_SUMMARY_BY_INSTANCE'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_mutex_instances.result b/mysql-test/suite/perfschema/r/dml_mutex_instances.result
new file mode 100644
index 00000000000..655ca811c06
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_mutex_instances.result
@@ -0,0 +1,23 @@
+select * from performance_schema.MUTEX_INSTANCES limit 1;
+NAME OBJECT_INSTANCE_BEGIN LOCKED_BY_THREAD_ID
+# # NULL
+select * from performance_schema.MUTEX_INSTANCES
+where name='FOO';
+NAME OBJECT_INSTANCE_BEGIN LOCKED_BY_THREAD_ID
+insert into performance_schema.MUTEX_INSTANCES
+set name='FOO', object_instance_begin=12;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'MUTEX_INSTANCES'
+update performance_schema.MUTEX_INSTANCES
+set name='FOO';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'MUTEX_INSTANCES'
+delete from performance_schema.MUTEX_INSTANCES
+where name like "wait/%";
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'MUTEX_INSTANCES'
+delete from performance_schema.MUTEX_INSTANCES;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'MUTEX_INSTANCES'
+LOCK TABLES performance_schema.MUTEX_INSTANCES READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'MUTEX_INSTANCES'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.MUTEX_INSTANCES WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'MUTEX_INSTANCES'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_performance_timers.result b/mysql-test/suite/perfschema/r/dml_performance_timers.result
new file mode 100644
index 00000000000..99c1c74b797
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_performance_timers.result
@@ -0,0 +1,29 @@
+select * from performance_schema.PERFORMANCE_TIMERS;
+TIMER_NAME TIMER_FREQUENCY TIMER_RESOLUTION TIMER_OVERHEAD
+CYCLE <frequency> <resolution> <overhead>
+NANOSECOND <frequency> <resolution> <overhead>
+MICROSECOND <frequency> <resolution> <overhead>
+MILLISECOND <frequency> <resolution> <overhead>
+TICK <frequency> <resolution> <overhead>
+select * from performance_schema.PERFORMANCE_TIMERS
+where timer_name='CYCLE';
+TIMER_NAME TIMER_FREQUENCY TIMER_RESOLUTION TIMER_OVERHEAD
+CYCLE <frequency> <resolution> <overhead>
+insert into performance_schema.PERFORMANCE_TIMERS
+set timer_name='FOO', timer_frequency=1,
+timer_resolution=2, timer_overhead=3;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'PERFORMANCE_TIMERS'
+update performance_schema.PERFORMANCE_TIMERS
+set timer_frequency=12 where timer_name='CYCLE';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'PERFORMANCE_TIMERS'
+delete from performance_schema.PERFORMANCE_TIMERS;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'PERFORMANCE_TIMERS'
+delete from performance_schema.PERFORMANCE_TIMERS
+where timer_name='CYCLE';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'PERFORMANCE_TIMERS'
+LOCK TABLES performance_schema.PERFORMANCE_TIMERS READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'PERFORMANCE_TIMERS'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.PERFORMANCE_TIMERS WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'PERFORMANCE_TIMERS'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_processlist.result b/mysql-test/suite/perfschema/r/dml_processlist.result
new file mode 100644
index 00000000000..ee0da5a7f1d
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_processlist.result
@@ -0,0 +1,27 @@
+select * from performance_schema.PROCESSLIST
+where name like 'Thread/%' limit 1;
+THREAD_ID ID NAME
+# # #
+select * from performance_schema.PROCESSLIST
+where name='FOO';
+THREAD_ID ID NAME
+insert into performance_schema.PROCESSLIST
+set name='FOO', thread_id=1, id=2;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'PROCESSLIST'
+update performance_schema.PROCESSLIST
+set thread_id=12;
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'PROCESSLIST'
+update performance_schema.PROCESSLIST
+set thread_id=12 where name like "FOO";
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'PROCESSLIST'
+delete from performance_schema.PROCESSLIST
+where id=1;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'PROCESSLIST'
+delete from performance_schema.PROCESSLIST;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'PROCESSLIST'
+LOCK TABLES performance_schema.PROCESSLIST READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'PROCESSLIST'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.PROCESSLIST WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'PROCESSLIST'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_rwlock_instances.result b/mysql-test/suite/perfschema/r/dml_rwlock_instances.result
new file mode 100644
index 00000000000..62b5fbeaa8a
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_rwlock_instances.result
@@ -0,0 +1,23 @@
+select * from performance_schema.RWLOCK_INSTANCES limit 1;
+NAME OBJECT_INSTANCE_BEGIN WRITE_LOCKED_BY_THREAD_ID READ_LOCKED_BY_COUNT
+# # NULL 0
+select * from performance_schema.RWLOCK_INSTANCES
+where name='FOO';
+NAME OBJECT_INSTANCE_BEGIN WRITE_LOCKED_BY_THREAD_ID READ_LOCKED_BY_COUNT
+insert into performance_schema.RWLOCK_INSTANCES
+set name='FOO', object_instance_begin=12;
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'RWLOCK_INSTANCES'
+update performance_schema.RWLOCK_INSTANCES
+set name='FOO';
+ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'RWLOCK_INSTANCES'
+delete from performance_schema.RWLOCK_INSTANCES
+where name like "wait/%";
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'RWLOCK_INSTANCES'
+delete from performance_schema.RWLOCK_INSTANCES;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'RWLOCK_INSTANCES'
+LOCK TABLES performance_schema.RWLOCK_INSTANCES READ;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'RWLOCK_INSTANCES'
+UNLOCK TABLES;
+LOCK TABLES performance_schema.RWLOCK_INSTANCES WRITE;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'RWLOCK_INSTANCES'
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_setup_consumers.result b/mysql-test/suite/perfschema/r/dml_setup_consumers.result
new file mode 100644
index 00000000000..44ed751dcd2
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_setup_consumers.result
@@ -0,0 +1,45 @@
+select * from performance_schema.SETUP_CONSUMERS;
+NAME ENABLED
+events_waits_current YES
+events_waits_history YES
+events_waits_history_long YES
+events_waits_summary_by_thread_by_event_name YES
+events_waits_summary_by_event_name YES
+events_waits_summary_by_instance YES
+file_summary_by_event_name YES
+file_summary_by_instance YES
+select * from performance_schema.SETUP_CONSUMERS
+where name='events_waits_current';
+NAME ENABLED
+events_waits_current YES
+select * from performance_schema.SETUP_CONSUMERS
+where enabled='YES';
+NAME ENABLED
+events_waits_current YES
+events_waits_history YES
+events_waits_history_long YES
+events_waits_summary_by_thread_by_event_name YES
+events_waits_summary_by_event_name YES
+events_waits_summary_by_instance YES
+file_summary_by_event_name YES
+file_summary_by_instance YES
+select * from performance_schema.SETUP_CONSUMERS
+where enabled='NO';
+NAME ENABLED
+insert into performance_schema.SETUP_CONSUMERS
+set name='FOO', enabled='YES';
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'SETUP_CONSUMERS'
+update performance_schema.SETUP_CONSUMERS
+set name='FOO';
+ERROR HY000: Invalid performance_schema usage.
+update performance_schema.SETUP_CONSUMERS
+set enabled='YES';
+delete from performance_schema.SETUP_CONSUMERS;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'SETUP_CONSUMERS'
+delete from performance_schema.SETUP_CONSUMERS
+where name='events_waits_current';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'SETUP_CONSUMERS'
+LOCK TABLES performance_schema.SETUP_CONSUMERS READ;
+UNLOCK TABLES;
+LOCK TABLES performance_schema.SETUP_CONSUMERS WRITE;
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_setup_instruments.result b/mysql-test/suite/perfschema/r/dml_setup_instruments.result
new file mode 100644
index 00000000000..3a457578b3d
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_setup_instruments.result
@@ -0,0 +1,72 @@
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_INSTRUMENTS
+where name like 'Wait/Synch/Mutex/sql/%'
+ and name not in ('wait/synch/mutex/sql/DEBUG_SYNC::mutex')
+order by name limit 10;
+NAME ENABLED TIMED
+wait/synch/mutex/sql/Cversion_lock YES YES
+wait/synch/mutex/sql/Delayed_insert::mutex YES YES
+wait/synch/mutex/sql/Event_scheduler::LOCK_scheduler_state YES YES
+wait/synch/mutex/sql/hash_filo::lock YES YES
+wait/synch/mutex/sql/LOCK_active_mi YES YES
+wait/synch/mutex/sql/LOCK_connection_count YES YES
+wait/synch/mutex/sql/LOCK_crypt YES YES
+wait/synch/mutex/sql/LOCK_delayed_create YES YES
+wait/synch/mutex/sql/LOCK_delayed_insert YES YES
+wait/synch/mutex/sql/LOCK_delayed_status YES YES
+select * from performance_schema.SETUP_INSTRUMENTS
+where name like 'Wait/Synch/Rwlock/sql/%'
+ order by name limit 10;
+NAME ENABLED TIMED
+wait/synch/rwlock/sql/LOCK_dboptions YES YES
+wait/synch/rwlock/sql/LOCK_grant YES YES
+wait/synch/rwlock/sql/LOCK_system_variables_hash YES YES
+wait/synch/rwlock/sql/LOCK_sys_init_connect YES YES
+wait/synch/rwlock/sql/LOCK_sys_init_slave YES YES
+wait/synch/rwlock/sql/LOGGER::LOCK_logger YES YES
+wait/synch/rwlock/sql/Query_cache_query::lock YES YES
+wait/synch/rwlock/sql/THR_LOCK_servers YES YES
+wait/synch/rwlock/sql/THR_LOCK_udf YES YES
+select * from performance_schema.SETUP_INSTRUMENTS
+where name like 'Wait/Synch/Cond/sql/%'
+ and name not in (
+'wait/synch/cond/sql/COND_handler_count',
+'wait/synch/cond/sql/DEBUG_SYNC::cond')
+order by name limit 10;
+NAME ENABLED TIMED
+wait/synch/cond/sql/COND_flush_thread_cache YES YES
+wait/synch/cond/sql/COND_global_read_lock YES YES
+wait/synch/cond/sql/COND_manager YES YES
+wait/synch/cond/sql/COND_queue_state YES YES
+wait/synch/cond/sql/COND_refresh YES YES
+wait/synch/cond/sql/COND_rpl_status YES YES
+wait/synch/cond/sql/COND_server_started YES YES
+wait/synch/cond/sql/COND_thread_cache YES YES
+wait/synch/cond/sql/COND_thread_count YES YES
+wait/synch/cond/sql/Delayed_insert::cond YES YES
+select * from performance_schema.SETUP_INSTRUMENTS
+where name='Wait';
+select * from performance_schema.SETUP_INSTRUMENTS
+where enabled='YES';
+insert into performance_schema.SETUP_INSTRUMENTS
+set name='FOO', enabled='YES', timed='YES';
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'SETUP_INSTRUMENTS'
+update performance_schema.SETUP_INSTRUMENTS
+set name='FOO';
+ERROR HY000: Invalid performance_schema usage.
+update performance_schema.SETUP_INSTRUMENTS
+set enabled='NO';
+update performance_schema.SETUP_INSTRUMENTS
+set timed='NO';
+select * from performance_schema.SETUP_INSTRUMENTS;
+update performance_schema.SETUP_INSTRUMENTS
+set enabled='YES', timed='YES';
+delete from performance_schema.SETUP_INSTRUMENTS;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'SETUP_INSTRUMENTS'
+delete from performance_schema.SETUP_INSTRUMENTS
+where name like 'Wait/Synch/%';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'SETUP_INSTRUMENTS'
+LOCK TABLES performance_schema.SETUP_INSTRUMENTS READ;
+UNLOCK TABLES;
+LOCK TABLES performance_schema.SETUP_INSTRUMENTS WRITE;
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_setup_objects.result b/mysql-test/suite/perfschema/r/dml_setup_objects.result
new file mode 100644
index 00000000000..a9d97357227
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_setup_objects.result
@@ -0,0 +1,35 @@
+select * from performance_schema.SETUP_OBJECTS;
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED AGGREGATED
+select * from performance_schema.SETUP_OBJECTS
+where object_type = 'TABLE';
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED AGGREGATED
+select * from performance_schema.SETUP_OBJECTS
+where enabled='YES';
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED AGGREGATED
+insert into performance_schema.SETUP_OBJECTS
+set object_type='TABLE', object_schema='FOO', object_name='BAR',
+enabled='YES', timed='YES', aggregated='YES';
+ERROR HY000: Table storage engine for 'SETUP_OBJECTS' doesn't have this option
+update performance_schema.SETUP_OBJECTS
+set object_type='TABLE';
+update performance_schema.SETUP_OBJECTS
+set object_schema='ILLEGAL';
+update performance_schema.SETUP_OBJECTS
+set object_name='ILLEGAL';
+update performance_schema.SETUP_OBJECTS
+set enabled='NO';
+update performance_schema.SETUP_OBJECTS
+set timed='NO';
+update performance_schema.SETUP_OBJECTS
+set aggregated='NO';
+select * from performance_schema.SETUP_OBJECTS;
+OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME ENABLED TIMED AGGREGATED
+update performance_schema.SETUP_OBJECTS
+set enabled='YES', timed='YES', aggregated='YES';
+delete from performance_schema.SETUP_OBJECTS
+where object_type = 'TABLE';
+delete from performance_schema.SETUP_OBJECTS;
+LOCK TABLES performance_schema.SETUP_OBJECTS READ;
+UNLOCK TABLES;
+LOCK TABLES performance_schema.SETUP_OBJECTS WRITE;
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/dml_setup_timers.result b/mysql-test/suite/perfschema/r/dml_setup_timers.result
new file mode 100644
index 00000000000..a9bee916cde
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/dml_setup_timers.result
@@ -0,0 +1,33 @@
+select * from performance_schema.SETUP_TIMERS;
+NAME TIMER_NAME
+wait CYCLE
+select * from performance_schema.SETUP_TIMERS
+where name='Wait';
+NAME TIMER_NAME
+wait CYCLE
+select * from performance_schema.SETUP_TIMERS
+where timer_name='CYCLE';
+NAME TIMER_NAME
+wait CYCLE
+insert into performance_schema.SETUP_TIMERS
+set name='FOO', timer_name='CYCLE';
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'SETUP_TIMERS'
+update performance_schema.SETUP_TIMERS
+set name='FOO';
+ERROR HY000: Invalid performance_schema usage.
+update performance_schema.SETUP_TIMERS
+set timer_name='MILLISECOND';
+select * from performance_schema.SETUP_TIMERS;
+NAME TIMER_NAME
+wait MILLISECOND
+update performance_schema.SETUP_TIMERS
+set timer_name='CYCLE';
+delete from performance_schema.SETUP_TIMERS;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'SETUP_TIMERS'
+delete from performance_schema.SETUP_TIMERS
+where name='Wait';
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'SETUP_TIMERS'
+LOCK TABLES performance_schema.SETUP_TIMERS READ;
+UNLOCK TABLES;
+LOCK TABLES performance_schema.SETUP_TIMERS WRITE;
+UNLOCK TABLES;
diff --git a/mysql-test/suite/perfschema/r/func_file_io.result b/mysql-test/suite/perfschema/r/func_file_io.result
new file mode 100644
index 00000000000..69e6072fc22
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/func_file_io.result
@@ -0,0 +1,117 @@
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO', timed = 'YES';
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES'
+WHERE name LIKE 'wait/io/file/%';
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (id INT PRIMARY KEY, b CHAR(100) DEFAULT 'initial value')
+ENGINE=MyISAM;
+INSERT INTO t1 (id) VALUES (1), (2), (3), (4), (5), (6), (7), (8);
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+SELECT * FROM t1 WHERE id = 1;
+id b
+1 initial value
+SET @before_count = (SELECT SUM(TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE (EVENT_NAME = 'wait/io/file/myisam/dfile')
+AND (OBJECT_NAME LIKE '%t1.MYD'));
+SELECT IF(@before_count > 0, 'Success', 'Failure') has_instrumentation;
+has_instrumentation
+Success
+SELECT * FROM t1 WHERE id < 4;
+id b
+1 initial value
+2 initial value
+3 initial value
+SET @after_count = (SELECT SUM(TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE (EVENT_NAME = 'wait/io/file/myisam/dfile')
+AND (OBJECT_NAME LIKE '%t1.MYD') AND (1 = 1));
+SELECT IF((@after_count - @before_count) > 0, 'Success', 'Failure') test_ff1_timed;
+test_ff1_timed
+Success
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled='NO';
+SET @before_count = (SELECT SUM(TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE (EVENT_NAME = 'wait/io/file/myisam/dfile')
+AND (OBJECT_NAME LIKE '%t1.MYD') AND (2 = 2));
+SELECT * FROM t1 WHERE id < 6;
+id b
+1 initial value
+2 initial value
+3 initial value
+4 initial value
+5 initial value
+SET @after_count = (SELECT SUM(TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE (EVENT_NAME = 'wait/io/file/myisam/dfile')
+AND (OBJECT_NAME LIKE '%t1.MYD') AND (3 = 3));
+SELECT IF((COALESCE(@after_count, 0) - COALESCE(@before_count, 0)) = 0, 'Success', 'Failure') test_ff2_timed;
+test_ff2_timed
+Success
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES'
+WHERE name LIKE 'wait/io/file/%';
+UPDATE performance_schema.SETUP_INSTRUMENTS SET timed = 'NO';
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+SELECT * FROM t1 WHERE id > 4;
+id b
+5 initial value
+6 initial value
+7 initial value
+8 initial value
+SELECT * FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE TIMER_WAIT != NULL
+OR TIMER_START != NULL
+OR TIMER_END != NULL;
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+SELECT * FROM performance_schema.EVENTS_WAITS_HISTORY
+WHERE TIMER_WAIT != NULL
+OR TIMER_START != NULL
+OR TIMER_END != NULL;
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+SELECT * FROM performance_schema.EVENTS_WAITS_CURRENT
+WHERE TIMER_WAIT != NULL
+OR TIMER_START != NULL
+OR TIMER_END != NULL;
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+UPDATE performance_schema.SETUP_INSTRUMENTS SET timed = 'YES';
+SELECT * FROM t1 WHERE id < 4;
+id b
+1 initial value
+2 initial value
+3 initial value
+DROP TABLE t1;
+SELECT SUM(COUNT_READ) AS sum_count_read,
+SUM(COUNT_WRITE) AS sum_count_write,
+SUM(SUM_NUMBER_OF_BYTES_READ) AS sum_num_bytes_read,
+SUM(SUM_NUMBER_OF_BYTES_WRITE) AS sum_num_bytes_write
+FROM performance_schema.FILE_SUMMARY_BY_INSTANCE
+WHERE FILE_NAME LIKE CONCAT('%', @@tmpdir, '%') ORDER BY NULL;
+SELECT EVENT_NAME, COUNT_STAR, AVG_TIMER_WAIT, SUM_TIMER_WAIT
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+WHERE COUNT_STAR > 0
+ORDER BY SUM_TIMER_WAIT DESC
+LIMIT 10;
+SELECT i.user, SUM(TIMER_WAIT) SUM_WAIT
+# ((TIME_TO_SEC(TIMEDIFF(NOW(), i.startup_time)) * 1000) / SUM(TIMER_WAIT)) * 100 WAIT_PERCENTAGE
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
+INNER JOIN performance_schema.PROCESSLIST p USING (THREAD_ID)
+LEFT JOIN information_schema.PROCESSLIST i USING (ID)
+GROUP BY i.user
+ORDER BY SUM_WAIT DESC
+LIMIT 20;
+SELECT h.EVENT_NAME, SUM(h.TIMER_WAIT) TOTAL_WAIT
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
+INNER JOIN performance_schema.PROCESSLIST p USING (THREAD_ID)
+WHERE p.ID = 1
+GROUP BY h.EVENT_NAME
+HAVING TOTAL_WAIT > 0;
+SELECT i.user, h.operation, SUM(NUMBER_OF_BYTES) bytes
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
+INNER JOIN performance_schema.PROCESSLIST p USING (THREAD_ID)
+LEFT JOIN information_schema.PROCESSLIST i USING (ID)
+GROUP BY i.user, h.operation
+HAVING BYTES > 0
+ORDER BY i.user, h.operation;
diff --git a/mysql-test/suite/perfschema/r/func_mutex.result b/mysql-test/suite/perfschema/r/func_mutex.result
new file mode 100644
index 00000000000..e32d7267bb1
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/func_mutex.result
@@ -0,0 +1,113 @@
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO', timed = 'YES';
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES'
+WHERE name LIKE 'wait/synch/mutex/%'
+ OR name LIKE 'wait/synch/rwlock/%';
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (id INT PRIMARY KEY, b CHAR(100) DEFAULT 'initial value')
+ENGINE=MyISAM;
+INSERT INTO t1 (id) VALUES (1), (2), (3), (4), (5), (6), (7), (8);
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+SELECT * FROM t1 WHERE id = 1;
+id b
+1 initial value
+SET @before_count = (SELECT SUM(TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE (EVENT_NAME = 'wait/synch/mutex/sql/LOCK_open'));
+SELECT * FROM t1;
+id b
+1 initial value
+2 initial value
+3 initial value
+4 initial value
+5 initial value
+6 initial value
+7 initial value
+8 initial value
+SET @after_count = (SELECT SUM(TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE (EVENT_NAME = 'wait/synch/mutex/sql/LOCK_open'));
+SELECT IF((@after_count - @before_count) > 0, 'Success', 'Failure') test_fm1_timed;
+test_fm1_timed
+Success
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO'
+WHERE NAME = 'wait/synch/mutex/sql/LOCK_open';
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+SELECT * FROM t1 WHERE id = 1;
+id b
+1 initial value
+SET @before_count = (SELECT SUM(TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE (EVENT_NAME = 'wait/synch/mutex/sql/LOCK_open'));
+SELECT * FROM t1;
+id b
+1 initial value
+2 initial value
+3 initial value
+4 initial value
+5 initial value
+6 initial value
+7 initial value
+8 initial value
+SET @after_count = (SELECT SUM(TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE (EVENT_NAME = 'wait/synch/mutex/sql/LOCK_open'));
+SELECT IF((COALESCE(@after_count, 0) - COALESCE(@before_count, 0)) = 0, 'Success', 'Failure') test_fm2_timed;
+test_fm2_timed
+Success
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+SELECT * FROM t1 WHERE id = 1;
+id b
+1 initial value
+SET @before_count = (SELECT SUM(TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE (EVENT_NAME = 'wait/synch/rwlock/sql/LOCK_grant'));
+SELECT * FROM t1;
+id b
+1 initial value
+2 initial value
+3 initial value
+4 initial value
+5 initial value
+6 initial value
+7 initial value
+8 initial value
+SET @after_count = (SELECT SUM(TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE (EVENT_NAME = 'wait/synch/rwlock/sql/LOCK_grant'));
+SELECT IF((@after_count - @before_count) > 0, 'Success', 'Failure') test_fm1_rw_timed;
+test_fm1_rw_timed
+Success
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO'
+WHERE NAME = 'wait/synch/rwlock/sql/LOCK_grant';
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+SELECT * FROM t1 WHERE id = 1;
+id b
+1 initial value
+SET @before_count = (SELECT SUM(TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE (EVENT_NAME = 'wait/synch/rwlock/sql/LOCK_grant'));
+SELECT * FROM t1;
+id b
+1 initial value
+2 initial value
+3 initial value
+4 initial value
+5 initial value
+6 initial value
+7 initial value
+8 initial value
+SET @after_count = (SELECT SUM(TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE (EVENT_NAME = 'wait/synch/rwlock/sql/LOCK_grant'));
+SELECT IF((COALESCE(@after_count, 0) - COALESCE(@before_count, 0)) = 0, 'Success', 'Failure') test_fm2_rw_timed;
+test_fm2_rw_timed
+Success
+DROP TABLE t1;
diff --git a/mysql-test/suite/perfschema/r/global_read_lock.result b/mysql-test/suite/perfschema/r/global_read_lock.result
new file mode 100644
index 00000000000..93d6adfd049
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/global_read_lock.result
@@ -0,0 +1,33 @@
+use performance_schema;
+grant SELECT, UPDATE, LOCK TABLES on performance_schema.* to pfsuser@localhost;
+flush privileges;
+connect (con1, localhost, pfsuser, , test);
+lock tables performance_schema.SETUP_INSTRUMENTS read;
+select * from performance_schema.SETUP_INSTRUMENTS;
+unlock tables;
+lock tables performance_schema.SETUP_INSTRUMENTS write;
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO';
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+unlock tables;
+connection default;
+flush tables with read lock;
+connection con1;
+lock tables performance_schema.SETUP_INSTRUMENTS read;
+select * from performance_schema.SETUP_INSTRUMENTS;
+unlock tables;
+lock tables performance_schema.SETUP_INSTRUMENTS write;
+connection default;
+select event_name,
+left(source, locate(":", source)) as short_source,
+timer_end, timer_wait, operation
+from performance_schema.EVENTS_WAITS_CURRENT
+where event_name like "wait/synch/cond/sql/COND_global_read_lock";
+event_name short_source timer_end timer_wait operation
+wait/synch/cond/sql/COND_global_read_lock lock.cc: NULL NULL wait
+unlock tables;
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO';
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+unlock tables;
+connection default;
+drop user pfsuser@localhost;
+flush privileges;
diff --git a/mysql-test/suite/perfschema/r/information_schema.result b/mysql-test/suite/perfschema/r/information_schema.result
new file mode 100644
index 00000000000..86ebe80768c
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/information_schema.result
@@ -0,0 +1,198 @@
+select TABLE_SCHEMA, upper(TABLE_NAME), TABLE_CATALOG
+from information_schema.tables
+where TABLE_SCHEMA='performance_schema';
+TABLE_SCHEMA upper(TABLE_NAME) TABLE_CATALOG
+performance_schema COND_INSTANCES def
+performance_schema EVENTS_WAITS_CURRENT def
+performance_schema EVENTS_WAITS_HISTORY def
+performance_schema EVENTS_WAITS_HISTORY_LONG def
+performance_schema EVENTS_WAITS_SUMMARY_BY_EVENT_NAME def
+performance_schema EVENTS_WAITS_SUMMARY_BY_INSTANCE def
+performance_schema EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME def
+performance_schema FILE_INSTANCES def
+performance_schema FILE_SUMMARY_BY_EVENT_NAME def
+performance_schema FILE_SUMMARY_BY_INSTANCE def
+performance_schema MUTEX_INSTANCES def
+performance_schema PERFORMANCE_TIMERS def
+performance_schema PROCESSLIST def
+performance_schema RWLOCK_INSTANCES def
+performance_schema SETUP_CONSUMERS def
+performance_schema SETUP_INSTRUMENTS def
+performance_schema SETUP_OBJECTS def
+performance_schema SETUP_TIMERS def
+select upper(TABLE_NAME), TABLE_TYPE, ENGINE
+from information_schema.tables
+where TABLE_SCHEMA='performance_schema';
+upper(TABLE_NAME) TABLE_TYPE ENGINE
+COND_INSTANCES BASE TABLE PERFORMANCE_SCHEMA
+EVENTS_WAITS_CURRENT BASE TABLE PERFORMANCE_SCHEMA
+EVENTS_WAITS_HISTORY BASE TABLE PERFORMANCE_SCHEMA
+EVENTS_WAITS_HISTORY_LONG BASE TABLE PERFORMANCE_SCHEMA
+EVENTS_WAITS_SUMMARY_BY_EVENT_NAME BASE TABLE PERFORMANCE_SCHEMA
+EVENTS_WAITS_SUMMARY_BY_INSTANCE BASE TABLE PERFORMANCE_SCHEMA
+EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME BASE TABLE PERFORMANCE_SCHEMA
+FILE_INSTANCES BASE TABLE PERFORMANCE_SCHEMA
+FILE_SUMMARY_BY_EVENT_NAME BASE TABLE PERFORMANCE_SCHEMA
+FILE_SUMMARY_BY_INSTANCE BASE TABLE PERFORMANCE_SCHEMA
+MUTEX_INSTANCES BASE TABLE PERFORMANCE_SCHEMA
+PERFORMANCE_TIMERS BASE TABLE PERFORMANCE_SCHEMA
+PROCESSLIST BASE TABLE PERFORMANCE_SCHEMA
+RWLOCK_INSTANCES BASE TABLE PERFORMANCE_SCHEMA
+SETUP_CONSUMERS BASE TABLE PERFORMANCE_SCHEMA
+SETUP_INSTRUMENTS BASE TABLE PERFORMANCE_SCHEMA
+SETUP_OBJECTS BASE TABLE PERFORMANCE_SCHEMA
+SETUP_TIMERS BASE TABLE PERFORMANCE_SCHEMA
+select upper(TABLE_NAME), VERSION, ROW_FORMAT
+from information_schema.tables
+where TABLE_SCHEMA='performance_schema';
+upper(TABLE_NAME) VERSION ROW_FORMAT
+COND_INSTANCES 10 Dynamic
+EVENTS_WAITS_CURRENT 10 Dynamic
+EVENTS_WAITS_HISTORY 10 Dynamic
+EVENTS_WAITS_HISTORY_LONG 10 Dynamic
+EVENTS_WAITS_SUMMARY_BY_EVENT_NAME 10 Dynamic
+EVENTS_WAITS_SUMMARY_BY_INSTANCE 10 Dynamic
+EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME 10 Dynamic
+FILE_INSTANCES 10 Dynamic
+FILE_SUMMARY_BY_EVENT_NAME 10 Dynamic
+FILE_SUMMARY_BY_INSTANCE 10 Dynamic
+MUTEX_INSTANCES 10 Dynamic
+PERFORMANCE_TIMERS 10 Fixed
+PROCESSLIST 10 Dynamic
+RWLOCK_INSTANCES 10 Dynamic
+SETUP_CONSUMERS 10 Dynamic
+SETUP_INSTRUMENTS 10 Dynamic
+SETUP_OBJECTS 10 Dynamic
+SETUP_TIMERS 10 Dynamic
+select upper(TABLE_NAME), TABLE_ROWS, AVG_ROW_LENGTH
+from information_schema.tables
+where TABLE_SCHEMA='performance_schema';
+upper(TABLE_NAME) TABLE_ROWS AVG_ROW_LENGTH
+COND_INSTANCES 1000 0
+EVENTS_WAITS_CURRENT 1000 0
+EVENTS_WAITS_HISTORY 1000 0
+EVENTS_WAITS_HISTORY_LONG 10000 0
+EVENTS_WAITS_SUMMARY_BY_EVENT_NAME 1000 0
+EVENTS_WAITS_SUMMARY_BY_INSTANCE 1000 0
+EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME 1000 0
+FILE_INSTANCES 1000 0
+FILE_SUMMARY_BY_EVENT_NAME 1000 0
+FILE_SUMMARY_BY_INSTANCE 1000 0
+MUTEX_INSTANCES 1000 0
+PERFORMANCE_TIMERS 5 0
+PROCESSLIST 1000 0
+RWLOCK_INSTANCES 1000 0
+SETUP_CONSUMERS 8 0
+SETUP_INSTRUMENTS 1000 0
+SETUP_OBJECTS 1000 0
+SETUP_TIMERS 1 0
+select upper(TABLE_NAME), DATA_LENGTH, MAX_DATA_LENGTH
+from information_schema.tables
+where TABLE_SCHEMA='performance_schema';
+upper(TABLE_NAME) DATA_LENGTH MAX_DATA_LENGTH
+COND_INSTANCES 0 0
+EVENTS_WAITS_CURRENT 0 0
+EVENTS_WAITS_HISTORY 0 0
+EVENTS_WAITS_HISTORY_LONG 0 0
+EVENTS_WAITS_SUMMARY_BY_EVENT_NAME 0 0
+EVENTS_WAITS_SUMMARY_BY_INSTANCE 0 0
+EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME 0 0
+FILE_INSTANCES 0 0
+FILE_SUMMARY_BY_EVENT_NAME 0 0
+FILE_SUMMARY_BY_INSTANCE 0 0
+MUTEX_INSTANCES 0 0
+PERFORMANCE_TIMERS 0 0
+PROCESSLIST 0 0
+RWLOCK_INSTANCES 0 0
+SETUP_CONSUMERS 0 0
+SETUP_INSTRUMENTS 0 0
+SETUP_OBJECTS 0 0
+SETUP_TIMERS 0 0
+select upper(TABLE_NAME), INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT
+from information_schema.tables
+where TABLE_SCHEMA='performance_schema';
+upper(TABLE_NAME) INDEX_LENGTH DATA_FREE AUTO_INCREMENT
+COND_INSTANCES 0 0 NULL
+EVENTS_WAITS_CURRENT 0 0 NULL
+EVENTS_WAITS_HISTORY 0 0 NULL
+EVENTS_WAITS_HISTORY_LONG 0 0 NULL
+EVENTS_WAITS_SUMMARY_BY_EVENT_NAME 0 0 NULL
+EVENTS_WAITS_SUMMARY_BY_INSTANCE 0 0 NULL
+EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME 0 0 NULL
+FILE_INSTANCES 0 0 NULL
+FILE_SUMMARY_BY_EVENT_NAME 0 0 NULL
+FILE_SUMMARY_BY_INSTANCE 0 0 NULL
+MUTEX_INSTANCES 0 0 NULL
+PERFORMANCE_TIMERS 0 0 NULL
+PROCESSLIST 0 0 NULL
+RWLOCK_INSTANCES 0 0 NULL
+SETUP_CONSUMERS 0 0 NULL
+SETUP_INSTRUMENTS 0 0 NULL
+SETUP_OBJECTS 0 0 NULL
+SETUP_TIMERS 0 0 NULL
+select upper(TABLE_NAME), CREATE_TIME, UPDATE_TIME, CHECK_TIME
+from information_schema.tables
+where TABLE_SCHEMA='performance_schema';
+upper(TABLE_NAME) CREATE_TIME UPDATE_TIME CHECK_TIME
+COND_INSTANCES NULL NULL NULL
+EVENTS_WAITS_CURRENT NULL NULL NULL
+EVENTS_WAITS_HISTORY NULL NULL NULL
+EVENTS_WAITS_HISTORY_LONG NULL NULL NULL
+EVENTS_WAITS_SUMMARY_BY_EVENT_NAME NULL NULL NULL
+EVENTS_WAITS_SUMMARY_BY_INSTANCE NULL NULL NULL
+EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME NULL NULL NULL
+FILE_INSTANCES NULL NULL NULL
+FILE_SUMMARY_BY_EVENT_NAME NULL NULL NULL
+FILE_SUMMARY_BY_INSTANCE NULL NULL NULL
+MUTEX_INSTANCES NULL NULL NULL
+PERFORMANCE_TIMERS NULL NULL NULL
+PROCESSLIST NULL NULL NULL
+RWLOCK_INSTANCES NULL NULL NULL
+SETUP_CONSUMERS NULL NULL NULL
+SETUP_INSTRUMENTS NULL NULL NULL
+SETUP_OBJECTS NULL NULL NULL
+SETUP_TIMERS NULL NULL NULL
+select upper(TABLE_NAME), TABLE_COLLATION, CHECKSUM
+from information_schema.tables
+where TABLE_SCHEMA='performance_schema';
+upper(TABLE_NAME) TABLE_COLLATION CHECKSUM
+COND_INSTANCES utf8_general_ci NULL
+EVENTS_WAITS_CURRENT utf8_general_ci NULL
+EVENTS_WAITS_HISTORY utf8_general_ci NULL
+EVENTS_WAITS_HISTORY_LONG utf8_general_ci NULL
+EVENTS_WAITS_SUMMARY_BY_EVENT_NAME utf8_general_ci NULL
+EVENTS_WAITS_SUMMARY_BY_INSTANCE utf8_general_ci NULL
+EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME utf8_general_ci NULL
+FILE_INSTANCES utf8_general_ci NULL
+FILE_SUMMARY_BY_EVENT_NAME utf8_general_ci NULL
+FILE_SUMMARY_BY_INSTANCE utf8_general_ci NULL
+MUTEX_INSTANCES utf8_general_ci NULL
+PERFORMANCE_TIMERS utf8_general_ci NULL
+PROCESSLIST utf8_general_ci NULL
+RWLOCK_INSTANCES utf8_general_ci NULL
+SETUP_CONSUMERS utf8_general_ci NULL
+SETUP_INSTRUMENTS utf8_general_ci NULL
+SETUP_OBJECTS utf8_general_ci NULL
+SETUP_TIMERS utf8_general_ci NULL
+select upper(TABLE_NAME), TABLE_COMMENT
+from information_schema.tables
+where TABLE_SCHEMA='performance_schema';
+upper(TABLE_NAME) TABLE_COMMENT
+COND_INSTANCES
+EVENTS_WAITS_CURRENT
+EVENTS_WAITS_HISTORY
+EVENTS_WAITS_HISTORY_LONG
+EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+EVENTS_WAITS_SUMMARY_BY_INSTANCE
+EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+FILE_INSTANCES
+FILE_SUMMARY_BY_EVENT_NAME
+FILE_SUMMARY_BY_INSTANCE
+MUTEX_INSTANCES
+PERFORMANCE_TIMERS
+PROCESSLIST
+RWLOCK_INSTANCES
+SETUP_CONSUMERS
+SETUP_INSTRUMENTS
+SETUP_OBJECTS
+SETUP_TIMERS
diff --git a/mysql-test/suite/perfschema/r/misc.result b/mysql-test/suite/perfschema/r/misc.result
new file mode 100644
index 00000000000..d944b4b1d3d
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/misc.result
@@ -0,0 +1,13 @@
+SELECT EVENT_ID FROM performance_schema.EVENTS_WAITS_CURRENT
+WHERE THREAD_ID IN
+(SELECT THREAD_ID FROM performance_schema.PROCESSLIST)
+AND EVENT_NAME IN
+(SELECT NAME FROM performance_schema.SETUP_INSTRUMENTS
+WHERE NAME LIKE "wait/synch/%")
+LIMIT 1;
+create table test.t1(a int) engine=performance_schema;
+ERROR HY000: Invalid performance_schema usage.
+create table test.t1 like performance_schema.EVENTS_WAITS_CURRENT;
+ERROR HY000: Invalid performance_schema usage.
+create table performance_schema.t1(a int);
+ERROR 42000: CREATE command denied to user 'root'@'localhost' for table 't1'
diff --git a/mysql-test/suite/perfschema/r/myisam_file_io.result b/mysql-test/suite/perfschema/r/myisam_file_io.result
new file mode 100644
index 00000000000..66c37c7d6d8
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/myisam_file_io.result
@@ -0,0 +1,59 @@
+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;
+drop table if exists test.no_index_tab;
+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;
+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"
+ order by thread_id, event_id;
+event_name short_source operation number_of_bytes short_name
+wait/io/file/myisam/kfile mi_create.c: create NULL no_index_tab.MYI
+wait/io/file/myisam/dfile mi_create.c: create NULL no_index_tab.MYD
+wait/io/file/myisam/kfile mi_open.c: write 176 no_index_tab.MYI
+wait/io/file/myisam/kfile mi_open.c: write 100 no_index_tab.MYI
+wait/io/file/myisam/kfile mi_open.c: write 7 no_index_tab.MYI
+wait/io/file/myisam/kfile mi_open.c: write 7 no_index_tab.MYI
+wait/io/file/myisam/kfile mi_open.c: write 7 no_index_tab.MYI
+wait/io/file/myisam/kfile mi_create.c: chsize 1024 no_index_tab.MYI
+wait/io/file/myisam/dfile mi_create.c: close NULL no_index_tab.MYD
+wait/io/file/myisam/kfile mi_create.c: close NULL no_index_tab.MYI
+wait/io/file/myisam/kfile mi_open.c: open NULL no_index_tab.MYI
+wait/io/file/myisam/kfile mi_open.c: read 24 no_index_tab.MYI
+wait/io/file/myisam/kfile mi_open.c: seek NULL no_index_tab.MYI
+wait/io/file/myisam/kfile mi_open.c: read 297 no_index_tab.MYI
+wait/io/file/myisam/dfile mi_open.c: open NULL no_index_tab.MYD
+wait/io/file/myisam/kfile mi_locking.c: write 3 no_index_tab.MYI
+wait/io/file/myisam/dfile mi_dynrec.c: write 20 no_index_tab.MYD
+wait/io/file/myisam/kfile mi_open.c: write 124 no_index_tab.MYI
+wait/io/file/myisam/dfile mi_dynrec.c: write 20 no_index_tab.MYD
+wait/io/file/myisam/kfile mi_open.c: write 124 no_index_tab.MYI
+wait/io/file/myisam/dfile mi_dynrec.c: write 20 no_index_tab.MYD
+wait/io/file/myisam/kfile mi_open.c: write 124 no_index_tab.MYI
+show status like 'performance_schema_%';
+Variable_name Value
+Performance_schema_cond_classes_lost 0
+Performance_schema_cond_instances_lost 0
+Performance_schema_file_classes_lost 0
+Performance_schema_file_handles_lost 0
+Performance_schema_file_instances_lost 0
+Performance_schema_locker_lost 0
+Performance_schema_mutex_classes_lost 0
+Performance_schema_mutex_instances_lost 0
+Performance_schema_rwlock_classes_lost 0
+Performance_schema_rwlock_instances_lost 0
+Performance_schema_table_handles_lost 0
+Performance_schema_table_instances_lost 0
+Performance_schema_thread_classes_lost 0
+Performance_schema_thread_instances_lost 0
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+drop table test.no_index_tab;
diff --git a/mysql-test/suite/perfschema/r/no_threads.result b/mysql-test/suite/perfschema/r/no_threads.result
new file mode 100644
index 00000000000..b38dc9fd733
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/no_threads.result
@@ -0,0 +1,43 @@
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO';
+update performance_schema.SETUP_CONSUMERS set enabled='YES';
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES'
+ where name like "wait/synch/mutex/mysys/THR_LOCK_myisam";
+drop table if exists test.t1;
+truncate table performance_schema.EVENTS_WAITS_CURRENT;
+truncate table performance_schema.EVENTS_WAITS_HISTORY;
+truncate table performance_schema.EVENTS_WAITS_HISTORY_LONG;
+show variables like "thread_handling";
+Variable_name Value
+thread_handling no-threads
+create table test.t1(a int) engine=MYISAM;
+show variables like "performance_schema";
+Variable_name Value
+performance_schema ON
+show variables like "performance_schema_max_thread%";
+Variable_name Value
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 10
+select count(*) from performance_schema.PROCESSLIST
+where name like "thread/sql/main";
+count(*)
+1
+select count(*) from performance_schema.PROCESSLIST
+where name like "thread/sql/OneConnection";
+count(*)
+0
+select event_name, operation,
+left(source, locate(":", source)) as short_source
+from performance_schema.EVENTS_WAITS_CURRENT;
+event_name operation short_source
+wait/synch/mutex/mysys/THR_LOCK_myisam lock mi_create.c:
+select event_name, operation,
+left(source, locate(":", source)) as short_source
+from performance_schema.EVENTS_WAITS_HISTORY;
+event_name operation short_source
+wait/synch/mutex/mysys/THR_LOCK_myisam lock mi_create.c:
+select event_name, operation,
+left(source, locate(":", source)) as short_source
+from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+event_name operation short_source
+wait/synch/mutex/mysys/THR_LOCK_myisam lock mi_create.c:
+drop table test.t1;
diff --git a/mysql-test/suite/perfschema/r/one_thread_per_con.result b/mysql-test/suite/perfschema/r/one_thread_per_con.result
new file mode 100644
index 00000000000..9677a09933a
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/one_thread_per_con.result
@@ -0,0 +1,38 @@
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES'
+ where name like "wait/synch/mutex/mysys/THR_LOCK_myisam";
+drop table if exists test.t1;
+drop table if exists test.t2;
+drop table if exists test.t3;
+truncate table performance_schema.EVENTS_WAITS_HISTORY_LONG;
+show variables like "thread_handling";
+Variable_name Value
+thread_handling one-thread-per-connection
+"----------------- Connection 1"
+create table test.t1(a int) engine=MYISAM;
+"----------------- Connection 2"
+create table test.t2(a int) engine=MYISAM;
+"----------------- Connection 3"
+create table test.t3(a int) engine=MYISAM;
+"----------------- Connection default"
+execute stmt_dump_events using @tid;
+event_name short_source operation number_of_bytes
+wait/synch/mutex/mysys/THR_LOCK_myisam mi_create.c: lock NULL
+execute stmt_dump_thread using @tid;
+name
+thread/sql/one_connection
+execute stmt_dump_events using @tid;
+event_name short_source operation number_of_bytes
+wait/synch/mutex/mysys/THR_LOCK_myisam mi_create.c: lock NULL
+execute stmt_dump_thread using @tid;
+name
+thread/sql/one_connection
+execute stmt_dump_events using @tid;
+event_name short_source operation number_of_bytes
+wait/synch/mutex/mysys/THR_LOCK_myisam mi_create.c: lock NULL
+execute stmt_dump_thread using @tid;
+name
+thread/sql/one_connection
+drop table test.t1;
+drop table test.t2;
+drop table test.t3;
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
diff --git a/mysql-test/suite/perfschema/r/privilege.result b/mysql-test/suite/perfschema/r/privilege.result
new file mode 100644
index 00000000000..ddbc150a72a
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/privilege.result
@@ -0,0 +1,577 @@
+show grants;
+Grants for root@localhost
+GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
+grant ALL on *.* to 'pfs_user_1'@localhost with GRANT OPTION;
+grant ALL on performance_schema.* to 'pfs_user_2'@localhost
+with GRANT OPTION;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant CREATE on performance_schema.* to 'pfs_user_2'@localhost;
+grant DROP on performance_schema.* to 'pfs_user_2'@localhost;
+grant REFERENCES on performance_schema.* to 'pfs_user_2'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant INDEX on performance_schema.* to 'pfs_user_2'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant ALTER on performance_schema.* to 'pfs_user_2'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant CREATE TEMPORARY TABLES on performance_schema.* to 'pfs_user_2'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant EXECUTE on performance_schema.* to 'pfs_user_2'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant CREATE VIEW on performance_schema.* to 'pfs_user_2'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant SHOW VIEW on performance_schema.* to 'pfs_user_2'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant CREATE ROUTINE on performance_schema.* to 'pfs_user_2'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant ALTER ROUTINE on performance_schema.* to 'pfs_user_2'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant EVENT on performance_schema.* to 'pfs_user_2'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant TRIGGER on performance_schema.* to 'pfs_user_2'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant SELECT on performance_schema.* to 'pfs_user_2'@localhost;
+grant INSERT on performance_schema.* to 'pfs_user_2'@localhost;
+grant UPDATE on performance_schema.* to 'pfs_user_2'@localhost;
+grant DELETE on performance_schema.* to 'pfs_user_2'@localhost;
+grant LOCK TABLES on performance_schema.* to 'pfs_user_2'@localhost;
+grant ALL on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost
+with GRANT OPTION;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant CREATE on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+grant DROP on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+grant REFERENCES on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant INDEX on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant ALTER on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant CREATE VIEW on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant SHOW VIEW on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant TRIGGER on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant INSERT on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+ERROR 42000: INSERT,GRANT command denied to user 'root'@'localhost' for table 'SETUP_INSTRUMENTS'
+grant DELETE on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+ERROR 42000: DELETE,GRANT command denied to user 'root'@'localhost' for table 'SETUP_INSTRUMENTS'
+grant SELECT on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost
+with GRANT OPTION;
+grant UPDATE on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost
+with GRANT OPTION;
+grant ALL on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost
+with GRANT OPTION;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant CREATE on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+grant DROP on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+grant REFERENCES on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant INDEX on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant ALTER on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant CREATE VIEW on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant SHOW VIEW on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant TRIGGER on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant INSERT on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+ERROR 42000: INSERT,GRANT command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+grant UPDATE on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+ERROR 42000: UPDATE,GRANT command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+grant DELETE on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+ERROR 42000: DELETE,GRANT command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+grant SELECT on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost
+with GRANT OPTION;
+grant ALL on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost
+with GRANT OPTION;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant CREATE on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+grant DROP on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+grant REFERENCES on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant INDEX on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant ALTER on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant CREATE VIEW on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant SHOW VIEW on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant TRIGGER on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+grant INSERT on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+ERROR 42000: INSERT,GRANT command denied to user 'root'@'localhost' for table 'FILE_INSTANCES'
+grant UPDATE on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+ERROR 42000: UPDATE,GRANT command denied to user 'root'@'localhost' for table 'FILE_INSTANCES'
+grant DELETE on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+ERROR 42000: DELETE,GRANT command denied to user 'root'@'localhost' for table 'FILE_INSTANCES'
+grant SELECT on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost
+with GRANT OPTION;
+grant LOCK TABLES on performance_schema.* to 'pfs_user_3'@localhost
+with GRANT OPTION;
+flush privileges;
+drop table if exists test.t1;
+rename table performance_schema.SETUP_INSTRUMENTS to test.t1;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+rename table performance_schema.EVENTS_WAITS_CURRENT to test.t1;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+rename table performance_schema.FILE_INSTANCES to test.t1;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+rename table performance_schema.SETUP_INSTRUMENTS to performance_schema.t1;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+rename table performance_schema.EVENTS_WAITS_CURRENT to performance_schema.t1;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+rename table performance_schema.FILE_INSTANCES to performance_schema.t1;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+rename table performance_schema.SETUP_INSTRUMENTS
+to performance_schema.EVENTS_WAITS_CURRENT;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+rename table performance_schema.EVENTS_WAITS_CURRENT
+to performance_schema.SETUP_INSTRUMENTS;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+create procedure performance_schema.my_proc() begin end;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+create function performance_schema.my_func() returns int return 0;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+create event performance_schema.my_event on schedule every 15 minute
+do begin end;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+create trigger performance_schema.bi_setup_instruments
+before insert on performance_schema.SETUP_INSTRUMENTS
+for each row begin end;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+create trigger performance_schema.bi_events_waits_current
+before insert on performance_schema.EVENTS_WAITS_CURRENT
+for each row begin end;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+create trigger performance_schema.bi_file_instances
+before insert on performance_schema.FILE_INSTANCES
+for each row begin end;
+ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema'
+create table test.t1(a int) engine=PERFORMANCE_SCHEMA;
+ERROR HY000: Invalid performance_schema usage.
+create table test.t1 like performance_schema.SETUP_INSTRUMENTS;
+ERROR HY000: Invalid performance_schema usage.
+create table test.t1 like performance_schema.EVENTS_WAITS_CURRENT;
+ERROR HY000: Invalid performance_schema usage.
+create table test.t1 like performance_schema.FILE_INSTANCES;
+ERROR HY000: Invalid performance_schema usage.
+insert into performance_schema.SETUP_INSTRUMENTS
+set name="foo";
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'SETUP_INSTRUMENTS'
+insert into performance_schema.EVENTS_WAITS_CURRENT
+set name="foo";
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+insert into performance_schema.FILE_INSTANCES
+set name="foo";
+ERROR 42000: INSERT command denied to user 'root'@'localhost' for table 'FILE_INSTANCES'
+delete from performance_schema.SETUP_INSTRUMENTS;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'SETUP_INSTRUMENTS'
+delete from performance_schema.EVENTS_WAITS_CURRENT;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+delete from performance_schema.FILE_INSTANCES;
+ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'FILE_INSTANCES'
+lock table performance_schema.SETUP_INSTRUMENTS read;
+unlock tables;
+lock table performance_schema.SETUP_INSTRUMENTS write;
+unlock tables;
+lock table performance_schema.EVENTS_WAITS_CURRENT read;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+unlock tables;
+lock table performance_schema.EVENTS_WAITS_CURRENT write;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+unlock tables;
+lock table performance_schema.FILE_INSTANCES read;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'FILE_INSTANCES'
+unlock tables;
+lock table performance_schema.FILE_INSTANCES write;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'FILE_INSTANCES'
+unlock tables;
+#
+# WL#4818, NFS2: Can use grants to give normal user access
+# to view data from _CURRENT and _HISTORY tables
+#
+# Should work as pfs_user_1 and pfs_user_2, but not as pfs_user_3.
+# (Except for EVENTS_WAITS_CURRENT, which is granted.)
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_HISTORY LIMIT 1;
+can select
+can select
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_HISTORY_LONG LIMIT 1;
+can select
+can select
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_CURRENT LIMIT 1;
+can select
+can select
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE LIMIT 1;
+can select
+can select
+SELECT "can select" FROM performance_schema.FILE_SUMMARY_BY_INSTANCE LIMIT 1;
+can select
+can select
+drop table if exists test.t1;
+rename table performance_schema.SETUP_INSTRUMENTS to test.t1;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+rename table performance_schema.EVENTS_WAITS_CURRENT to test.t1;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+rename table performance_schema.FILE_INSTANCES to test.t1;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+rename table performance_schema.SETUP_INSTRUMENTS to performance_schema.t1;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+rename table performance_schema.EVENTS_WAITS_CURRENT to performance_schema.t1;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+rename table performance_schema.FILE_INSTANCES to performance_schema.t1;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+rename table performance_schema.SETUP_INSTRUMENTS
+to performance_schema.EVENTS_WAITS_CURRENT;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+rename table performance_schema.EVENTS_WAITS_CURRENT
+to performance_schema.SETUP_INSTRUMENTS;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+create procedure performance_schema.my_proc() begin end;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+create function performance_schema.my_func() returns int return 0;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+create event performance_schema.my_event on schedule every 15 minute
+do begin end;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+create trigger performance_schema.bi_setup_instruments
+before insert on performance_schema.SETUP_INSTRUMENTS
+for each row begin end;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+create trigger performance_schema.bi_events_waits_current
+before insert on performance_schema.EVENTS_WAITS_CURRENT
+for each row begin end;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+create trigger performance_schema.bi_file_instances
+before insert on performance_schema.FILE_INSTANCES
+for each row begin end;
+ERROR 42000: Access denied for user 'pfs_user_1'@'localhost' to database 'performance_schema'
+create table test.t1(a int) engine=PERFORMANCE_SCHEMA;
+ERROR HY000: Invalid performance_schema usage.
+create table test.t1 like performance_schema.SETUP_INSTRUMENTS;
+ERROR HY000: Invalid performance_schema usage.
+create table test.t1 like performance_schema.EVENTS_WAITS_CURRENT;
+ERROR HY000: Invalid performance_schema usage.
+create table test.t1 like performance_schema.FILE_INSTANCES;
+ERROR HY000: Invalid performance_schema usage.
+insert into performance_schema.SETUP_INSTRUMENTS
+set name="foo";
+ERROR 42000: INSERT command denied to user 'pfs_user_1'@'localhost' for table 'SETUP_INSTRUMENTS'
+insert into performance_schema.EVENTS_WAITS_CURRENT
+set name="foo";
+ERROR 42000: INSERT command denied to user 'pfs_user_1'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+insert into performance_schema.FILE_INSTANCES
+set name="foo";
+ERROR 42000: INSERT command denied to user 'pfs_user_1'@'localhost' for table 'FILE_INSTANCES'
+delete from performance_schema.SETUP_INSTRUMENTS;
+ERROR 42000: DELETE command denied to user 'pfs_user_1'@'localhost' for table 'SETUP_INSTRUMENTS'
+delete from performance_schema.EVENTS_WAITS_CURRENT;
+ERROR 42000: DELETE command denied to user 'pfs_user_1'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+delete from performance_schema.FILE_INSTANCES;
+ERROR 42000: DELETE command denied to user 'pfs_user_1'@'localhost' for table 'FILE_INSTANCES'
+lock table performance_schema.SETUP_INSTRUMENTS read;
+unlock tables;
+lock table performance_schema.SETUP_INSTRUMENTS write;
+unlock tables;
+lock table performance_schema.EVENTS_WAITS_CURRENT read;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'pfs_user_1'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+unlock tables;
+lock table performance_schema.EVENTS_WAITS_CURRENT write;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'pfs_user_1'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+unlock tables;
+lock table performance_schema.FILE_INSTANCES read;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'pfs_user_1'@'localhost' for table 'FILE_INSTANCES'
+unlock tables;
+lock table performance_schema.FILE_INSTANCES write;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'pfs_user_1'@'localhost' for table 'FILE_INSTANCES'
+unlock tables;
+#
+# WL#4818, NFS2: Can use grants to give normal user access
+# to view data from _CURRENT and _HISTORY tables
+#
+# Should work as pfs_user_1 and pfs_user_2, but not as pfs_user_3.
+# (Except for EVENTS_WAITS_CURRENT, which is granted.)
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_HISTORY LIMIT 1;
+can select
+can select
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_HISTORY_LONG LIMIT 1;
+can select
+can select
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_CURRENT LIMIT 1;
+can select
+can select
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE LIMIT 1;
+can select
+can select
+SELECT "can select" FROM performance_schema.FILE_SUMMARY_BY_INSTANCE LIMIT 1;
+can select
+can select
+drop table if exists test.t1;
+rename table performance_schema.SETUP_INSTRUMENTS to test.t1;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+rename table performance_schema.EVENTS_WAITS_CURRENT to test.t1;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+rename table performance_schema.FILE_INSTANCES to test.t1;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+rename table performance_schema.SETUP_INSTRUMENTS to performance_schema.t1;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+rename table performance_schema.EVENTS_WAITS_CURRENT to performance_schema.t1;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+rename table performance_schema.FILE_INSTANCES to performance_schema.t1;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+rename table performance_schema.SETUP_INSTRUMENTS
+to performance_schema.EVENTS_WAITS_CURRENT;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+rename table performance_schema.EVENTS_WAITS_CURRENT
+to performance_schema.SETUP_INSTRUMENTS;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+create procedure performance_schema.my_proc() begin end;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+create function performance_schema.my_func() returns int return 0;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+create event performance_schema.my_event on schedule every 15 minute
+do begin end;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+create trigger performance_schema.bi_setup_instruments
+before insert on performance_schema.SETUP_INSTRUMENTS
+for each row begin end;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+create trigger performance_schema.bi_events_waits_current
+before insert on performance_schema.EVENTS_WAITS_CURRENT
+for each row begin end;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+create trigger performance_schema.bi_file_instances
+before insert on performance_schema.FILE_INSTANCES
+for each row begin end;
+ERROR 42000: Access denied for user 'pfs_user_2'@'localhost' to database 'performance_schema'
+create table test.t1(a int) engine=PERFORMANCE_SCHEMA;
+ERROR HY000: Invalid performance_schema usage.
+create table test.t1 like performance_schema.SETUP_INSTRUMENTS;
+ERROR HY000: Invalid performance_schema usage.
+create table test.t1 like performance_schema.EVENTS_WAITS_CURRENT;
+ERROR HY000: Invalid performance_schema usage.
+create table test.t1 like performance_schema.FILE_INSTANCES;
+ERROR HY000: Invalid performance_schema usage.
+insert into performance_schema.SETUP_INSTRUMENTS
+set name="foo";
+ERROR 42000: INSERT command denied to user 'pfs_user_2'@'localhost' for table 'SETUP_INSTRUMENTS'
+insert into performance_schema.EVENTS_WAITS_CURRENT
+set name="foo";
+ERROR 42000: INSERT command denied to user 'pfs_user_2'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+insert into performance_schema.FILE_INSTANCES
+set name="foo";
+ERROR 42000: INSERT command denied to user 'pfs_user_2'@'localhost' for table 'FILE_INSTANCES'
+delete from performance_schema.SETUP_INSTRUMENTS;
+ERROR 42000: DELETE command denied to user 'pfs_user_2'@'localhost' for table 'SETUP_INSTRUMENTS'
+delete from performance_schema.EVENTS_WAITS_CURRENT;
+ERROR 42000: DELETE command denied to user 'pfs_user_2'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+delete from performance_schema.FILE_INSTANCES;
+ERROR 42000: DELETE command denied to user 'pfs_user_2'@'localhost' for table 'FILE_INSTANCES'
+lock table performance_schema.SETUP_INSTRUMENTS read;
+unlock tables;
+lock table performance_schema.SETUP_INSTRUMENTS write;
+unlock tables;
+lock table performance_schema.EVENTS_WAITS_CURRENT read;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'pfs_user_2'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+unlock tables;
+lock table performance_schema.EVENTS_WAITS_CURRENT write;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'pfs_user_2'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+unlock tables;
+lock table performance_schema.FILE_INSTANCES read;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'pfs_user_2'@'localhost' for table 'FILE_INSTANCES'
+unlock tables;
+lock table performance_schema.FILE_INSTANCES write;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'pfs_user_2'@'localhost' for table 'FILE_INSTANCES'
+unlock tables;
+#
+# WL#4818, NFS2: Can use grants to give normal user access
+# to view data from _CURRENT and _HISTORY tables
+#
+# Should work as pfs_user_1 and pfs_user_2, but not as pfs_user_3.
+# (Except for EVENTS_WAITS_CURRENT, which is granted.)
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_HISTORY LIMIT 1;
+can select
+can select
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_HISTORY_LONG LIMIT 1;
+can select
+can select
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_CURRENT LIMIT 1;
+can select
+can select
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE LIMIT 1;
+can select
+can select
+SELECT "can select" FROM performance_schema.FILE_SUMMARY_BY_INSTANCE LIMIT 1;
+can select
+can select
+drop table if exists test.t1;
+rename table performance_schema.SETUP_INSTRUMENTS to test.t1;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+rename table performance_schema.EVENTS_WAITS_CURRENT to test.t1;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+rename table performance_schema.FILE_INSTANCES to test.t1;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+rename table performance_schema.SETUP_INSTRUMENTS to performance_schema.t1;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+rename table performance_schema.EVENTS_WAITS_CURRENT to performance_schema.t1;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+rename table performance_schema.FILE_INSTANCES to performance_schema.t1;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+rename table performance_schema.SETUP_INSTRUMENTS
+to performance_schema.EVENTS_WAITS_CURRENT;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+rename table performance_schema.EVENTS_WAITS_CURRENT
+to performance_schema.SETUP_INSTRUMENTS;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+create procedure performance_schema.my_proc() begin end;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+create function performance_schema.my_func() returns int return 0;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+create event performance_schema.my_event on schedule every 15 minute
+do begin end;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+create trigger performance_schema.bi_setup_instruments
+before insert on performance_schema.SETUP_INSTRUMENTS
+for each row begin end;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+create trigger performance_schema.bi_events_waits_current
+before insert on performance_schema.EVENTS_WAITS_CURRENT
+for each row begin end;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+create trigger performance_schema.bi_file_instances
+before insert on performance_schema.FILE_INSTANCES
+for each row begin end;
+ERROR 42000: Access denied for user 'pfs_user_3'@'localhost' to database 'performance_schema'
+create table test.t1(a int) engine=PERFORMANCE_SCHEMA;
+ERROR HY000: Invalid performance_schema usage.
+create table test.t1 like performance_schema.SETUP_INSTRUMENTS;
+ERROR HY000: Invalid performance_schema usage.
+create table test.t1 like performance_schema.EVENTS_WAITS_CURRENT;
+ERROR HY000: Invalid performance_schema usage.
+create table test.t1 like performance_schema.FILE_INSTANCES;
+ERROR HY000: Invalid performance_schema usage.
+insert into performance_schema.SETUP_INSTRUMENTS
+set name="foo";
+ERROR 42000: INSERT command denied to user 'pfs_user_3'@'localhost' for table 'SETUP_INSTRUMENTS'
+insert into performance_schema.EVENTS_WAITS_CURRENT
+set name="foo";
+ERROR 42000: INSERT command denied to user 'pfs_user_3'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+insert into performance_schema.FILE_INSTANCES
+set name="foo";
+ERROR 42000: INSERT command denied to user 'pfs_user_3'@'localhost' for table 'FILE_INSTANCES'
+delete from performance_schema.SETUP_INSTRUMENTS;
+ERROR 42000: DELETE command denied to user 'pfs_user_3'@'localhost' for table 'SETUP_INSTRUMENTS'
+delete from performance_schema.EVENTS_WAITS_CURRENT;
+ERROR 42000: DELETE command denied to user 'pfs_user_3'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+delete from performance_schema.FILE_INSTANCES;
+ERROR 42000: DELETE command denied to user 'pfs_user_3'@'localhost' for table 'FILE_INSTANCES'
+lock table performance_schema.SETUP_INSTRUMENTS read;
+unlock tables;
+lock table performance_schema.SETUP_INSTRUMENTS write;
+unlock tables;
+lock table performance_schema.EVENTS_WAITS_CURRENT read;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'pfs_user_3'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+unlock tables;
+lock table performance_schema.EVENTS_WAITS_CURRENT write;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'pfs_user_3'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+unlock tables;
+lock table performance_schema.FILE_INSTANCES read;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'pfs_user_3'@'localhost' for table 'FILE_INSTANCES'
+unlock tables;
+lock table performance_schema.FILE_INSTANCES write;
+ERROR 42000: SELECT,LOCK TABL command denied to user 'pfs_user_3'@'localhost' for table 'FILE_INSTANCES'
+unlock tables;
+#
+# WL#4818, NFS2: Can use grants to give normal user access
+# to view data from _CURRENT and _HISTORY tables
+#
+# Should work as pfs_user_1 and pfs_user_2, but not as pfs_user_3.
+# (Except for EVENTS_WAITS_CURRENT, which is granted.)
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_HISTORY LIMIT 1;
+ERROR 42000: SELECT command denied to user 'pfs_user_3'@'localhost' for table 'EVENTS_WAITS_HISTORY'
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_HISTORY_LONG LIMIT 1;
+ERROR 42000: SELECT command denied to user 'pfs_user_3'@'localhost' for table 'EVENTS_WAITS_HISTORY_LONG'
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_CURRENT LIMIT 1;
+can select
+can select
+SELECT "can select" FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE LIMIT 1;
+ERROR 42000: SELECT command denied to user 'pfs_user_3'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+SELECT "can select" FROM performance_schema.FILE_SUMMARY_BY_INSTANCE LIMIT 1;
+ERROR 42000: SELECT command denied to user 'pfs_user_3'@'localhost' for table 'FILE_SUMMARY_BY_INSTANCE'
+revoke all privileges, grant option from 'pfs_user_1'@localhost;
+revoke all privileges, grant option from 'pfs_user_2'@localhost;
+revoke all privileges, grant option from 'pfs_user_3'@localhost;
+drop user 'pfs_user_1'@localhost;
+drop user 'pfs_user_2'@localhost;
+drop user 'pfs_user_3'@localhost;
+flush privileges;
+# Test cases from WL#4818
+# Setup user
+CREATE user pfs_user_4;
+#
+# WL#4818, NFS4: Normal user does not have access to view data
+# without grants
+#
+# Select as pfs_user_4 should fail without grant
+SELECT event_id FROM performance_schema.EVENTS_WAITS_HISTORY;
+ERROR 42000: SELECT command denied to user 'pfs_user_4'@'localhost' for table 'EVENTS_WAITS_HISTORY'
+SELECT event_id FROM performance_schema.EVENTS_WAITS_HISTORY_LONG;
+ERROR 42000: SELECT command denied to user 'pfs_user_4'@'localhost' for table 'EVENTS_WAITS_HISTORY_LONG'
+SELECT event_id FROM performance_schema.EVENTS_WAITS_CURRENT;
+ERROR 42000: SELECT command denied to user 'pfs_user_4'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+SELECT event_name FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+ERROR 42000: SELECT command denied to user 'pfs_user_4'@'localhost' for table 'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+SELECT event_name FROM performance_schema.FILE_SUMMARY_BY_INSTANCE;
+ERROR 42000: SELECT command denied to user 'pfs_user_4'@'localhost' for table 'FILE_SUMMARY_BY_INSTANCE'
+#
+# WL#4818, NFS3: Normal user does not have access to change what is
+# instrumented without grants
+#
+# User pfs_user_4 should not be allowed to tweak instrumentation without
+# explicit grant
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO', timed = 'YES';
+ERROR 42000: UPDATE command denied to user 'pfs_user_4'@'localhost' for table 'SETUP_INSTRUMENTS'
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES'
+WHERE name LIKE 'wait/synch/mutex/%'
+ OR name LIKE 'wait/synch/rwlock/%';
+ERROR 42000: UPDATE command denied to user 'pfs_user_4'@'localhost' for table 'SETUP_INSTRUMENTS'
+UPDATE performance_schema.SETUP_CONSUMERS SET enabled = 'YES';
+ERROR 42000: UPDATE command denied to user 'pfs_user_4'@'localhost' for table 'SETUP_CONSUMERS'
+UPDATE performance_schema.SETUP_TIMERS SET timer_name = 'TICK';
+ERROR 42000: UPDATE command denied to user 'pfs_user_4'@'localhost' for table 'SETUP_TIMERS'
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+ERROR 42000: DROP command denied to user 'pfs_user_4'@'localhost' for table 'EVENTS_WAITS_HISTORY_LONG'
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+ERROR 42000: DROP command denied to user 'pfs_user_4'@'localhost' for table 'EVENTS_WAITS_HISTORY'
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+ERROR 42000: DROP command denied to user 'pfs_user_4'@'localhost' for table 'EVENTS_WAITS_CURRENT'
+#
+# WL#4814, NFS1: Can use grants to give normal user access
+# to turn on and off instrumentation
+#
+# Grant access to change tables with the root account
+GRANT UPDATE ON performance_schema.SETUP_CONSUMERS TO pfs_user_4;
+GRANT UPDATE ON performance_schema.SETUP_TIMERS TO pfs_user_4;
+GRANT UPDATE, SELECT ON performance_schema.SETUP_INSTRUMENTS TO pfs_user_4;
+GRANT DROP ON performance_schema.EVENTS_WAITS_CURRENT TO pfs_user_4;
+GRANT DROP ON performance_schema.EVENTS_WAITS_HISTORY TO pfs_user_4;
+GRANT DROP ON performance_schema.EVENTS_WAITS_HISTORY_LONG TO pfs_user_4;
+# User pfs_user_4 should now be allowed to tweak instrumentation
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO', timed = 'YES';
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES'
+WHERE name LIKE 'wait/synch/mutex/%'
+ OR name LIKE 'wait/synch/rwlock/%';
+UPDATE performance_schema.SETUP_CONSUMERS SET enabled = 'YES';
+UPDATE performance_schema.SETUP_TIMERS SET timer_name = 'TICK';
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+# Clean up
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM pfs_user_4;
+DROP USER pfs_user_4;
+flush privileges;
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES', timed = 'YES';
+UPDATE performance_schema.SETUP_CONSUMERS SET enabled = 'YES';
+UPDATE performance_schema.SETUP_TIMERS SET timer_name = 'CYCLE';
diff --git a/mysql-test/suite/perfschema/r/query_cache.result b/mysql-test/suite/perfschema/r/query_cache.result
new file mode 100644
index 00000000000..06862009493
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/query_cache.result
@@ -0,0 +1,66 @@
+drop table if exists t1;
+create table t1 (a int not null);
+insert into t1 values (1), (2), (3);
+SET GLOBAL query_cache_size=1355776;
+flush query cache;
+reset query cache;
+select * from t1;
+a
+1
+2
+3
+show status like "Qcache_queries_in_cache";
+Variable_name Value
+Qcache_queries_in_cache 1
+show status like "Qcache_inserts";
+Variable_name Value
+Qcache_inserts 1
+show status like "Qcache_hits";
+Variable_name Value
+Qcache_hits 0
+select * from t1;
+a
+1
+2
+3
+show status like "Qcache_queries_in_cache";
+Variable_name Value
+Qcache_queries_in_cache 1
+show status like "Qcache_inserts";
+Variable_name Value
+Qcache_inserts 1
+show status like "Qcache_hits";
+Variable_name Value
+Qcache_hits 1
+select spins from performance_schema.EVENTS_WAITS_CURRENT order by event_name limit 1;
+spins
+NULL
+select name from performance_schema.SETUP_INSTRUMENTS order by name limit 1;
+name
+wait/io/file/csv/data
+show status like "Qcache_queries_in_cache";
+Variable_name Value
+Qcache_queries_in_cache 1
+show status like "Qcache_inserts";
+Variable_name Value
+Qcache_inserts 1
+show status like "Qcache_hits";
+Variable_name Value
+Qcache_hits 1
+select spins from performance_schema.EVENTS_WAITS_CURRENT order by event_name limit 1;
+spins
+NULL
+select name from performance_schema.SETUP_INSTRUMENTS order by name limit 1;
+name
+wait/io/file/csv/data
+show status like "Qcache_queries_in_cache";
+Variable_name Value
+Qcache_queries_in_cache 1
+show status like "Qcache_inserts";
+Variable_name Value
+Qcache_inserts 1
+show status like "Qcache_hits";
+Variable_name Value
+Qcache_hits 1
+SET GLOBAL query_cache_size= default;
+drop table t1;
diff --git a/mysql-test/suite/perfschema/r/read_only.result b/mysql-test/suite/perfschema/r/read_only.result
new file mode 100644
index 00000000000..6a30eb4ab8b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/read_only.result
@@ -0,0 +1,49 @@
+use performance_schema;
+set @start_read_only= @@global.read_only;
+grant SELECT, UPDATE on performance_schema.* to pfsuser@localhost;
+flush privileges;
+connect (con1, localhost, pfsuser, , test);
+connection default;
+set global read_only=0;
+connection con1;
+select @@global.read_only;
+@@global.read_only
+0
+show grants;
+Grants for pfsuser@localhost
+GRANT USAGE ON *.* TO 'pfsuser'@'localhost'
+GRANT SELECT, UPDATE ON `performance_schema`.* TO 'pfsuser'@'localhost'
+select * from performance_schema.SETUP_INSTRUMENTS;
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO';
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+connection default;
+set global read_only=1;
+connection con1;
+select @@global.read_only;
+@@global.read_only
+1
+show grants;
+Grants for pfsuser@localhost
+GRANT USAGE ON *.* TO 'pfsuser'@'localhost'
+GRANT SELECT, UPDATE ON `performance_schema`.* TO 'pfsuser'@'localhost'
+select * from performance_schema.SETUP_INSTRUMENTS;
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO';
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+connection default;
+grant super on *.* to pfsuser@localhost;
+flush privileges;
+connect (con1, localhost, pfsuser, , test);
+select @@global.read_only;
+@@global.read_only
+1
+show grants;
+Grants for pfsuser@localhost
+GRANT SUPER ON *.* TO 'pfsuser'@'localhost'
+GRANT SELECT, UPDATE ON `performance_schema`.* TO 'pfsuser'@'localhost'
+select * from performance_schema.SETUP_INSTRUMENTS;
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO';
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+connection default;
+set global read_only= @start_read_only;
+drop user pfsuser@localhost;
+flush privileges;
diff --git a/mysql-test/suite/perfschema/r/schema.result b/mysql-test/suite/perfschema/r/schema.result
new file mode 100644
index 00000000000..d402df70ed5
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/schema.result
@@ -0,0 +1,211 @@
+show databases;
+Database
+information_schema
+mtr
+mysql
+performance_schema
+test
+use performance_schema;
+show tables;
+Tables_in_performance_schema
+COND_INSTANCES
+EVENTS_WAITS_CURRENT
+EVENTS_WAITS_HISTORY
+EVENTS_WAITS_HISTORY_LONG
+EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+EVENTS_WAITS_SUMMARY_BY_INSTANCE
+EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+FILE_INSTANCES
+FILE_SUMMARY_BY_EVENT_NAME
+FILE_SUMMARY_BY_INSTANCE
+MUTEX_INSTANCES
+PERFORMANCE_TIMERS
+PROCESSLIST
+RWLOCK_INSTANCES
+SETUP_CONSUMERS
+SETUP_INSTRUMENTS
+SETUP_OBJECTS
+SETUP_TIMERS
+show create table COND_INSTANCES;
+Table Create Table
+COND_INSTANCES CREATE TABLE `COND_INSTANCES` (
+ `NAME` varchar(128) NOT NULL,
+ `OBJECT_INSTANCE_BEGIN` bigint(20) NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table EVENTS_WAITS_CURRENT;
+Table Create Table
+EVENTS_WAITS_CURRENT CREATE TABLE `EVENTS_WAITS_CURRENT` (
+ `THREAD_ID` int(11) NOT NULL,
+ `EVENT_ID` bigint(20) unsigned NOT NULL,
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `SOURCE` varchar(64) DEFAULT NULL,
+ `TIMER_START` bigint(20) unsigned DEFAULT NULL,
+ `TIMER_END` bigint(20) unsigned DEFAULT NULL,
+ `TIMER_WAIT` bigint(20) unsigned DEFAULT NULL,
+ `SPINS` int(10) unsigned DEFAULT NULL,
+ `OBJECT_SCHEMA` varchar(64) DEFAULT NULL,
+ `OBJECT_NAME` varchar(512) DEFAULT NULL,
+ `OBJECT_TYPE` varchar(64) DEFAULT NULL,
+ `OBJECT_INSTANCE_BEGIN` bigint(20) NOT NULL,
+ `NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
+ `OPERATION` varchar(16) NOT NULL,
+ `NUMBER_OF_BYTES` bigint(20) unsigned DEFAULT NULL,
+ `FLAGS` int(10) unsigned DEFAULT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table EVENTS_WAITS_HISTORY;
+Table Create Table
+EVENTS_WAITS_HISTORY CREATE TABLE `EVENTS_WAITS_HISTORY` (
+ `THREAD_ID` int(11) NOT NULL,
+ `EVENT_ID` bigint(20) unsigned NOT NULL,
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `SOURCE` varchar(64) DEFAULT NULL,
+ `TIMER_START` bigint(20) unsigned DEFAULT NULL,
+ `TIMER_END` bigint(20) unsigned DEFAULT NULL,
+ `TIMER_WAIT` bigint(20) unsigned DEFAULT NULL,
+ `SPINS` int(10) unsigned DEFAULT NULL,
+ `OBJECT_SCHEMA` varchar(64) DEFAULT NULL,
+ `OBJECT_NAME` varchar(512) DEFAULT NULL,
+ `OBJECT_TYPE` varchar(64) DEFAULT NULL,
+ `OBJECT_INSTANCE_BEGIN` bigint(20) NOT NULL,
+ `NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
+ `OPERATION` varchar(16) NOT NULL,
+ `NUMBER_OF_BYTES` bigint(20) unsigned DEFAULT NULL,
+ `FLAGS` int(10) unsigned DEFAULT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table EVENTS_WAITS_HISTORY_LONG;
+Table Create Table
+EVENTS_WAITS_HISTORY_LONG CREATE TABLE `EVENTS_WAITS_HISTORY_LONG` (
+ `THREAD_ID` int(11) NOT NULL,
+ `EVENT_ID` bigint(20) unsigned NOT NULL,
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `SOURCE` varchar(64) DEFAULT NULL,
+ `TIMER_START` bigint(20) unsigned DEFAULT NULL,
+ `TIMER_END` bigint(20) unsigned DEFAULT NULL,
+ `TIMER_WAIT` bigint(20) unsigned DEFAULT NULL,
+ `SPINS` int(10) unsigned DEFAULT NULL,
+ `OBJECT_SCHEMA` varchar(64) DEFAULT NULL,
+ `OBJECT_NAME` varchar(512) DEFAULT NULL,
+ `OBJECT_TYPE` varchar(64) DEFAULT NULL,
+ `OBJECT_INSTANCE_BEGIN` bigint(20) NOT NULL,
+ `NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
+ `OPERATION` varchar(16) NOT NULL,
+ `NUMBER_OF_BYTES` bigint(20) unsigned DEFAULT NULL,
+ `FLAGS` int(10) unsigned DEFAULT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+Table Create Table
+EVENTS_WAITS_SUMMARY_BY_EVENT_NAME CREATE TABLE `EVENTS_WAITS_SUMMARY_BY_EVENT_NAME` (
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `COUNT_STAR` bigint(20) unsigned NOT NULL,
+ `SUM_TIMER_WAIT` bigint(20) unsigned NOT NULL,
+ `MIN_TIMER_WAIT` bigint(20) unsigned NOT NULL,
+ `AVG_TIMER_WAIT` bigint(20) unsigned NOT NULL,
+ `MAX_TIMER_WAIT` bigint(20) unsigned NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+Table Create Table
+EVENTS_WAITS_SUMMARY_BY_INSTANCE CREATE TABLE `EVENTS_WAITS_SUMMARY_BY_INSTANCE` (
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `OBJECT_INSTANCE_BEGIN` bigint(20) NOT NULL,
+ `COUNT_STAR` bigint(20) unsigned NOT NULL,
+ `SUM_TIMER_WAIT` bigint(20) unsigned NOT NULL,
+ `MIN_TIMER_WAIT` bigint(20) unsigned NOT NULL,
+ `AVG_TIMER_WAIT` bigint(20) unsigned NOT NULL,
+ `MAX_TIMER_WAIT` bigint(20) unsigned NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+Table Create Table
+EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME CREATE TABLE `EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME` (
+ `THREAD_ID` int(11) NOT NULL,
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `COUNT_STAR` bigint(20) unsigned NOT NULL,
+ `SUM_TIMER_WAIT` bigint(20) unsigned NOT NULL,
+ `MIN_TIMER_WAIT` bigint(20) unsigned NOT NULL,
+ `AVG_TIMER_WAIT` bigint(20) unsigned NOT NULL,
+ `MAX_TIMER_WAIT` bigint(20) unsigned NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table FILE_INSTANCES;
+Table Create Table
+FILE_INSTANCES CREATE TABLE `FILE_INSTANCES` (
+ `FILE_NAME` varchar(512) NOT NULL,
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `OPEN_COUNT` int(10) unsigned NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table FILE_SUMMARY_BY_EVENT_NAME;
+Table Create Table
+FILE_SUMMARY_BY_EVENT_NAME CREATE TABLE `FILE_SUMMARY_BY_EVENT_NAME` (
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `COUNT_READ` bigint(20) unsigned NOT NULL,
+ `COUNT_WRITE` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_READ` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_WRITE` bigint(20) unsigned NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table FILE_SUMMARY_BY_INSTANCE;
+Table Create Table
+FILE_SUMMARY_BY_INSTANCE CREATE TABLE `FILE_SUMMARY_BY_INSTANCE` (
+ `FILE_NAME` varchar(512) NOT NULL,
+ `EVENT_NAME` varchar(128) NOT NULL,
+ `COUNT_READ` bigint(20) unsigned NOT NULL,
+ `COUNT_WRITE` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_READ` bigint(20) unsigned NOT NULL,
+ `SUM_NUMBER_OF_BYTES_WRITE` bigint(20) unsigned NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table MUTEX_INSTANCES;
+Table Create Table
+MUTEX_INSTANCES CREATE TABLE `MUTEX_INSTANCES` (
+ `NAME` varchar(128) NOT NULL,
+ `OBJECT_INSTANCE_BEGIN` bigint(20) NOT NULL,
+ `LOCKED_BY_THREAD_ID` int(11) DEFAULT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table PERFORMANCE_TIMERS;
+Table Create Table
+PERFORMANCE_TIMERS CREATE TABLE `PERFORMANCE_TIMERS` (
+ `TIMER_NAME` enum('CYCLE','NANOSECOND','MICROSECOND','MILLISECOND','TICK') NOT NULL,
+ `TIMER_FREQUENCY` bigint(20) DEFAULT NULL,
+ `TIMER_RESOLUTION` bigint(20) DEFAULT NULL,
+ `TIMER_OVERHEAD` bigint(20) DEFAULT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table PROCESSLIST;
+Table Create Table
+PROCESSLIST CREATE TABLE `PROCESSLIST` (
+ `THREAD_ID` int(11) NOT NULL,
+ `ID` int(11) NOT NULL,
+ `NAME` varchar(64) NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table RWLOCK_INSTANCES;
+Table Create Table
+RWLOCK_INSTANCES CREATE TABLE `RWLOCK_INSTANCES` (
+ `NAME` varchar(128) NOT NULL,
+ `OBJECT_INSTANCE_BEGIN` bigint(20) NOT NULL,
+ `WRITE_LOCKED_BY_THREAD_ID` int(11) DEFAULT NULL,
+ `READ_LOCKED_BY_COUNT` int(10) unsigned NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table SETUP_CONSUMERS;
+Table Create Table
+SETUP_CONSUMERS CREATE TABLE `SETUP_CONSUMERS` (
+ `NAME` varchar(64) NOT NULL,
+ `ENABLED` enum('YES','NO') NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table SETUP_INSTRUMENTS;
+Table Create Table
+SETUP_INSTRUMENTS CREATE TABLE `SETUP_INSTRUMENTS` (
+ `NAME` varchar(128) NOT NULL,
+ `ENABLED` enum('YES','NO') NOT NULL,
+ `TIMED` enum('YES','NO') NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table SETUP_OBJECTS;
+Table Create Table
+SETUP_OBJECTS CREATE TABLE `SETUP_OBJECTS` (
+ `OBJECT_TYPE` varchar(64) DEFAULT NULL,
+ `OBJECT_SCHEMA` varchar(64) DEFAULT NULL,
+ `OBJECT_NAME` varchar(64) DEFAULT NULL,
+ `ENABLED` enum('YES','NO') NOT NULL,
+ `TIMED` enum('YES','NO') NOT NULL,
+ `AGGREGATED` enum('YES','NO') NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
+show create table SETUP_TIMERS;
+Table Create Table
+SETUP_TIMERS CREATE TABLE `SETUP_TIMERS` (
+ `NAME` varchar(64) NOT NULL,
+ `TIMER_NAME` enum('CYCLE','NANOSECOND','MICROSECOND','MILLISECOND','TICK') NOT NULL
+) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8
diff --git a/mysql-test/suite/perfschema/r/selects.result b/mysql-test/suite/perfschema/r/selects.result
new file mode 100644
index 00000000000..b5bef207303
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/selects.result
@@ -0,0 +1,97 @@
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES', timed = 'YES';
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (id INT PRIMARY KEY, b CHAR(100) DEFAULT 'initial value')
+ENGINE=MyISAM;
+INSERT INTO t1 (id) VALUES (1), (2), (3), (4), (5), (6), (7), (8);
+SELECT OPERATION, SUM(NUMBER_OF_BYTES) AS TOTAL
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+GROUP BY OPERATION
+HAVING TOTAL IS NOT NULL
+ORDER BY OPERATION
+LIMIT 1;
+OPERATION TOTAL
+chsize [NUM_BYTES]
+SELECT EVENT_ID FROM performance_schema.EVENTS_WAITS_CURRENT
+WHERE THREAD_ID IN
+(SELECT THREAD_ID FROM performance_schema.PROCESSLIST)
+AND EVENT_NAME IN
+(SELECT NAME FROM performance_schema.SETUP_INSTRUMENTS
+WHERE NAME LIKE "wait/synch/%")
+LIMIT 1;
+EVENT_ID
+[EVENT_ID]
+SELECT DISTINCT EVENT_ID
+FROM performance_schema.EVENTS_WAITS_CURRENT
+JOIN performance_schema.EVENTS_WAITS_HISTORY USING (EVENT_ID)
+JOIN performance_schema.EVENTS_WAITS_HISTORY_LONG USING (EVENT_ID)
+ORDER BY EVENT_ID
+LIMIT 1;
+EVENT_ID
+[EVENT_ID]
+SELECT t1.THREAD_ID, t2.EVENT_ID, t3.EVENT_NAME, t4.TIMER_WAIT
+FROM performance_schema.EVENTS_WAITS_HISTORY t1
+JOIN performance_schema.EVENTS_WAITS_HISTORY t2 USING (EVENT_ID)
+JOIN performance_schema.EVENTS_WAITS_HISTORY t3 ON (t2.THREAD_ID = t3.THREAD_ID)
+JOIN performance_schema.EVENTS_WAITS_HISTORY t4 ON (t3.EVENT_NAME = t4.EVENT_NAME)
+ORDER BY t1.EVENT_ID, t2.EVENT_ID
+LIMIT 5;
+THREAD_ID EVENT_ID EVENT_NAME TIMER_WAIT
+[THREAD_ID] [EVENT_ID] [EVENT_NAME] [TIMER_WAIT]
+[THREAD_ID] [EVENT_ID] [EVENT_NAME] [TIMER_WAIT]
+[THREAD_ID] [EVENT_ID] [EVENT_NAME] [TIMER_WAIT]
+[THREAD_ID] [EVENT_ID] [EVENT_NAME] [TIMER_WAIT]
+[THREAD_ID] [EVENT_ID] [EVENT_NAME] [TIMER_WAIT]
+SELECT THREAD_ID, EVENT_ID FROM (
+SELECT THREAD_ID, EVENT_ID FROM performance_schema.EVENTS_WAITS_CURRENT
+UNION
+SELECT THREAD_ID, EVENT_ID FROM performance_schema.EVENTS_WAITS_HISTORY
+UNION
+SELECT THREAD_ID, EVENT_ID FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+) t1 ORDER BY THREAD_ID, EVENT_ID
+LIMIT 5;
+THREAD_ID EVENT_ID
+[THREAD_ID] [EVENT_ID]
+[THREAD_ID] [EVENT_ID]
+[THREAD_ID] [EVENT_ID]
+[THREAD_ID] [EVENT_ID]
+[THREAD_ID] [EVENT_ID]
+CREATE EVENT t_ps_event
+ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 SECOND
+DO SELECT DISTINCT EVENT_ID
+FROM performance_schema.EVENTS_WAITS_CURRENT
+JOIN performance_schema.EVENTS_WAITS_HISTORY USING (EVENT_ID)
+ORDER BY EVENT_ID
+LIMIT 1;
+ALTER TABLE t1 ADD COLUMN c INT;
+CREATE TRIGGER t_ps_trigger BEFORE INSERT ON t1
+FOR EACH ROW BEGIN
+SET NEW.c = (SELECT MAX(EVENT_ID)
+FROM performance_schema.EVENTS_WAITS_CURRENT);
+END;
+|
+INSERT INTO t1 (id) VALUES (11), (12), (13);
+SELECT id, c FROM t1 WHERE id > 10 ORDER BY c;
+id c
+11 [EVENT_ID]
+12 [EVENT_ID]
+13 [EVENT_ID]
+DROP TRIGGER t_ps_trigger;
+CREATE PROCEDURE t_ps_proc(IN tid INT, OUT pid INT)
+BEGIN
+SELECT id FROM performance_schema.PROCESSLIST
+WHERE THREAD_ID = tid INTO pid;
+END;
+|
+CALL t_ps_proc(0, @p_id);
+CREATE FUNCTION t_ps_func(tid INT) RETURNS int
+BEGIN
+return (SELECT id FROM performance_schema.PROCESSLIST
+WHERE THREAD_ID = tid);
+END;
+|
+SELECT t_ps_func(0) = @p_id;
+t_ps_func(0) = @p_id
+1
+DROP PROCEDURE t_ps_proc;
+DROP FUNCTION t_ps_func;
+DROP TABLE t1;
diff --git a/mysql-test/suite/perfschema/r/server_init.result b/mysql-test/suite/perfschema/r/server_init.result
new file mode 100644
index 00000000000..ac340f8eb67
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/server_init.result
@@ -0,0 +1,233 @@
+use performance_schema;
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/mysys/THR_LOCK_threads";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/mysys/THR_LOCK_malloc";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/mysys/THR_LOCK_open";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/mysys/THR_LOCK_isam";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/mysys/THR_LOCK_myisam";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/mysys/THR_LOCK_heap";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/mysys/THR_LOCK_net";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/mysys/THR_LOCK_charset";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/mysys/THR_LOCK_time";
+count(name)
+1
+select count(name) from COND_INSTANCES
+where name like "wait/synch/cond/mysys/THR_COND_threads";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_mysql_create_db";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_open";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_lock_db";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_thread_count";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_mapped_file";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_status";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_error_log";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_delayed_insert";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_uuid_generator";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_delayed_status";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_delayed_create";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_crypt";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_slave_list";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_active_mi";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_manager";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_global_read_lock";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_global_system_variables";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_user_conn";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_prepared_stmt_count";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_connection_count";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_server_started";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_rpl_status";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOG_INFO::lock";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/Query_cache::structure_guard_mutex";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/Event_scheduler::LOCK_scheduler_state";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_event_metadata";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_event_queue";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_user_locks";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/Cversion_lock";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_xid_cache";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_plugin";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/LOCK_gdl";
+count(name)
+1
+select count(name) from MUTEX_INSTANCES
+where name like "wait/synch/mutex/sql/tz_LOCK";
+count(name)
+1
+select count(name) from RWLOCK_INSTANCES
+where name like "wait/synch/rwlock/sql/LOCK_grant";
+count(name)
+1
+select count(name) from RWLOCK_INSTANCES
+where name like "wait/synch/rwlock/sql/LOCK_sys_init_connect";
+count(name)
+1
+select count(name) from RWLOCK_INSTANCES
+where name like "wait/synch/rwlock/sql/LOCK_sys_init_slave";
+count(name)
+1
+select count(name) from RWLOCK_INSTANCES
+where name like "wait/synch/rwlock/sql/LOCK_system_variables_hash";
+count(name)
+1
+select count(name) from COND_INSTANCES
+where name like "wait/synch/cond/sql/COND_server_started";
+count(name)
+1
+select count(name) from COND_INSTANCES
+where name like "wait/synch/cond/sql/COND_refresh";
+count(name)
+1
+select count(name) from COND_INSTANCES
+where name like "wait/synch/cond/sql/COND_thread_count";
+count(name)
+1
+select count(name) from COND_INSTANCES
+where name like "wait/synch/cond/sql/COND_manager";
+count(name)
+1
+select count(name) from COND_INSTANCES
+where name like "wait/synch/cond/sql/COND_global_read_lock";
+count(name)
+1
+select count(name) from COND_INSTANCES
+where name like "wait/synch/cond/sql/COND_thread_cache";
+count(name)
+1
+select count(name) from COND_INSTANCES
+where name like "wait/synch/cond/sql/COND_flush_thread_cache";
+count(name)
+1
+select count(name) from COND_INSTANCES
+where name like "wait/synch/cond/sql/COND_rpl_status";
+count(name)
+1
+select count(name) from COND_INSTANCES
+where name like "wait/synch/cond/sql/Query_cache::COND_cache_status_changed";
+count(name)
+1
+select count(name) from COND_INSTANCES
+where name like "wait/synch/cond/sql/Event_scheduler::COND_state";
+count(name)
+1
+select count(name) from COND_INSTANCES
+where name like "wait/synch/cond/sql/COND_queue_state";
+count(name)
+1
diff --git a/mysql-test/suite/perfschema/r/start_server_no_cond_class.result b/mysql-test/suite/perfschema/r/start_server_no_cond_class.result
new file mode 100644
index 00000000000..d6089139d5a
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_cond_class.result
@@ -0,0 +1,74 @@
+show databases;
+Database
+information_schema
+mtr
+mysql
+performance_schema
+test
+select count(*) from performance_schema.PERFORMANCE_TIMERS;
+count(*)
+5
+select count(*) from performance_schema.SETUP_CONSUMERS;
+count(*)
+8
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+select count(*) from performance_schema.SETUP_TIMERS;
+count(*)
+1
+select * from performance_schema.COND_INSTANCES;
+select * from performance_schema.EVENTS_WAITS_CURRENT;
+select * from performance_schema.EVENTS_WAITS_HISTORY;
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+select * from performance_schema.FILE_INSTANCES;
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+select * from performance_schema.MUTEX_INSTANCES;
+select * from performance_schema.PERFORMANCE_TIMERS;
+select * from performance_schema.PROCESSLIST;
+select * from performance_schema.RWLOCK_INSTANCES;
+select * from performance_schema.SETUP_CONSUMERS;
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_OBJECTS;
+select * from performance_schema.SETUP_TIMERS;
+show variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_max_cond_classes 0
+performance_schema_max_cond_instances 1000
+performance_schema_max_file_classes 50
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_mutex_classes 200
+performance_schema_max_mutex_instances 1000
+performance_schema_max_rwlock_classes 20
+performance_schema_max_rwlock_instances 1000
+performance_schema_max_table_handles 100000
+performance_schema_max_table_instances 50000
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 1000
+show engine PERFORMANCE_SCHEMA status;
+show status like "performance_schema%";
+show variables like "performance_schema_max_cond_classes";
+Variable_name Value
+performance_schema_max_cond_classes 0
+select count(*) from performance_schema.SETUP_INSTRUMENTS
+where name like "wait/synch/cond/%";
+count(*)
+0
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_COND_CLASSES_LOST';
+variable_value > 0
+1
+select count(*) from performance_schema.COND_INSTANCES;
+count(*)
+0
+show status like "performance_schema_cond_instances_lost";
+Variable_name Value
+Performance_schema_cond_instances_lost 0
diff --git a/mysql-test/suite/perfschema/r/start_server_no_cond_inst.result b/mysql-test/suite/perfschema/r/start_server_no_cond_inst.result
new file mode 100644
index 00000000000..eaa04c7629d
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_cond_inst.result
@@ -0,0 +1,77 @@
+show databases;
+Database
+information_schema
+mtr
+mysql
+performance_schema
+test
+select count(*) from performance_schema.PERFORMANCE_TIMERS;
+count(*)
+5
+select count(*) from performance_schema.SETUP_CONSUMERS;
+count(*)
+8
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+select count(*) from performance_schema.SETUP_TIMERS;
+count(*)
+1
+select * from performance_schema.COND_INSTANCES;
+select * from performance_schema.EVENTS_WAITS_CURRENT;
+select * from performance_schema.EVENTS_WAITS_HISTORY;
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+select * from performance_schema.FILE_INSTANCES;
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+select * from performance_schema.MUTEX_INSTANCES;
+select * from performance_schema.PERFORMANCE_TIMERS;
+select * from performance_schema.PROCESSLIST;
+select * from performance_schema.RWLOCK_INSTANCES;
+select * from performance_schema.SETUP_CONSUMERS;
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_OBJECTS;
+select * from performance_schema.SETUP_TIMERS;
+show variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_max_cond_classes 80
+performance_schema_max_cond_instances 0
+performance_schema_max_file_classes 50
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_mutex_classes 200
+performance_schema_max_mutex_instances 1000
+performance_schema_max_rwlock_classes 20
+performance_schema_max_rwlock_instances 1000
+performance_schema_max_table_handles 100000
+performance_schema_max_table_instances 50000
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 1000
+show engine PERFORMANCE_SCHEMA status;
+show status like "performance_schema%";
+show variables like "performance_schema_max_cond_classes";
+Variable_name Value
+performance_schema_max_cond_classes 80
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS
+where name like "wait/synch/cond/%";
+count(*) > 0
+1
+show status like "performance_schema_cond_classes_lost";
+Variable_name Value
+Performance_schema_cond_classes_lost 0
+show variables like "performance_schema_max_cond_instances";
+Variable_name Value
+performance_schema_max_cond_instances 0
+select count(*) from performance_schema.COND_INSTANCES;
+count(*)
+0
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_COND_INSTANCES_LOST';
+variable_value > 0
+1
diff --git a/mysql-test/suite/perfschema/r/start_server_no_file_class.result b/mysql-test/suite/perfschema/r/start_server_no_file_class.result
new file mode 100644
index 00000000000..d68ec00a456
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_file_class.result
@@ -0,0 +1,74 @@
+show databases;
+Database
+information_schema
+mtr
+mysql
+performance_schema
+test
+select count(*) from performance_schema.PERFORMANCE_TIMERS;
+count(*)
+5
+select count(*) from performance_schema.SETUP_CONSUMERS;
+count(*)
+8
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+select count(*) from performance_schema.SETUP_TIMERS;
+count(*)
+1
+select * from performance_schema.COND_INSTANCES;
+select * from performance_schema.EVENTS_WAITS_CURRENT;
+select * from performance_schema.EVENTS_WAITS_HISTORY;
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+select * from performance_schema.FILE_INSTANCES;
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+select * from performance_schema.MUTEX_INSTANCES;
+select * from performance_schema.PERFORMANCE_TIMERS;
+select * from performance_schema.PROCESSLIST;
+select * from performance_schema.RWLOCK_INSTANCES;
+select * from performance_schema.SETUP_CONSUMERS;
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_OBJECTS;
+select * from performance_schema.SETUP_TIMERS;
+show variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_max_cond_classes 80
+performance_schema_max_cond_instances 1000
+performance_schema_max_file_classes 0
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_mutex_classes 200
+performance_schema_max_mutex_instances 1000
+performance_schema_max_rwlock_classes 20
+performance_schema_max_rwlock_instances 1000
+performance_schema_max_table_handles 100000
+performance_schema_max_table_instances 50000
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 1000
+show engine PERFORMANCE_SCHEMA status;
+show status like "performance_schema%";
+show variables like "performance_schema_max_file_classes";
+Variable_name Value
+performance_schema_max_file_classes 0
+select count(*) from performance_schema.SETUP_INSTRUMENTS
+where name like "wait/io/file/%";
+count(*)
+0
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_FILE_CLASSES_LOST';
+variable_value > 0
+1
+select count(*) from performance_schema.FILE_INSTANCES;
+count(*)
+0
+show status like "performance_schema_file_instances_lost";
+Variable_name Value
+Performance_schema_file_instances_lost 0
diff --git a/mysql-test/suite/perfschema/r/start_server_no_file_inst.result b/mysql-test/suite/perfschema/r/start_server_no_file_inst.result
new file mode 100644
index 00000000000..258712ebf68
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_file_inst.result
@@ -0,0 +1,77 @@
+show databases;
+Database
+information_schema
+mtr
+mysql
+performance_schema
+test
+select count(*) from performance_schema.PERFORMANCE_TIMERS;
+count(*)
+5
+select count(*) from performance_schema.SETUP_CONSUMERS;
+count(*)
+8
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+select count(*) from performance_schema.SETUP_TIMERS;
+count(*)
+1
+select * from performance_schema.COND_INSTANCES;
+select * from performance_schema.EVENTS_WAITS_CURRENT;
+select * from performance_schema.EVENTS_WAITS_HISTORY;
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+select * from performance_schema.FILE_INSTANCES;
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+select * from performance_schema.MUTEX_INSTANCES;
+select * from performance_schema.PERFORMANCE_TIMERS;
+select * from performance_schema.PROCESSLIST;
+select * from performance_schema.RWLOCK_INSTANCES;
+select * from performance_schema.SETUP_CONSUMERS;
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_OBJECTS;
+select * from performance_schema.SETUP_TIMERS;
+show variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_max_cond_classes 80
+performance_schema_max_cond_instances 1000
+performance_schema_max_file_classes 50
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 0
+performance_schema_max_mutex_classes 200
+performance_schema_max_mutex_instances 1000
+performance_schema_max_rwlock_classes 20
+performance_schema_max_rwlock_instances 1000
+performance_schema_max_table_handles 100000
+performance_schema_max_table_instances 50000
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 1000
+show engine PERFORMANCE_SCHEMA status;
+show status like "performance_schema%";
+show variables like "performance_schema_max_file_classes";
+Variable_name Value
+performance_schema_max_file_classes 50
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS
+where name like "wait/io/file/%";
+count(*) > 0
+1
+show status like "performance_schema_file_classes_lost";
+Variable_name Value
+Performance_schema_file_classes_lost 0
+show variables like "performance_schema_max_file_instances";
+Variable_name Value
+performance_schema_max_file_instances 0
+select count(*) from performance_schema.FILE_INSTANCES;
+count(*)
+0
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_FILE_INSTANCES_LOST';
+variable_value > 0
+1
diff --git a/mysql-test/suite/perfschema/r/start_server_no_mutex_class.result b/mysql-test/suite/perfschema/r/start_server_no_mutex_class.result
new file mode 100644
index 00000000000..d221cb2c22a
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_mutex_class.result
@@ -0,0 +1,74 @@
+show databases;
+Database
+information_schema
+mtr
+mysql
+performance_schema
+test
+select count(*) from performance_schema.PERFORMANCE_TIMERS;
+count(*)
+5
+select count(*) from performance_schema.SETUP_CONSUMERS;
+count(*)
+8
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+select count(*) from performance_schema.SETUP_TIMERS;
+count(*)
+1
+select * from performance_schema.COND_INSTANCES;
+select * from performance_schema.EVENTS_WAITS_CURRENT;
+select * from performance_schema.EVENTS_WAITS_HISTORY;
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+select * from performance_schema.FILE_INSTANCES;
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+select * from performance_schema.MUTEX_INSTANCES;
+select * from performance_schema.PERFORMANCE_TIMERS;
+select * from performance_schema.PROCESSLIST;
+select * from performance_schema.RWLOCK_INSTANCES;
+select * from performance_schema.SETUP_CONSUMERS;
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_OBJECTS;
+select * from performance_schema.SETUP_TIMERS;
+show variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_max_cond_classes 80
+performance_schema_max_cond_instances 1000
+performance_schema_max_file_classes 50
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_mutex_classes 0
+performance_schema_max_mutex_instances 1000
+performance_schema_max_rwlock_classes 20
+performance_schema_max_rwlock_instances 1000
+performance_schema_max_table_handles 100000
+performance_schema_max_table_instances 50000
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 1000
+show engine PERFORMANCE_SCHEMA status;
+show status like "performance_schema%";
+show variables like "performance_schema_max_mutex_classes";
+Variable_name Value
+performance_schema_max_mutex_classes 0
+select count(*) from performance_schema.SETUP_INSTRUMENTS
+where name like "wait/synch/mutex/%";
+count(*)
+0
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_MUTEX_CLASSES_LOST';
+variable_value > 0
+1
+select count(*) from performance_schema.MUTEX_INSTANCES;
+count(*)
+0
+show status like "performance_schema_mutex_instances_lost";
+Variable_name Value
+Performance_schema_mutex_instances_lost 0
diff --git a/mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result b/mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result
new file mode 100644
index 00000000000..adfd4c5ec17
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result
@@ -0,0 +1,77 @@
+show databases;
+Database
+information_schema
+mtr
+mysql
+performance_schema
+test
+select count(*) from performance_schema.PERFORMANCE_TIMERS;
+count(*)
+5
+select count(*) from performance_schema.SETUP_CONSUMERS;
+count(*)
+8
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+select count(*) from performance_schema.SETUP_TIMERS;
+count(*)
+1
+select * from performance_schema.COND_INSTANCES;
+select * from performance_schema.EVENTS_WAITS_CURRENT;
+select * from performance_schema.EVENTS_WAITS_HISTORY;
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+select * from performance_schema.FILE_INSTANCES;
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+select * from performance_schema.MUTEX_INSTANCES;
+select * from performance_schema.PERFORMANCE_TIMERS;
+select * from performance_schema.PROCESSLIST;
+select * from performance_schema.RWLOCK_INSTANCES;
+select * from performance_schema.SETUP_CONSUMERS;
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_OBJECTS;
+select * from performance_schema.SETUP_TIMERS;
+show variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_max_cond_classes 80
+performance_schema_max_cond_instances 1000
+performance_schema_max_file_classes 50
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_mutex_classes 200
+performance_schema_max_mutex_instances 0
+performance_schema_max_rwlock_classes 20
+performance_schema_max_rwlock_instances 1000
+performance_schema_max_table_handles 100000
+performance_schema_max_table_instances 50000
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 1000
+show engine PERFORMANCE_SCHEMA status;
+show status like "performance_schema%";
+show variables like "performance_schema_max_mutex_classes";
+Variable_name Value
+performance_schema_max_mutex_classes 200
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS
+where name like "wait/synch/mutex/%";
+count(*) > 0
+1
+show status like "performance_schema_mutex_classes_lost";
+Variable_name Value
+Performance_schema_mutex_classes_lost 0
+show variables like "performance_schema_max_mutex_instances";
+Variable_name Value
+performance_schema_max_mutex_instances 0
+select count(*) from performance_schema.MUTEX_INSTANCES;
+count(*)
+0
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_MUTEX_INSTANCES_LOST';
+variable_value > 0
+1
diff --git a/mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result b/mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result
new file mode 100644
index 00000000000..5248becf0e5
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result
@@ -0,0 +1,74 @@
+show databases;
+Database
+information_schema
+mtr
+mysql
+performance_schema
+test
+select count(*) from performance_schema.PERFORMANCE_TIMERS;
+count(*)
+5
+select count(*) from performance_schema.SETUP_CONSUMERS;
+count(*)
+8
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+select count(*) from performance_schema.SETUP_TIMERS;
+count(*)
+1
+select * from performance_schema.COND_INSTANCES;
+select * from performance_schema.EVENTS_WAITS_CURRENT;
+select * from performance_schema.EVENTS_WAITS_HISTORY;
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+select * from performance_schema.FILE_INSTANCES;
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+select * from performance_schema.MUTEX_INSTANCES;
+select * from performance_schema.PERFORMANCE_TIMERS;
+select * from performance_schema.PROCESSLIST;
+select * from performance_schema.RWLOCK_INSTANCES;
+select * from performance_schema.SETUP_CONSUMERS;
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_OBJECTS;
+select * from performance_schema.SETUP_TIMERS;
+show variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_max_cond_classes 80
+performance_schema_max_cond_instances 1000
+performance_schema_max_file_classes 50
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_mutex_classes 200
+performance_schema_max_mutex_instances 1000
+performance_schema_max_rwlock_classes 0
+performance_schema_max_rwlock_instances 1000
+performance_schema_max_table_handles 100000
+performance_schema_max_table_instances 50000
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 1000
+show engine PERFORMANCE_SCHEMA status;
+show status like "performance_schema%";
+show variables like "performance_schema_max_rwlock_classes";
+Variable_name Value
+performance_schema_max_rwlock_classes 0
+select count(*) from performance_schema.SETUP_INSTRUMENTS
+where name like "wait/synch/rwlock/%";
+count(*)
+0
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_RWLOCK_CLASSES_LOST';
+variable_value > 0
+1
+select count(*) from performance_schema.RWLOCK_INSTANCES;
+count(*)
+0
+show status like "performance_schema_rwlock_instances_lost";
+Variable_name Value
+Performance_schema_rwlock_instances_lost 0
diff --git a/mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result b/mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result
new file mode 100644
index 00000000000..e7a94c4a60d
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result
@@ -0,0 +1,77 @@
+show databases;
+Database
+information_schema
+mtr
+mysql
+performance_schema
+test
+select count(*) from performance_schema.PERFORMANCE_TIMERS;
+count(*)
+5
+select count(*) from performance_schema.SETUP_CONSUMERS;
+count(*)
+8
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+select count(*) from performance_schema.SETUP_TIMERS;
+count(*)
+1
+select * from performance_schema.COND_INSTANCES;
+select * from performance_schema.EVENTS_WAITS_CURRENT;
+select * from performance_schema.EVENTS_WAITS_HISTORY;
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+select * from performance_schema.FILE_INSTANCES;
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+select * from performance_schema.MUTEX_INSTANCES;
+select * from performance_schema.PERFORMANCE_TIMERS;
+select * from performance_schema.PROCESSLIST;
+select * from performance_schema.RWLOCK_INSTANCES;
+select * from performance_schema.SETUP_CONSUMERS;
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_OBJECTS;
+select * from performance_schema.SETUP_TIMERS;
+show variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_max_cond_classes 80
+performance_schema_max_cond_instances 1000
+performance_schema_max_file_classes 50
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_mutex_classes 200
+performance_schema_max_mutex_instances 1000
+performance_schema_max_rwlock_classes 20
+performance_schema_max_rwlock_instances 0
+performance_schema_max_table_handles 100000
+performance_schema_max_table_instances 50000
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 1000
+show engine PERFORMANCE_SCHEMA status;
+show status like "performance_schema%";
+show variables like "performance_schema_max_rwlock_classes";
+Variable_name Value
+performance_schema_max_rwlock_classes 20
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS
+where name like "wait/synch/rwlock/%";
+count(*) > 0
+1
+show status like "performance_schema_rwlock_classes_lost";
+Variable_name Value
+Performance_schema_rwlock_classes_lost 0
+show variables like "performance_schema_max_rwlock_instances";
+Variable_name Value
+performance_schema_max_rwlock_instances 0
+select count(*) from performance_schema.RWLOCK_INSTANCES;
+count(*)
+0
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_RWLOCK_INSTANCES_LOST';
+variable_value > 0
+1
diff --git a/mysql-test/suite/perfschema/r/start_server_no_thread_class.result b/mysql-test/suite/perfschema/r/start_server_no_thread_class.result
new file mode 100644
index 00000000000..92f1ec29b38
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_thread_class.result
@@ -0,0 +1,74 @@
+show databases;
+Database
+information_schema
+mtr
+mysql
+performance_schema
+test
+select count(*) from performance_schema.PERFORMANCE_TIMERS;
+count(*)
+5
+select count(*) from performance_schema.SETUP_CONSUMERS;
+count(*)
+8
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+select count(*) from performance_schema.SETUP_TIMERS;
+count(*)
+1
+select * from performance_schema.COND_INSTANCES;
+select * from performance_schema.EVENTS_WAITS_CURRENT;
+select * from performance_schema.EVENTS_WAITS_HISTORY;
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+select * from performance_schema.FILE_INSTANCES;
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+select * from performance_schema.MUTEX_INSTANCES;
+select * from performance_schema.PERFORMANCE_TIMERS;
+select * from performance_schema.PROCESSLIST;
+select * from performance_schema.RWLOCK_INSTANCES;
+select * from performance_schema.SETUP_CONSUMERS;
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_OBJECTS;
+select * from performance_schema.SETUP_TIMERS;
+show variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_max_cond_classes 80
+performance_schema_max_cond_instances 1000
+performance_schema_max_file_classes 50
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_mutex_classes 200
+performance_schema_max_mutex_instances 1000
+performance_schema_max_rwlock_classes 20
+performance_schema_max_rwlock_instances 1000
+performance_schema_max_table_handles 100000
+performance_schema_max_table_instances 50000
+performance_schema_max_thread_classes 0
+performance_schema_max_thread_instances 1000
+show engine PERFORMANCE_SCHEMA status;
+show status like "performance_schema%";
+show variables like "performance_schema_max_thread_classes";
+Variable_name Value
+performance_schema_max_thread_classes 0
+select count(*) from performance_schema.SETUP_INSTRUMENTS
+where name like "thread/%";
+count(*)
+0
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_THREAD_CLASSES_LOST';
+variable_value > 0
+1
+select count(*) from performance_schema.PROCESSLIST;
+count(*)
+0
+show status like "performance_schema_thread_instances_lost";
+Variable_name Value
+Performance_schema_thread_instances_lost 0
diff --git a/mysql-test/suite/perfschema/r/start_server_no_thread_inst.result b/mysql-test/suite/perfschema/r/start_server_no_thread_inst.result
new file mode 100644
index 00000000000..3ecf7fe98db
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_no_thread_inst.result
@@ -0,0 +1,73 @@
+show databases;
+Database
+information_schema
+mtr
+mysql
+performance_schema
+test
+select count(*) from performance_schema.PERFORMANCE_TIMERS;
+count(*)
+5
+select count(*) from performance_schema.SETUP_CONSUMERS;
+count(*)
+8
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+select count(*) from performance_schema.SETUP_TIMERS;
+count(*)
+1
+select * from performance_schema.COND_INSTANCES;
+select * from performance_schema.EVENTS_WAITS_CURRENT;
+select * from performance_schema.EVENTS_WAITS_HISTORY;
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+select * from performance_schema.FILE_INSTANCES;
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+select * from performance_schema.MUTEX_INSTANCES;
+select * from performance_schema.PERFORMANCE_TIMERS;
+select * from performance_schema.PROCESSLIST;
+select * from performance_schema.RWLOCK_INSTANCES;
+select * from performance_schema.SETUP_CONSUMERS;
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_OBJECTS;
+select * from performance_schema.SETUP_TIMERS;
+show variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_max_cond_classes 80
+performance_schema_max_cond_instances 1000
+performance_schema_max_file_classes 50
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_mutex_classes 200
+performance_schema_max_mutex_instances 1000
+performance_schema_max_rwlock_classes 20
+performance_schema_max_rwlock_instances 1000
+performance_schema_max_table_handles 100000
+performance_schema_max_table_instances 50000
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 0
+show engine PERFORMANCE_SCHEMA status;
+show status like "performance_schema%";
+show variables like "performance_schema_max_thread_classes";
+Variable_name Value
+performance_schema_max_thread_classes 50
+show status like "performance_schema_thread_classes_lost";
+Variable_name Value
+Performance_schema_thread_classes_lost 0
+show variables like "performance_schema_max_thread_instances";
+Variable_name Value
+performance_schema_max_thread_instances 0
+select count(*) from performance_schema.PROCESSLIST;
+count(*)
+0
+select variable_value > 0 from information_schema.global_status
+where variable_name like 'PERFORMANCE_SCHEMA_THREAD_INSTANCES_LOST';
+variable_value > 0
+1
diff --git a/mysql-test/suite/perfschema/r/start_server_off.result b/mysql-test/suite/perfschema/r/start_server_off.result
new file mode 100644
index 00000000000..4ce5aa75ce7
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_off.result
@@ -0,0 +1,73 @@
+show databases;
+Database
+information_schema
+mtr
+mysql
+performance_schema
+test
+select count(*) from performance_schema.PERFORMANCE_TIMERS;
+count(*)
+5
+select count(*) from performance_schema.SETUP_CONSUMERS;
+count(*)
+8
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+0
+select count(*) from performance_schema.SETUP_TIMERS;
+count(*)
+1
+select * from performance_schema.COND_INSTANCES;
+select * from performance_schema.EVENTS_WAITS_CURRENT;
+select * from performance_schema.EVENTS_WAITS_HISTORY;
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+select * from performance_schema.FILE_INSTANCES;
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+select * from performance_schema.MUTEX_INSTANCES;
+select * from performance_schema.PERFORMANCE_TIMERS;
+select * from performance_schema.PROCESSLIST;
+select * from performance_schema.RWLOCK_INSTANCES;
+select * from performance_schema.SETUP_CONSUMERS;
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_OBJECTS;
+select * from performance_schema.SETUP_TIMERS;
+show variables like "performance_schema%";
+Variable_name Value
+performance_schema OFF
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_max_cond_classes 80
+performance_schema_max_cond_instances 1000
+performance_schema_max_file_classes 50
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_mutex_classes 200
+performance_schema_max_mutex_instances 1000
+performance_schema_max_rwlock_classes 20
+performance_schema_max_rwlock_instances 1000
+performance_schema_max_table_handles 100000
+performance_schema_max_table_instances 50000
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 1000
+show engine PERFORMANCE_SCHEMA status;
+show status like "performance_schema%";
+show status like "performance_schema%";
+Variable_name Value
+Performance_schema_cond_classes_lost 0
+Performance_schema_cond_instances_lost 0
+Performance_schema_file_classes_lost 0
+Performance_schema_file_handles_lost 0
+Performance_schema_file_instances_lost 0
+Performance_schema_locker_lost 0
+Performance_schema_mutex_classes_lost 0
+Performance_schema_mutex_instances_lost 0
+Performance_schema_rwlock_classes_lost 0
+Performance_schema_rwlock_instances_lost 0
+Performance_schema_table_handles_lost 0
+Performance_schema_table_instances_lost 0
+Performance_schema_thread_classes_lost 0
+Performance_schema_thread_instances_lost 0
diff --git a/mysql-test/suite/perfschema/r/start_server_on.result b/mysql-test/suite/perfschema/r/start_server_on.result
new file mode 100644
index 00000000000..1d9dc731c7b
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/start_server_on.result
@@ -0,0 +1,73 @@
+show databases;
+Database
+information_schema
+mtr
+mysql
+performance_schema
+test
+select count(*) from performance_schema.PERFORMANCE_TIMERS;
+count(*)
+5
+select count(*) from performance_schema.SETUP_CONSUMERS;
+count(*)
+8
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS;
+count(*) > 0
+1
+select count(*) from performance_schema.SETUP_TIMERS;
+count(*)
+1
+select * from performance_schema.COND_INSTANCES;
+select * from performance_schema.EVENTS_WAITS_CURRENT;
+select * from performance_schema.EVENTS_WAITS_HISTORY;
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+select * from performance_schema.FILE_INSTANCES;
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+select * from performance_schema.MUTEX_INSTANCES;
+select * from performance_schema.PERFORMANCE_TIMERS;
+select * from performance_schema.PROCESSLIST;
+select * from performance_schema.RWLOCK_INSTANCES;
+select * from performance_schema.SETUP_CONSUMERS;
+select * from performance_schema.SETUP_INSTRUMENTS;
+select * from performance_schema.SETUP_OBJECTS;
+select * from performance_schema.SETUP_TIMERS;
+show variables like "performance_schema%";
+Variable_name Value
+performance_schema ON
+performance_schema_events_waits_history_long_size 10000
+performance_schema_events_waits_history_size 10
+performance_schema_max_cond_classes 80
+performance_schema_max_cond_instances 1000
+performance_schema_max_file_classes 50
+performance_schema_max_file_handles 32768
+performance_schema_max_file_instances 10000
+performance_schema_max_mutex_classes 200
+performance_schema_max_mutex_instances 1000
+performance_schema_max_rwlock_classes 20
+performance_schema_max_rwlock_instances 1000
+performance_schema_max_table_handles 100000
+performance_schema_max_table_instances 50000
+performance_schema_max_thread_classes 50
+performance_schema_max_thread_instances 1000
+show engine PERFORMANCE_SCHEMA status;
+show status like "performance_schema%";
+show status like "performance_schema%";
+Variable_name Value
+Performance_schema_cond_classes_lost 0
+Performance_schema_cond_instances_lost 0
+Performance_schema_file_classes_lost 0
+Performance_schema_file_handles_lost 0
+Performance_schema_file_instances_lost 0
+Performance_schema_locker_lost 0
+Performance_schema_mutex_classes_lost 0
+Performance_schema_mutex_instances_lost 0
+Performance_schema_rwlock_classes_lost 0
+Performance_schema_rwlock_instances_lost 0
+Performance_schema_table_handles_lost 0
+Performance_schema_table_instances_lost 0
+Performance_schema_thread_classes_lost 0
+Performance_schema_thread_instances_lost 0
diff --git a/mysql-test/suite/perfschema/r/tampered_perfschema_table1.result b/mysql-test/suite/perfschema/r/tampered_perfschema_table1.result
new file mode 100644
index 00000000000..cdf0029eeb9
--- /dev/null
+++ b/mysql-test/suite/perfschema/r/tampered_perfschema_table1.result
@@ -0,0 +1,6 @@
+call mtr.add_suppression(
+"Column count of mysql.SETUP_INSTRUMENTS is wrong. "
+"Expected 4, found 3. The table is probably corrupted");
+select * from performance_schema.SETUP_INSTRUMENTS limit 1;
+ERROR HY000: Native table 'performance_schema'.'SETUP_INSTRUMENTS' has the wrong structure
+select * from performance_schema.SETUP_CONSUMERS limit 1;
diff --git a/mysql-test/suite/perfschema/t/aggregate.test b/mysql-test/suite/perfschema/t/aggregate.test
new file mode 100644
index 00000000000..7c01bdd0a4b
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/aggregate.test
@@ -0,0 +1,187 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+# Verify that statistics aggregated by different criteria are consistent.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--echo "General cleanup"
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+update performance_schema.SETUP_INSTRUMENTS set enabled = 'NO';
+update performance_schema.SETUP_CONSUMERS set enabled = 'NO';
+
+# Cleanup statistics
+truncate table performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+truncate table performance_schema.FILE_SUMMARY_BY_INSTANCE;
+truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+
+# Start recording data
+update performance_schema.SETUP_CONSUMERS set enabled = 'YES';
+update performance_schema.SETUP_INSTRUMENTS
+ set enabled = 'YES', timed = 'YES';
+
+
+create table t1 (
+ id INT PRIMARY KEY,
+ b CHAR(100) DEFAULT 'initial value')
+ ENGINE=MyISAM;
+
+insert into t1 (id) values (1), (2), (3), (4), (5), (6), (7), (8);
+
+# Stop recording data, so the select below don't add noise.
+update performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO';
+
+# Helper to debug
+set @dump_all=FALSE;
+
+# Note that in general:
+# - COUNT/SUM/MAX(FILE_SUMMARY_BY_EVENT_NAME) >=
+# COUNT/SUM/MAX(FILE_SUMMARY_BY_INSTANCE).
+# - MIN(FILE_SUMMARY_BY_EVENT_NAME) <=
+# MIN(FILE_SUMMARY_BY_INSTANCE).
+# There will be equality only when file instances are not removed,
+# aka when a file is not deleted from the file system,
+# because doing so removes a row in FILE_SUMMARY_BY_INSTANCE.
+
+# Likewise:
+# - COUNT/SUM/MAX(EVENTS_WAITS_SUMMARY_BY_EVENT_NAME) >=
+# COUNT/SUM/MAX(EVENTS_WAITS_SUMMARY_BY_INSTANCE)
+# - MIN(EVENTS_WAITS_SUMMARY_BY_EVENT_NAME) <=
+# MIN(EVENTS_WAITS_SUMMARY_BY_INSTANCE)
+# There will be equality only when an instrument instance
+# is not removed, which is next to impossible to predictably guarantee
+# in the server.
+# For example, a MyISAM table removed from the table cache
+# will cause a mysql_mutex_destroy on myisam/MYISAM_SHARE::intern_lock.
+# Another example, a thread terminating will cause a mysql_mutex_destroy
+# on sql/LOCK_delete
+# Both cause a row to be deleted from EVENTS_WAITS_SUMMARY_BY_INSTANCE.
+
+# Likewise:
+# - COUNT/SUM/MAX(EVENTS_WAITS_SUMMARY_BY_EVENT_NAME) >=
+# COUNT/SUM/MAX(EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME)
+# - MIN(EVENTS_WAITS_SUMMARY_BY_EVENT_NAME) <=
+# MIN(EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME)
+# There will be equality only when no thread is removed,
+# that is if no thread disconnects, or no sub thread (for example insert
+# delayed) ever completes.
+# A thread completing will cause rows in
+# EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME to be removed.
+
+--echo "Verifying file aggregate consistency"
+
+# Since the code generating the load in this test does:
+# - create table
+# - insert
+# - does not cause temporary tables to be used
+# we can test for equality here for file aggregates.
+
+# If any of these queries returns data, the test failed.
+
+SELECT EVENT_NAME, e.COUNT_READ, SUM(i.COUNT_READ)
+FROM performance_schema.FILE_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.FILE_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.COUNT_READ <> SUM(i.COUNT_READ))
+OR @dump_all;
+
+SELECT EVENT_NAME, e.COUNT_WRITE, SUM(i.COUNT_WRITE)
+FROM performance_schema.FILE_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.FILE_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.COUNT_WRITE <> SUM(i.COUNT_WRITE))
+OR @dump_all;
+
+SELECT EVENT_NAME, e.SUM_NUMBER_OF_BYTES_READ, SUM(i.SUM_NUMBER_OF_BYTES_READ)
+FROM performance_schema.FILE_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.FILE_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.SUM_NUMBER_OF_BYTES_READ <> SUM(i.SUM_NUMBER_OF_BYTES_READ))
+OR @dump_all;
+
+SELECT EVENT_NAME, e.SUM_NUMBER_OF_BYTES_WRITE, SUM(i.SUM_NUMBER_OF_BYTES_WRITE)
+FROM performance_schema.FILE_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.FILE_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.SUM_NUMBER_OF_BYTES_WRITE <> SUM(i.SUM_NUMBER_OF_BYTES_WRITE))
+OR @dump_all;
+
+--echo "Verifying waits aggregate consistency (instance)"
+
+SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(i.SUM_TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.SUM_TIMER_WAIT <> SUM(i.SUM_TIMER_WAIT))
+OR @dump_all;
+
+SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(i.MIN_TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.MIN_TIMER_WAIT <> MIN(i.MIN_TIMER_WAIT))
+AND (MIN(i.MIN_TIMER_WAIT) != 0)
+OR @dump_all;
+
+SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(i.MAX_TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE AS i USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.MAX_TIMER_WAIT <> MAX(i.MAX_TIMER_WAIT))
+OR @dump_all;
+
+--echo "Verifying waits aggregate consistency (thread)"
+
+SELECT EVENT_NAME, e.SUM_TIMER_WAIT, SUM(t.SUM_TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t
+USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.SUM_TIMER_WAIT <> SUM(t.SUM_TIMER_WAIT))
+OR @dump_all;
+
+SELECT EVENT_NAME, e.MIN_TIMER_WAIT, MIN(t.MIN_TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t
+USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.MIN_TIMER_WAIT <> MIN(t.MIN_TIMER_WAIT))
+AND (MIN(t.MIN_TIMER_WAIT) != 0)
+OR @dump_all;
+
+SELECT EVENT_NAME, e.MAX_TIMER_WAIT, MAX(t.MAX_TIMER_WAIT)
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME AS e
+JOIN performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME AS t
+USING (EVENT_NAME)
+GROUP BY EVENT_NAME
+HAVING (e.MAX_TIMER_WAIT <> MAX(t.MAX_TIMER_WAIT))
+OR @dump_all;
+
+
+# Cleanup
+
+update performance_schema.SETUP_CONSUMERS set enabled = 'YES';
+update performance_schema.SETUP_INSTRUMENTS
+ set enabled = 'YES', timed = 'YES';
+
+drop table test.t1;
diff --git a/mysql-test/suite/perfschema/t/bad_option_1.test b/mysql-test/suite/perfschema/t/bad_option_1.test
new file mode 100644
index 00000000000..9962f327093
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/bad_option_1.test
@@ -0,0 +1,45 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+# Check error handling for invalid server start options
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--error 7
+--exec $MYSQLD_BOOTSTRAP_CMD --loose-console --performance-schema-enabled=maybe > $MYSQLTEST_VARDIR/tmp/bad_option_1.txt 2>&1
+
+perl;
+ use strict;
+ use warnings;
+ my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/bad_option_1.txt";
+ open(FILE, "<", $fname) or die;
+ my @lines= <FILE>;
+ # those must be in the file for the test to pass
+ my @patterns=
+ ("unknown variable 'performance-schema-enabled=maybe'",
+ "Aborting");
+ foreach my $one_line (@lines)
+ {
+ foreach my $one_pattern (@patterns)
+ {
+ # print pattern, not line, to get a stable output
+ print "Found: $one_pattern\n" if ($one_line =~ /$one_pattern/);
+ }
+ }
+ close FILE;
+EOF
+
diff --git a/mysql-test/suite/perfschema/t/bad_option_2.test b/mysql-test/suite/perfschema/t/bad_option_2.test
new file mode 100644
index 00000000000..a8d15764864
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/bad_option_2.test
@@ -0,0 +1,44 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+# Check error handling for ambiguous server start options
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--error 3
+--exec $MYSQLD_BOOTSTRAP_CMD --loose-console --performance-schema-max_=12 > $MYSQLTEST_VARDIR/tmp/bad_option_2.txt 2>&1
+
+perl;
+ use strict;
+ use warnings;
+ my $fname= "$ENV{'MYSQLTEST_VARDIR'}/tmp/bad_option_2.txt";
+ open(FILE, "<", $fname) or die;
+ my @lines= <FILE>;
+ # those must be in the file for the test to pass
+ my @patterns=
+ ("ambiguous option '--performance-schema-max_=12'");
+ foreach my $one_line (@lines)
+ {
+ foreach my $one_pattern (@patterns)
+ {
+ # print pattern, not line, to get a stable output
+ print "Found: $one_pattern\n" if ($one_line =~ /$one_pattern/);
+ }
+ }
+ close FILE;
+EOF
+
diff --git a/mysql-test/suite/perfschema/t/binlog_mix.test b/mysql-test/suite/perfschema/t/binlog_mix.test
new file mode 100644
index 00000000000..4fe7d68b555
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/binlog_mix.test
@@ -0,0 +1,28 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/have_log_bin.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+# See Bug#46896 binlog: case sensitivity of table names
+--source include/have_lowercase0.inc
+
+set binlog_format=mixed;
+
+--source ../include/binlog_common.inc
+
diff --git a/mysql-test/suite/perfschema/t/binlog_row.test b/mysql-test/suite/perfschema/t/binlog_row.test
new file mode 100644
index 00000000000..c1c1e06d3f0
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/binlog_row.test
@@ -0,0 +1,28 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/have_log_bin.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+# See Bug#46896 binlog: case sensitivity of table names
+--source include/have_lowercase0.inc
+
+set binlog_format=row;
+
+--source ../include/binlog_common.inc
+
diff --git a/mysql-test/suite/perfschema/t/binlog_stmt.test b/mysql-test/suite/perfschema/t/binlog_stmt.test
new file mode 100644
index 00000000000..759c34634c8
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/binlog_stmt.test
@@ -0,0 +1,25 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/have_log_bin.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+set binlog_format=statement;
+
+--source ../include/binlog_common.inc
+
diff --git a/mysql-test/suite/perfschema/t/cnf_option.cnf b/mysql-test/suite/perfschema/t/cnf_option.cnf
new file mode 100644
index 00000000000..2892908fbb6
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/cnf_option.cnf
@@ -0,0 +1,25 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+# Check server start options, read from a .cnf file
+
+# Use default setting for mysqld processes
+!include include/default_mysqld.cnf
+
+[mysqld.1]
+loose-performance-schema-max-thread_instances=318
+loose-performance-schema-max-thread_classes=12
+
diff --git a/mysql-test/suite/perfschema/t/cnf_option.test b/mysql-test/suite/perfschema/t/cnf_option.test
new file mode 100644
index 00000000000..c968307ee00
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/cnf_option.test
@@ -0,0 +1,24 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+# Check server start options, read from a .cnf file
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+show variables like 'performance_schema_max_thread_classes';
+show variables like 'performance_schema_max_thread_instances';
+
diff --git a/mysql-test/suite/perfschema/t/column_privilege.test b/mysql-test/suite/perfschema/t/column_privilege.test
new file mode 100644
index 00000000000..b6bcbdb3396
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/column_privilege.test
@@ -0,0 +1,82 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+# Test how columns privileges can be used on performance schema tables,
+# for very fine control.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+show grants;
+
+grant usage on *.* to 'pfs_user_5'@localhost with GRANT OPTION;
+
+# Test per column privileges on performance_schema
+
+grant SELECT(thread_id, event_id) on performance_schema.EVENTS_WAITS_CURRENT
+ to 'pfs_user_5'@localhost;
+
+grant UPDATE(enabled) on performance_schema.SETUP_INSTRUMENTS
+ to 'pfs_user_5'@localhost;
+
+flush privileges;
+
+connect (con1, localhost, pfs_user_5, , );
+
+# Commented because the result is not consistent (uppercase/lowercase)
+# show grants;
+
+# For statements that works, we do not look at the output
+--disable_result_log
+
+select thread_id from performance_schema.EVENTS_WAITS_CURRENT;
+
+select thread_id, event_id from performance_schema.EVENTS_WAITS_CURRENT;
+
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+
+--enable_result_log
+
+# For statements that are denied, check the error number and error text.
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_COLUMNACCESS_DENIED_ERROR
+select event_name from performance_schema.EVENTS_WAITS_CURRENT;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_COLUMNACCESS_DENIED_ERROR
+select thread_id, event_id, event_name
+ from performance_schema.EVENTS_WAITS_CURRENT;
+
+--replace_result '\'setup_instruments' '\'SETUP_INSTRUMENTS'
+--error ER_COLUMNACCESS_DENIED_ERROR
+update performance_schema.SETUP_INSTRUMENTS set name='illegal';
+
+--replace_result '\'setup_instruments' '\'SETUP_INSTRUMENTS'
+--error ER_COLUMNACCESS_DENIED_ERROR
+update performance_schema.SETUP_INSTRUMENTS set timed='NO';
+
+# Cleanup
+
+--connection default
+--disconnect con1
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'pfs_user_5'@localhost;
+DROP USER 'pfs_user_5'@localhost;
+flush privileges;
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES', timed = 'YES';
+UPDATE performance_schema.SETUP_CONSUMERS SET enabled = 'YES';
+UPDATE performance_schema.SETUP_TIMERS SET timer_name = 'CYCLE';
+
diff --git a/mysql-test/suite/perfschema/t/ddl_cond_instances.test b/mysql-test/suite/perfschema/t/ddl_cond_instances.test
new file mode 100644
index 00000000000..e78429cb181
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_cond_instances.test
@@ -0,0 +1,32 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.COND_INSTANCES add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.COND_INSTANCES;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.COND_INSTANCES ADD INDEX test_index(NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.COND_INSTANCES(NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_events_waits_current.test b/mysql-test/suite/perfschema/t/ddl_events_waits_current.test
new file mode 100644
index 00000000000..34f735c1271
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_events_waits_current.test
@@ -0,0 +1,31 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.EVENTS_WAITS_CURRENT add column foo integer;
+
+truncate table performance_schema.EVENTS_WAITS_CURRENT;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.EVENTS_WAITS_CURRENT ADD INDEX test_index(EVENT_ID);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.EVENTS_WAITS_CURRENT(EVENT_ID);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_events_waits_history.test b/mysql-test/suite/perfschema/t/ddl_events_waits_history.test
new file mode 100644
index 00000000000..76ebe3d85c4
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_events_waits_history.test
@@ -0,0 +1,31 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.EVENTS_WAITS_HISTORY add column foo integer;
+
+truncate table performance_schema.EVENTS_WAITS_HISTORY;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.EVENTS_WAITS_HISTORY ADD INDEX test_index(EVENT_ID);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.EVENTS_WAITS_HISTORY(EVENT_ID);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_events_waits_history_long.test b/mysql-test/suite/perfschema/t/ddl_events_waits_history_long.test
new file mode 100644
index 00000000000..549c5d6880b
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_events_waits_history_long.test
@@ -0,0 +1,31 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.EVENTS_WAITS_HISTORY_LONG add column foo integer;
+
+truncate table performance_schema.EVENTS_WAITS_HISTORY_LONG;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG ADD INDEX test_index(EVENT_ID);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.EVENTS_WAITS_HISTORY_LONG(EVENT_ID);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_ews_by_event_name.test b/mysql-test/suite/perfschema/t/ddl_ews_by_event_name.test
new file mode 100644
index 00000000000..fbf2d2925a7
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_ews_by_event_name.test
@@ -0,0 +1,31 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME add column foo integer;
+
+truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME ADD INDEX test_index(EVENT_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME(EVENT_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_ews_by_instance.test b/mysql-test/suite/perfschema/t/ddl_ews_by_instance.test
new file mode 100644
index 00000000000..e6dad07fd63
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_ews_by_instance.test
@@ -0,0 +1,31 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE add column foo integer;
+
+truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE ADD INDEX test_index(EVENT_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE(EVENT_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_ews_by_thread_by_event_name.test b/mysql-test/suite/perfschema/t/ddl_ews_by_thread_by_event_name.test
new file mode 100644
index 00000000000..5b65ec26064
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_ews_by_thread_by_event_name.test
@@ -0,0 +1,33 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ add column foo integer;
+
+truncate table performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME ADD INDEX test_index(THREAD_ID);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index
+ ON performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME(THREAD_ID);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_file_instances.test b/mysql-test/suite/perfschema/t/ddl_file_instances.test
new file mode 100644
index 00000000000..a9c9a2a95b6
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_file_instances.test
@@ -0,0 +1,32 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.FILE_INSTANCES add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.FILE_INSTANCES;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.FILE_INSTANCES ADD INDEX test_index(FILE_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.FILE_INSTANCES(FILE_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_fs_by_event_name.test b/mysql-test/suite/perfschema/t/ddl_fs_by_event_name.test
new file mode 100644
index 00000000000..2581f07c0d2
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_fs_by_event_name.test
@@ -0,0 +1,31 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.FILE_SUMMARY_BY_EVENT_NAME add column foo integer;
+
+truncate table performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.FILE_SUMMARY_BY_EVENT_NAME ADD INDEX test_index(NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.FILE_SUMMARY_BY_EVENT_NAME(NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_fs_by_instance.test b/mysql-test/suite/perfschema/t/ddl_fs_by_instance.test
new file mode 100644
index 00000000000..e06ad2eb7cd
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_fs_by_instance.test
@@ -0,0 +1,31 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.FILE_SUMMARY_BY_INSTANCE add column foo integer;
+
+truncate table performance_schema.FILE_SUMMARY_BY_INSTANCE;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.FILE_SUMMARY_BY_INSTANCE ADD INDEX test_index(NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.FILE_SUMMARY_BY_INSTANCE(NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_mutex_instances.test b/mysql-test/suite/perfschema/t/ddl_mutex_instances.test
new file mode 100644
index 00000000000..6489a689620
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_mutex_instances.test
@@ -0,0 +1,32 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.MUTEX_INSTANCES add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.MUTEX_INSTANCES;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.MUTEX_INSTANCES ADD INDEX test_index(NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.MUTEX_INSTANCES(NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_performance_timers.test b/mysql-test/suite/perfschema/t/ddl_performance_timers.test
new file mode 100644
index 00000000000..b692291b8cf
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_performance_timers.test
@@ -0,0 +1,32 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.PERFORMANCE_TIMERS add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.PERFORMANCE_TIMERS;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.PERFORMANCE_TIMERS ADD INDEX test_index(TIMER_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.PERFORMANCE_TIMERS(TIMER_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_processlist.test b/mysql-test/suite/perfschema/t/ddl_processlist.test
new file mode 100644
index 00000000000..fb133b66e26
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_processlist.test
@@ -0,0 +1,32 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.PROCESSLIST add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.PROCESSLIST;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.PROCESSLIST ADD INDEX test_index(ID);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.PROCESSLIST(ID);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_rwlock_instances.test b/mysql-test/suite/perfschema/t/ddl_rwlock_instances.test
new file mode 100644
index 00000000000..c07cd1ede48
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_rwlock_instances.test
@@ -0,0 +1,32 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.RWLOCK_INSTANCES add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.RWLOCK_INSTANCES;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.RWLOCK_INSTANCES ADD INDEX test_index(NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.RWLOCK_INSTANCES(NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_setup_consumers.test b/mysql-test/suite/perfschema/t/ddl_setup_consumers.test
new file mode 100644
index 00000000000..c44db822145
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_setup_consumers.test
@@ -0,0 +1,33 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_result '\'setup_consumers' '\'SETUP_CONSUMERS'
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.SETUP_CONSUMERS add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.SETUP_CONSUMERS;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.SETUP_CONSUMERS ADD INDEX test_index(NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.SETUP_CONSUMERS(NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_setup_instruments.test b/mysql-test/suite/perfschema/t/ddl_setup_instruments.test
new file mode 100644
index 00000000000..c20c386447c
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_setup_instruments.test
@@ -0,0 +1,33 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_result '\'setup_instruments' '\'SETUP_INSTRUMENTS'
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.SETUP_INSTRUMENTS add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.SETUP_INSTRUMENTS;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.SETUP_INSTRUMENTS ADD INDEX test_index(NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.SETUP_INSTRUMENTS(NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_setup_objects.test b/mysql-test/suite/perfschema/t/ddl_setup_objects.test
new file mode 100644
index 00000000000..6ae6156ef00
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_setup_objects.test
@@ -0,0 +1,32 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_result '\'setup_objects' '\'SETUP_OBJECTS'
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.SETUP_OBJECTS add column foo integer;
+
+truncate table performance_schema.SETUP_OBJECTS;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.SETUP_OBJECTS ADD INDEX test_index(OBJECT_NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.SETUP_OBJECTS(OBJECT_NAME);
+
diff --git a/mysql-test/suite/perfschema/t/ddl_setup_timers.test b/mysql-test/suite/perfschema/t/ddl_setup_timers.test
new file mode 100644
index 00000000000..b9a5c32ecbe
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/ddl_setup_timers.test
@@ -0,0 +1,33 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_result '\'setup_timers' '\'SETUP_TIMERS'
+-- error ER_DBACCESS_DENIED_ERROR
+alter table performance_schema.SETUP_TIMERS add column foo integer;
+
+-- error ER_WRONG_PERFSCHEMA_USAGE
+truncate table performance_schema.SETUP_TIMERS;
+
+-- error ER_DBACCESS_DENIED_ERROR
+ALTER TABLE performance_schema.SETUP_TIMERS ADD INDEX test_index(NAME);
+
+-- error ER_DBACCESS_DENIED_ERROR
+CREATE UNIQUE INDEX test_index ON performance_schema.SETUP_TIMERS(NAME);
+
diff --git a/mysql-test/suite/perfschema/t/disabled.def b/mysql-test/suite/perfschema/t/disabled.def
new file mode 100644
index 00000000000..56bcf811ff6
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/disabled.def
@@ -0,0 +1,27 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+##############################################################################
+#
+# List the test cases that are to be disabled temporarily.
+#
+# Separate the test case name and the comment with ':'.
+#
+# <testcasename> : BUG#<xxxx> <date disabled> <disabler> <comment>
+#
+# Do not use any TAB characters for whitespace.
+#
+##############################################################################
+
diff --git a/mysql-test/suite/perfschema/t/dml_cond_instances.test b/mysql-test/suite/perfschema/t/dml_cond_instances.test
new file mode 100644
index 00000000000..1d1614db73f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_cond_instances.test
@@ -0,0 +1,55 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 1 # 2 #
+select * from performance_schema.COND_INSTANCES limit 1;
+
+select * from performance_schema.COND_INSTANCES
+ where name='FOO';
+
+--replace_result '\'cond_instances' '\'COND_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.COND_INSTANCES
+ set name='FOO', object_instance_begin=12;
+
+--replace_result '\'cond_instances' '\'COND_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.COND_INSTANCES
+ set name='FOO';
+
+--replace_result '\'cond_instances' '\'COND_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.COND_INSTANCES
+ where name like "wait/%";
+
+--replace_result '\'cond_instances' '\'COND_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.COND_INSTANCES;
+
+--replace_result '\'cond_instances' '\'COND_INSTANCES'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.COND_INSTANCES READ;
+UNLOCK TABLES;
+
+--replace_result '\'cond_instances' '\'COND_INSTANCES'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.COND_INSTANCES WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_events_waits_current.test b/mysql-test/suite/perfschema/t/dml_events_waits_current.test
new file mode 100644
index 00000000000..3a93b98cb57
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_events_waits_current.test
@@ -0,0 +1,62 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 12 # 14 #
+select * from performance_schema.EVENTS_WAITS_CURRENT
+ where event_name like 'Wait/Synch/%' limit 1;
+
+select * from performance_schema.EVENTS_WAITS_CURRENT
+ where event_name='FOO';
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.EVENTS_WAITS_CURRENT
+ set thread_id='1', event_id=1,
+ event_name='FOO', timer_start=1, timer_end=2, timer_wait=3;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.EVENTS_WAITS_CURRENT
+ set timer_start=12;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.EVENTS_WAITS_CURRENT
+ set timer_start=12 where thread_id=0;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.EVENTS_WAITS_CURRENT
+ where thread_id=1;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.EVENTS_WAITS_CURRENT;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.EVENTS_WAITS_CURRENT READ;
+UNLOCK TABLES;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.EVENTS_WAITS_CURRENT WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_events_waits_history.test b/mysql-test/suite/perfschema/t/dml_events_waits_history.test
new file mode 100644
index 00000000000..174ef2147d1
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_events_waits_history.test
@@ -0,0 +1,70 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 12 # 14 #
+select * from performance_schema.EVENTS_WAITS_HISTORY
+ where event_name like 'Wait/Synch/%' limit 1;
+
+select * from performance_schema.EVENTS_WAITS_HISTORY
+ where event_name='FOO';
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 12 # 14 #
+select * from performance_schema.EVENTS_WAITS_HISTORY
+ where event_name like 'Wait/Synch/%' order by timer_wait limit 1;
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 12 # 14 #
+select * from performance_schema.EVENTS_WAITS_HISTORY
+ where event_name like 'Wait/Synch/%' order by timer_wait desc limit 1;
+
+--replace_result '\'events_waits_history' '\'EVENTS_WAITS_HISTORY'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.EVENTS_WAITS_HISTORY
+ set thread_id='1', event_id=1,
+ event_name='FOO', timer_start=1, timer_end=2, timer_wait=3;
+
+--replace_result '\'events_waits_history' '\'EVENTS_WAITS_HISTORY'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.EVENTS_WAITS_HISTORY
+ set timer_start=12;
+
+--replace_result '\'events_waits_history' '\'EVENTS_WAITS_HISTORY'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.EVENTS_WAITS_HISTORY
+ set timer_start=12 where thread_id=0;
+
+--replace_result '\'events_waits_history' '\'EVENTS_WAITS_HISTORY'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.EVENTS_WAITS_HISTORY
+ where thread_id=1;
+
+--replace_result '\'events_waits_history' '\'EVENTS_WAITS_HISTORY'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.EVENTS_WAITS_HISTORY;
+
+--replace_result '\'events_waits_history' '\'EVENTS_WAITS_HISTORY'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.EVENTS_WAITS_HISTORY READ;
+UNLOCK TABLES;
+
+--replace_result '\'events_waits_history' '\'EVENTS_WAITS_HISTORY'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.EVENTS_WAITS_HISTORY WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_events_waits_history_long.test b/mysql-test/suite/perfschema/t/dml_events_waits_history_long.test
new file mode 100644
index 00000000000..73dc0aefd06
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_events_waits_history_long.test
@@ -0,0 +1,70 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 12 # 14 #
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG
+ where event_name like 'Wait/Synch/%' limit 1;
+
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG
+ where event_name='FOO';
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 12 # 14 #
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG
+ where event_name like 'Wait/Synch/%' order by timer_wait limit 1;
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 12 # 14 #
+select * from performance_schema.EVENTS_WAITS_HISTORY_LONG
+ where event_name like 'Wait/Synch/%' order by timer_wait desc limit 1;
+
+--replace_result '\'events_waits_history_long' '\'EVENTS_WAITS_HISTORY_LONG'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.EVENTS_WAITS_HISTORY_LONG
+ set thread_id='1', event_id=1,
+ event_name='FOO', timer_start=1, timer_end=2, timer_wait=3;
+
+--replace_result '\'events_waits_history_long' '\'EVENTS_WAITS_HISTORY_LONG'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.EVENTS_WAITS_HISTORY_LONG
+ set timer_start=12;
+
+--replace_result '\'events_waits_history_long' '\'EVENTS_WAITS_HISTORY_LONG'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.EVENTS_WAITS_HISTORY_LONG
+ set timer_start=12 where thread_id=0;
+
+--replace_result '\'events_waits_history_long' '\'EVENTS_WAITS_HISTORY_LONG'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.EVENTS_WAITS_HISTORY_LONG
+ where thread_id=1;
+
+--replace_result '\'events_waits_history_long' '\'EVENTS_WAITS_HISTORY_LONG'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+
+--replace_result '\'events_waits_history_long' '\'EVENTS_WAITS_HISTORY_LONG'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.EVENTS_WAITS_HISTORY_LONG READ;
+UNLOCK TABLES;
+
+--replace_result '\'events_waits_history_long' '\'EVENTS_WAITS_HISTORY_LONG'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.EVENTS_WAITS_HISTORY_LONG WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_ews_by_event_name.test b/mysql-test/suite/perfschema/t/dml_ews_by_event_name.test
new file mode 100644
index 00000000000..c1fddbe9f87
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_ews_by_event_name.test
@@ -0,0 +1,62 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 #
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+ where event_name like 'Wait/Synch/%' limit 1;
+
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+ where event_name='FOO';
+
+--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+ set event_name='FOO', count_star=1, sum_timer_wait=2, min_timer_wait=3,
+ avg_timer_wait=4, max_timer_wait=5;
+
+--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+ set count_star=12;
+
+--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+ set count_star=12 where event_name like "FOO";
+
+--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+ where count_star=1;
+
+--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+
+--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME READ;
+UNLOCK TABLES;
+
+--replace_result '\'events_waits_summary_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_EVENT_NAME'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_ews_by_instance.test b/mysql-test/suite/perfschema/t/dml_ews_by_instance.test
new file mode 100644
index 00000000000..4c386313bc5
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_ews_by_instance.test
@@ -0,0 +1,79 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 #
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+ where event_name like 'Wait/Synch/%' limit 1;
+
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+ where event_name='FOO';
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 #
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+ order by count_star limit 1;
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 #
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+ order by count_star desc limit 1;
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 #
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+ where min_timer_wait > 0 order by count_star limit 1;
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 #
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+ where min_timer_wait > 0 order by count_star desc limit 1;
+
+--replace_result '\'events_waits_summary_by_instance' '\'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+ set event_name='FOO', object_instance_begin=0,
+ count_star=1, sum_timer_wait=2, min_timer_wait=3,
+ avg_timer_wait=4, max_timer_wait=5;
+
+--replace_result '\'events_waits_summary_by_instance' '\'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+ set count_star=12;
+
+--replace_result '\'events_waits_summary_by_instance' '\'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+ set count_star=12 where event_name like "FOO";
+
+--replace_result '\'events_waits_summary_by_instance' '\'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE
+ where count_star=1;
+
+--replace_result '\'events_waits_summary_by_instance' '\'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+
+--replace_result '\'events_waits_summary_by_instance' '\'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE READ;
+UNLOCK TABLES;
+
+--replace_result '\'events_waits_summary_by_instance' '\'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_ews_by_thread_by_event_name.test b/mysql-test/suite/perfschema/t/dml_ews_by_thread_by_event_name.test
new file mode 100644
index 00000000000..ce29e59d014
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_ews_by_thread_by_event_name.test
@@ -0,0 +1,63 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 #
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ where event_name like 'Wait/Synch/%' limit 1;
+
+select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ where event_name='FOO';
+
+--replace_result '\'events_waits_summary_by_thread_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ set event_name='FOO', thread_id=1,
+ count_star=1, sum_timer_wait=2, min_timer_wait=3,
+ avg_timer_wait=4, max_timer_wait=5;
+
+--replace_result '\'events_waits_summary_by_thread_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ set count_star=12;
+
+--replace_result '\'events_waits_summary_by_thread_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ set count_star=12 where event_name like "FOO";
+
+--replace_result '\'events_waits_summary_by_thread_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME
+ where count_star=1;
+
+--replace_result '\'events_waits_summary_by_thread_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+
+--replace_result '\'events_waits_summary_by_thread_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME READ;
+UNLOCK TABLES;
+
+--replace_result '\'events_waits_summary_by_thread_by_event_name' '\'EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_file_instances.test b/mysql-test/suite/perfschema/t/dml_file_instances.test
new file mode 100644
index 00000000000..71a053c21be
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_file_instances.test
@@ -0,0 +1,55 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 1 # 2 # 3 #
+select * from performance_schema.FILE_INSTANCES limit 1;
+
+select * from performance_schema.FILE_INSTANCES
+ where file_name='FOO';
+
+--replace_result '\'file_instances' '\'FILE_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.FILE_INSTANCES
+ set file_name='FOO', event_name='BAR', open_count=12;
+
+--replace_result '\'file_instances' '\'FILE_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.FILE_INSTANCES
+ set file_name='FOO';
+
+--replace_result '\'file_instances' '\'FILE_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.FILE_INSTANCES
+ where event_name like "wait/%";
+
+--replace_result '\'file_instances' '\'FILE_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.FILE_INSTANCES;
+
+--replace_result '\'file_instances' '\'FILE_INSTANCES'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.FILE_INSTANCES READ;
+UNLOCK TABLES;
+
+--replace_result '\'file_instances' '\'FILE_INSTANCES'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.FILE_INSTANCES WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_file_summary_by_event_name.test b/mysql-test/suite/perfschema/t/dml_file_summary_by_event_name.test
new file mode 100644
index 00000000000..3753f581560
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_file_summary_by_event_name.test
@@ -0,0 +1,62 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 1 # 2 # 3 # 4 # 5 #
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME
+ where event_name like 'Wait/io/%' limit 1;
+
+select * from performance_schema.FILE_SUMMARY_BY_EVENT_NAME
+ where event_name='FOO';
+
+--replace_result '\'file_summary_by_event_name' '\'FILE_SUMMARY_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.FILE_SUMMARY_BY_EVENT_NAME
+ set event_name='FOO', count_read=1, count_write=2,
+ sum_number_of_bytes_read=4, sum_number_of_bytes_write=5;
+
+--replace_result '\'file_summary_by_event_name' '\'FILE_SUMMARY_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.FILE_SUMMARY_BY_EVENT_NAME
+ set count_read=12;
+
+--replace_result '\'file_summary_by_event_name' '\'FILE_SUMMARY_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.FILE_SUMMARY_BY_EVENT_NAME
+ set count_write=12 where event_name like "FOO";
+
+--replace_result '\'file_summary_by_event_name' '\'FILE_SUMMARY_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.FILE_SUMMARY_BY_EVENT_NAME
+ where count_read=1;
+
+--replace_result '\'file_summary_by_event_name' '\'FILE_SUMMARY_BY_EVENT_NAME'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.FILE_SUMMARY_BY_EVENT_NAME;
+
+--replace_result '\'file_summary_by_event_name' '\'FILE_SUMMARY_BY_EVENT_NAME'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.FILE_SUMMARY_BY_EVENT_NAME READ;
+UNLOCK TABLES;
+
+--replace_result '\'file_summary_by_event_name' '\'FILE_SUMMARY_BY_EVENT_NAME'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.FILE_SUMMARY_BY_EVENT_NAME WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_file_summary_by_instance.test b/mysql-test/suite/perfschema/t/dml_file_summary_by_instance.test
new file mode 100644
index 00000000000..07372af5f36
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_file_summary_by_instance.test
@@ -0,0 +1,62 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 1 # 2 # 3 # 4 # 5 # 6 #
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE
+ where event_name like 'Wait/io/%' limit 1;
+
+select * from performance_schema.FILE_SUMMARY_BY_INSTANCE
+ where event_name='FOO';
+
+--replace_result '\'file_summary_by_instance' '\'FILE_SUMMARY_BY_INSTANCE'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.FILE_SUMMARY_BY_INSTANCE
+ set event_name='FOO', count_read=1, count_write=2,
+ sum_number_of_bytes_read=4, sum_number_of_bytes_write=5;
+
+--replace_result '\'file_summary_by_instance' '\'FILE_SUMMARY_BY_INSTANCE'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.FILE_SUMMARY_BY_INSTANCE
+ set count_read=12;
+
+--replace_result '\'file_summary_by_instance' '\'FILE_SUMMARY_BY_INSTANCE'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.FILE_SUMMARY_BY_INSTANCE
+ set count_write=12 where event_name like "FOO";
+
+--replace_result '\'file_summary_by_instance' '\'FILE_SUMMARY_BY_INSTANCE'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.FILE_SUMMARY_BY_INSTANCE
+ where count_read=1;
+
+--replace_result '\'file_summary_by_instance' '\'FILE_SUMMARY_BY_INSTANCE'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.FILE_SUMMARY_BY_INSTANCE;
+
+--replace_result '\'file_summary_by_instance' '\'FILE_SUMMARY_BY_INSTANCE'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.FILE_SUMMARY_BY_INSTANCE READ;
+UNLOCK TABLES;
+
+--replace_result '\'file_summary_by_instance' '\'FILE_SUMMARY_BY_INSTANCE'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.FILE_SUMMARY_BY_INSTANCE WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_mutex_instances.test b/mysql-test/suite/perfschema/t/dml_mutex_instances.test
new file mode 100644
index 00000000000..e3062c7b34c
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_mutex_instances.test
@@ -0,0 +1,55 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 1 # 2 #
+select * from performance_schema.MUTEX_INSTANCES limit 1;
+
+select * from performance_schema.MUTEX_INSTANCES
+ where name='FOO';
+
+--replace_result '\'mutex_instances' '\'MUTEX_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.MUTEX_INSTANCES
+ set name='FOO', object_instance_begin=12;
+
+--replace_result '\'mutex_instances' '\'MUTEX_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.MUTEX_INSTANCES
+ set name='FOO';
+
+--replace_result '\'mutex_instances' '\'MUTEX_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.MUTEX_INSTANCES
+ where name like "wait/%";
+
+--replace_result '\'mutex_instances' '\'MUTEX_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.MUTEX_INSTANCES;
+
+--replace_result '\'mutex_instances' '\'MUTEX_INSTANCES'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.MUTEX_INSTANCES READ;
+UNLOCK TABLES;
+
+--replace_result '\'mutex_instances' '\'MUTEX_INSTANCES'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.MUTEX_INSTANCES WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_performance_timers.test b/mysql-test/suite/perfschema/t/dml_performance_timers.test
new file mode 100644
index 00000000000..9c2efb6f709
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_performance_timers.test
@@ -0,0 +1,57 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 2 <frequency> 3 <resolution> 4 <overhead>
+select * from performance_schema.PERFORMANCE_TIMERS;
+
+--replace_column 2 <frequency> 3 <resolution> 4 <overhead>
+select * from performance_schema.PERFORMANCE_TIMERS
+ where timer_name='CYCLE';
+
+--replace_result '\'performance_timers' '\'PERFORMANCE_TIMERS'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.PERFORMANCE_TIMERS
+ set timer_name='FOO', timer_frequency=1,
+ timer_resolution=2, timer_overhead=3;
+
+--replace_result '\'performance_timers' '\'PERFORMANCE_TIMERS'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.PERFORMANCE_TIMERS
+ set timer_frequency=12 where timer_name='CYCLE';
+
+--replace_result '\'performance_timers' '\'PERFORMANCE_TIMERS'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.PERFORMANCE_TIMERS;
+
+--replace_result '\'performance_timers' '\'PERFORMANCE_TIMERS'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.PERFORMANCE_TIMERS
+ where timer_name='CYCLE';
+
+--replace_result '\'performance_timers' '\'PERFORMANCE_TIMERS'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.PERFORMANCE_TIMERS READ;
+UNLOCK TABLES;
+
+--replace_result '\'performance_timers' '\'PERFORMANCE_TIMERS'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.PERFORMANCE_TIMERS WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_processlist.test b/mysql-test/suite/perfschema/t/dml_processlist.test
new file mode 100644
index 00000000000..6062b8481f0
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_processlist.test
@@ -0,0 +1,61 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 1 # 2 # 3 #
+select * from performance_schema.PROCESSLIST
+ where name like 'Thread/%' limit 1;
+
+select * from performance_schema.PROCESSLIST
+ where name='FOO';
+
+--replace_result '\'processlist' '\'PROCESSLIST'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.PROCESSLIST
+ set name='FOO', thread_id=1, id=2;
+
+--replace_result '\'processlist' '\'PROCESSLIST'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.PROCESSLIST
+ set thread_id=12;
+
+--replace_result '\'processlist' '\'PROCESSLIST'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.PROCESSLIST
+ set thread_id=12 where name like "FOO";
+
+--replace_result '\'processlist' '\'PROCESSLIST'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.PROCESSLIST
+ where id=1;
+
+--replace_result '\'processlist' '\'PROCESSLIST'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.PROCESSLIST;
+
+--replace_result '\'processlist' '\'PROCESSLIST'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.PROCESSLIST READ;
+UNLOCK TABLES;
+
+--replace_result '\'processlist' '\'PROCESSLIST'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.PROCESSLIST WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_rwlock_instances.test b/mysql-test/suite/perfschema/t/dml_rwlock_instances.test
new file mode 100644
index 00000000000..251168237eb
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_rwlock_instances.test
@@ -0,0 +1,55 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--replace_column 1 # 2 #
+select * from performance_schema.RWLOCK_INSTANCES limit 1;
+
+select * from performance_schema.RWLOCK_INSTANCES
+ where name='FOO';
+
+--replace_result '\'rwlock_instances' '\'RWLOCK_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.RWLOCK_INSTANCES
+ set name='FOO', object_instance_begin=12;
+
+--replace_result '\'rwlock_instances' '\'RWLOCK_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+update performance_schema.RWLOCK_INSTANCES
+ set name='FOO';
+
+--replace_result '\'rwlock_instances' '\'RWLOCK_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.RWLOCK_INSTANCES
+ where name like "wait/%";
+
+--replace_result '\'rwlock_instances' '\'RWLOCK_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.RWLOCK_INSTANCES;
+
+--replace_result '\'rwlock_instances' '\'RWLOCK_INSTANCES'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.RWLOCK_INSTANCES READ;
+UNLOCK TABLES;
+
+--replace_result '\'rwlock_instances' '\'RWLOCK_INSTANCES'
+-- error ER_TABLEACCESS_DENIED_ERROR
+LOCK TABLES performance_schema.RWLOCK_INSTANCES WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_setup_consumers.test b/mysql-test/suite/perfschema/t/dml_setup_consumers.test
new file mode 100644
index 00000000000..85b65864f91
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_setup_consumers.test
@@ -0,0 +1,59 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+select * from performance_schema.SETUP_CONSUMERS;
+
+select * from performance_schema.SETUP_CONSUMERS
+ where name='events_waits_current';
+
+select * from performance_schema.SETUP_CONSUMERS
+ where enabled='YES';
+
+select * from performance_schema.SETUP_CONSUMERS
+ where enabled='NO';
+
+--replace_result '\'setup_consumers' '\'SETUP_CONSUMERS'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.SETUP_CONSUMERS
+ set name='FOO', enabled='YES';
+
+--replace_result '\'setup_consumers' '\'SETUP_CONSUMERS'
+--error ER_WRONG_PERFSCHEMA_USAGE
+update performance_schema.SETUP_CONSUMERS
+ set name='FOO';
+
+update performance_schema.SETUP_CONSUMERS
+ set enabled='YES';
+
+--replace_result '\'setup_consumers' '\'SETUP_CONSUMERS'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.SETUP_CONSUMERS;
+
+--replace_result '\'setup_consumers' '\'SETUP_CONSUMERS'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.SETUP_CONSUMERS
+ where name='events_waits_current';
+
+LOCK TABLES performance_schema.SETUP_CONSUMERS READ;
+UNLOCK TABLES;
+
+LOCK TABLES performance_schema.SETUP_CONSUMERS WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_setup_instruments.test b/mysql-test/suite/perfschema/t/dml_setup_instruments.test
new file mode 100644
index 00000000000..f737160cebd
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_setup_instruments.test
@@ -0,0 +1,100 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+# The query result are not re producible,
+# due to variations in platforms and plugins
+# We still execute the select statement, for:
+# - code coverage
+# - make sure it does not crash
+# - valgrind coverage
+
+--disable_result_log
+select * from performance_schema.SETUP_INSTRUMENTS;
+--enable_result_log
+
+# DEBUG_SYNC::mutex is dependent on the build (DEBUG only)
+
+select * from performance_schema.SETUP_INSTRUMENTS
+ where name like 'Wait/Synch/Mutex/sql/%'
+ and name not in ('wait/synch/mutex/sql/DEBUG_SYNC::mutex')
+ order by name limit 10;
+
+select * from performance_schema.SETUP_INSTRUMENTS
+ where name like 'Wait/Synch/Rwlock/sql/%'
+ order by name limit 10;
+
+# COND_handler_count is dependent on the build (Windows only)
+# DEBUG_SYNC::cond is dependent on the build (DEBUG only)
+
+select * from performance_schema.SETUP_INSTRUMENTS
+ where name like 'Wait/Synch/Cond/sql/%'
+ and name not in (
+ 'wait/synch/cond/sql/COND_handler_count',
+ 'wait/synch/cond/sql/DEBUG_SYNC::cond')
+ order by name limit 10;
+
+--disable_result_log
+select * from performance_schema.SETUP_INSTRUMENTS
+ where name='Wait';
+--enable_result_log
+
+--disable_result_log
+select * from performance_schema.SETUP_INSTRUMENTS
+ where enabled='YES';
+--enable_result_log
+
+--replace_result '\'setup_instruments' '\'SETUP_INSTRUMENTS'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.SETUP_INSTRUMENTS
+ set name='FOO', enabled='YES', timed='YES';
+
+--replace_result '\'setup_instruments' '\'SETUP_INSTRUMENTS'
+--error ER_WRONG_PERFSCHEMA_USAGE
+update performance_schema.SETUP_INSTRUMENTS
+ set name='FOO';
+
+update performance_schema.SETUP_INSTRUMENTS
+ set enabled='NO';
+
+update performance_schema.SETUP_INSTRUMENTS
+ set timed='NO';
+
+--disable_result_log
+select * from performance_schema.SETUP_INSTRUMENTS;
+--enable_result_log
+
+update performance_schema.SETUP_INSTRUMENTS
+ set enabled='YES', timed='YES';
+
+--replace_result '\'setup_instruments' '\'SETUP_INSTRUMENTS'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.SETUP_INSTRUMENTS;
+
+--replace_result '\'setup_instruments' '\'SETUP_INSTRUMENTS'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.SETUP_INSTRUMENTS
+ where name like 'Wait/Synch/%';
+
+LOCK TABLES performance_schema.SETUP_INSTRUMENTS READ;
+UNLOCK TABLES;
+
+LOCK TABLES performance_schema.SETUP_INSTRUMENTS WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_setup_objects.test b/mysql-test/suite/perfschema/t/dml_setup_objects.test
new file mode 100644
index 00000000000..21fac64d924
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_setup_objects.test
@@ -0,0 +1,75 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+select * from performance_schema.SETUP_OBJECTS;
+
+select * from performance_schema.SETUP_OBJECTS
+ where object_type = 'TABLE';
+
+select * from performance_schema.SETUP_OBJECTS
+ where enabled='YES';
+
+# Not implemented yet
+--replace_result '\'setup_objects' '\'SETUP_OBJECTS'
+--error ER_ILLEGAL_HA
+insert into performance_schema.SETUP_OBJECTS
+ set object_type='TABLE', object_schema='FOO', object_name='BAR',
+ enabled='YES', timed='YES', aggregated='YES';
+
+# Not implemented yet
+# --error ER_ILLEGAL_HA
+update performance_schema.SETUP_OBJECTS
+ set object_type='TABLE';
+
+# Not implemented yet
+# --error ER_ILLEGAL_HA
+update performance_schema.SETUP_OBJECTS
+ set object_schema='ILLEGAL';
+
+# Not implemented yet
+# --error ER_ILLEGAL_HA
+update performance_schema.SETUP_OBJECTS
+ set object_name='ILLEGAL';
+
+update performance_schema.SETUP_OBJECTS
+ set enabled='NO';
+
+update performance_schema.SETUP_OBJECTS
+ set timed='NO';
+
+update performance_schema.SETUP_OBJECTS
+ set aggregated='NO';
+
+select * from performance_schema.SETUP_OBJECTS;
+
+update performance_schema.SETUP_OBJECTS
+ set enabled='YES', timed='YES', aggregated='YES';
+
+delete from performance_schema.SETUP_OBJECTS
+ where object_type = 'TABLE';
+
+delete from performance_schema.SETUP_OBJECTS;
+
+LOCK TABLES performance_schema.SETUP_OBJECTS READ;
+UNLOCK TABLES;
+
+LOCK TABLES performance_schema.SETUP_OBJECTS WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/dml_setup_timers.test b/mysql-test/suite/perfschema/t/dml_setup_timers.test
new file mode 100644
index 00000000000..5b5850db575
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/dml_setup_timers.test
@@ -0,0 +1,61 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+select * from performance_schema.SETUP_TIMERS;
+
+select * from performance_schema.SETUP_TIMERS
+ where name='Wait';
+
+select * from performance_schema.SETUP_TIMERS
+ where timer_name='CYCLE';
+
+--replace_result '\'setup_timers' '\'SETUP_TIMERS'
+--error ER_TABLEACCESS_DENIED_ERROR
+insert into performance_schema.SETUP_TIMERS
+ set name='FOO', timer_name='CYCLE';
+
+--replace_result '\'setup_timers' '\'SETUP_TIMERS'
+--error ER_WRONG_PERFSCHEMA_USAGE
+update performance_schema.SETUP_TIMERS
+ set name='FOO';
+
+update performance_schema.SETUP_TIMERS
+ set timer_name='MILLISECOND';
+
+select * from performance_schema.SETUP_TIMERS;
+
+update performance_schema.SETUP_TIMERS
+ set timer_name='CYCLE';
+
+--replace_result '\'setup_timers' '\'SETUP_TIMERS'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.SETUP_TIMERS;
+
+--replace_result '\'setup_timers' '\'SETUP_TIMERS'
+--error ER_TABLEACCESS_DENIED_ERROR
+delete from performance_schema.SETUP_TIMERS
+ where name='Wait';
+
+LOCK TABLES performance_schema.SETUP_TIMERS READ;
+UNLOCK TABLES;
+
+LOCK TABLES performance_schema.SETUP_TIMERS WRITE;
+UNLOCK TABLES;
+
diff --git a/mysql-test/suite/perfschema/t/func_file_io.test b/mysql-test/suite/perfschema/t/func_file_io.test
new file mode 100644
index 00000000000..4317f68d13b
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/func_file_io.test
@@ -0,0 +1,192 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+##
+## WL#4814, 4.1.4 FILE IO
+##
+## Functional testing of File IO
+##
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO', timed = 'YES';
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES'
+WHERE name LIKE 'wait/io/file/%';
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+#
+# TODO: Change to InnoDB when it gets instrumentation
+#
+
+CREATE TABLE t1 (id INT PRIMARY KEY, b CHAR(100) DEFAULT 'initial value')
+ENGINE=MyISAM;
+
+INSERT INTO t1 (id) VALUES (1), (2), (3), (4), (5), (6), (7), (8);
+
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+
+#
+# FF1: Count for file should increase with instrumentation enabled and
+# FF2: Count for file should not increase with instrumentation disabled
+#
+
+SELECT * FROM t1 WHERE id = 1;
+
+SET @before_count = (SELECT SUM(TIMER_WAIT)
+ FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+ WHERE (EVENT_NAME = 'wait/io/file/myisam/dfile')
+ AND (OBJECT_NAME LIKE '%t1.MYD'));
+
+SELECT IF(@before_count > 0, 'Success', 'Failure') has_instrumentation;
+
+SELECT * FROM t1 WHERE id < 4;
+
+SET @after_count = (SELECT SUM(TIMER_WAIT)
+ FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+ WHERE (EVENT_NAME = 'wait/io/file/myisam/dfile')
+ AND (OBJECT_NAME LIKE '%t1.MYD') AND (1 = 1));
+
+SELECT IF((@after_count - @before_count) > 0, 'Success', 'Failure') test_ff1_timed;
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled='NO';
+
+SET @before_count = (SELECT SUM(TIMER_WAIT)
+ FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+ WHERE (EVENT_NAME = 'wait/io/file/myisam/dfile')
+ AND (OBJECT_NAME LIKE '%t1.MYD') AND (2 = 2));
+
+SELECT * FROM t1 WHERE id < 6;
+
+SET @after_count = (SELECT SUM(TIMER_WAIT)
+ FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+ WHERE (EVENT_NAME = 'wait/io/file/myisam/dfile')
+ AND (OBJECT_NAME LIKE '%t1.MYD') AND (3 = 3));
+
+SELECT IF((COALESCE(@after_count, 0) - COALESCE(@before_count, 0)) = 0, 'Success', 'Failure') test_ff2_timed;
+
+#
+# Check not timed measurements
+#
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES'
+WHERE name LIKE 'wait/io/file/%';
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET timed = 'NO';
+
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+
+SELECT * FROM t1 WHERE id > 4;
+
+SELECT * FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+WHERE TIMER_WAIT != NULL
+ OR TIMER_START != NULL
+ OR TIMER_END != NULL;
+
+SELECT * FROM performance_schema.EVENTS_WAITS_HISTORY
+WHERE TIMER_WAIT != NULL
+ OR TIMER_START != NULL
+ OR TIMER_END != NULL;
+
+SELECT * FROM performance_schema.EVENTS_WAITS_CURRENT
+WHERE TIMER_WAIT != NULL
+ OR TIMER_START != NULL
+ OR TIMER_END != NULL;
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET timed = 'YES';
+
+SELECT * FROM t1 WHERE id < 4;
+
+DROP TABLE t1;
+
+#
+# FF4: Use-case from Enterprise Monitor
+#
+
+--disable_result_log
+SELECT SUM(COUNT_READ) AS sum_count_read,
+ SUM(COUNT_WRITE) AS sum_count_write,
+ SUM(SUM_NUMBER_OF_BYTES_READ) AS sum_num_bytes_read,
+ SUM(SUM_NUMBER_OF_BYTES_WRITE) AS sum_num_bytes_write
+FROM performance_schema.FILE_SUMMARY_BY_INSTANCE
+WHERE FILE_NAME LIKE CONCAT('%', @@tmpdir, '%') ORDER BY NULL;
+--enable_result_log
+
+#
+# FF5: Troubleshooting tasks
+#
+# These queries will give different results based on timing,
+# but at least they should not crash.
+#
+
+#
+# Total and average wait time for different events on system level
+#
+--disable_result_log
+SELECT EVENT_NAME, COUNT_STAR, AVG_TIMER_WAIT, SUM_TIMER_WAIT
+FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_EVENT_NAME
+WHERE COUNT_STAR > 0
+ORDER BY SUM_TIMER_WAIT DESC
+LIMIT 10;
+--enable_result_log
+
+#
+# Total and average wait time for different users
+#
+
+--disable_result_log
+SELECT i.user, SUM(TIMER_WAIT) SUM_WAIT
+# ((TIME_TO_SEC(TIMEDIFF(NOW(), i.startup_time)) * 1000) / SUM(TIMER_WAIT)) * 100 WAIT_PERCENTAGE
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
+INNER JOIN performance_schema.PROCESSLIST p USING (THREAD_ID)
+LEFT JOIN information_schema.PROCESSLIST i USING (ID)
+GROUP BY i.user
+ORDER BY SUM_WAIT DESC
+LIMIT 20;
+--enable_result_log
+
+#
+# Total and average wait times for different events for a session
+#
+--disable_result_log
+SELECT h.EVENT_NAME, SUM(h.TIMER_WAIT) TOTAL_WAIT
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
+INNER JOIN performance_schema.PROCESSLIST p USING (THREAD_ID)
+WHERE p.ID = 1
+GROUP BY h.EVENT_NAME
+HAVING TOTAL_WAIT > 0;
+--enable_result_log
+
+#
+# Which user reads and writes data
+#
+
+--disable_result_log
+SELECT i.user, h.operation, SUM(NUMBER_OF_BYTES) bytes
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG h
+INNER JOIN performance_schema.PROCESSLIST p USING (THREAD_ID)
+LEFT JOIN information_schema.PROCESSLIST i USING (ID)
+GROUP BY i.user, h.operation
+HAVING BYTES > 0
+ORDER BY i.user, h.operation;
+--enable_result_log
diff --git a/mysql-test/suite/perfschema/t/func_mutex.test b/mysql-test/suite/perfschema/t/func_mutex.test
new file mode 100644
index 00000000000..98cb905c67c
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/func_mutex.test
@@ -0,0 +1,131 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+##
+## WL#4818, 4.1.3 MUTEXES, RW-LOCKS, ...
+##
+## Functional testing of mutexes and RW-locks
+##
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO', timed = 'YES';
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES'
+WHERE name LIKE 'wait/synch/mutex/%'
+ OR name LIKE 'wait/synch/rwlock/%';
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+#
+# TODO: Change to InnoDB when it gets instrumentation
+#
+
+CREATE TABLE t1 (id INT PRIMARY KEY, b CHAR(100) DEFAULT 'initial value')
+ENGINE=MyISAM;
+
+INSERT INTO t1 (id) VALUES (1), (2), (3), (4), (5), (6), (7), (8);
+
+#
+# FM1: Count for mutex should increase with instrumentation enabled and
+# FM2: Count for mutex should not increase with instrumentation disabled
+#
+
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+
+SELECT * FROM t1 WHERE id = 1;
+
+SET @before_count = (SELECT SUM(TIMER_WAIT)
+ FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+ WHERE (EVENT_NAME = 'wait/synch/mutex/sql/LOCK_open'));
+
+SELECT * FROM t1;
+
+SET @after_count = (SELECT SUM(TIMER_WAIT)
+ FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+ WHERE (EVENT_NAME = 'wait/synch/mutex/sql/LOCK_open'));
+
+SELECT IF((@after_count - @before_count) > 0, 'Success', 'Failure') test_fm1_timed;
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO'
+WHERE NAME = 'wait/synch/mutex/sql/LOCK_open';
+
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+
+SELECT * FROM t1 WHERE id = 1;
+
+SET @before_count = (SELECT SUM(TIMER_WAIT)
+ FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+ WHERE (EVENT_NAME = 'wait/synch/mutex/sql/LOCK_open'));
+
+SELECT * FROM t1;
+
+SET @after_count = (SELECT SUM(TIMER_WAIT)
+ FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+ WHERE (EVENT_NAME = 'wait/synch/mutex/sql/LOCK_open'));
+
+SELECT IF((COALESCE(@after_count, 0) - COALESCE(@before_count, 0)) = 0, 'Success', 'Failure') test_fm2_timed;
+
+#
+# Repeat for RW-lock
+#
+
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+
+SELECT * FROM t1 WHERE id = 1;
+
+SET @before_count = (SELECT SUM(TIMER_WAIT)
+ FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+ WHERE (EVENT_NAME = 'wait/synch/rwlock/sql/LOCK_grant'));
+
+SELECT * FROM t1;
+
+SET @after_count = (SELECT SUM(TIMER_WAIT)
+ FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+ WHERE (EVENT_NAME = 'wait/synch/rwlock/sql/LOCK_grant'));
+
+SELECT IF((@after_count - @before_count) > 0, 'Success', 'Failure') test_fm1_rw_timed;
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO'
+WHERE NAME = 'wait/synch/rwlock/sql/LOCK_grant';
+
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+
+SELECT * FROM t1 WHERE id = 1;
+
+SET @before_count = (SELECT SUM(TIMER_WAIT)
+ FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+ WHERE (EVENT_NAME = 'wait/synch/rwlock/sql/LOCK_grant'));
+
+SELECT * FROM t1;
+
+SET @after_count = (SELECT SUM(TIMER_WAIT)
+ FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+ WHERE (EVENT_NAME = 'wait/synch/rwlock/sql/LOCK_grant'));
+
+SELECT IF((COALESCE(@after_count, 0) - COALESCE(@before_count, 0)) = 0, 'Success', 'Failure') test_fm2_rw_timed;
+
+DROP TABLE t1;
diff --git a/mysql-test/suite/perfschema/t/global_read_lock.test b/mysql-test/suite/perfschema/t/global_read_lock.test
new file mode 100644
index 00000000000..16971023cbb
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/global_read_lock.test
@@ -0,0 +1,90 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+#
+# Test the effect of a flush tables with read lock on SETUP_ tables.
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+use performance_schema;
+
+grant SELECT, UPDATE, LOCK TABLES on performance_schema.* to pfsuser@localhost;
+flush privileges;
+
+--echo connect (con1, localhost, pfsuser, , test);
+connect (con1, localhost, pfsuser, , test);
+
+lock tables performance_schema.SETUP_INSTRUMENTS read;
+--disable_result_log
+select * from performance_schema.SETUP_INSTRUMENTS;
+--enable_result_log
+unlock tables;
+
+lock tables performance_schema.SETUP_INSTRUMENTS write;
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO';
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+unlock tables;
+
+--echo connection default;
+connection default;
+
+flush tables with read lock;
+
+--echo connection con1;
+connection con1;
+
+lock tables performance_schema.SETUP_INSTRUMENTS read;
+--disable_result_log
+select * from performance_schema.SETUP_INSTRUMENTS;
+--enable_result_log
+unlock tables;
+
+# This will block
+--send
+lock tables performance_schema.SETUP_INSTRUMENTS write;
+
+--echo connection default;
+connection default;
+
+let $wait_condition= select 1 from performance_schema.EVENTS_WAITS_CURRENT where event_name like "wait/synch/cond/sql/COND_global_read_lock";
+
+--source include/wait_condition.inc
+
+# Observe the blocked thread in the performance schema :)
+select event_name,
+ left(source, locate(":", source)) as short_source,
+ timer_end, timer_wait, operation
+ from performance_schema.EVENTS_WAITS_CURRENT
+ where event_name like "wait/synch/cond/sql/COND_global_read_lock";
+
+unlock tables;
+
+connection con1;
+--reap
+
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO';
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+unlock tables;
+
+disconnect con1;
+
+--echo connection default;
+connection default;
+
+drop user pfsuser@localhost;
+flush privileges;
+
diff --git a/mysql-test/suite/perfschema/t/information_schema.test b/mysql-test/suite/perfschema/t/information_schema.test
new file mode 100644
index 00000000000..3d2822a1db3
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/information_schema.test
@@ -0,0 +1,67 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+# Several selects so the output is readable
+
+# Note that TABLE_NAME is in uppercase is some platforms,
+# and in lowercase in others.
+# Using upper(TABLE_NAME) to have consistent results.
+
+select TABLE_SCHEMA, upper(TABLE_NAME), TABLE_CATALOG
+ from information_schema.tables
+ where TABLE_SCHEMA='performance_schema';
+
+select upper(TABLE_NAME), TABLE_TYPE, ENGINE
+ from information_schema.tables
+ where TABLE_SCHEMA='performance_schema';
+
+select upper(TABLE_NAME), VERSION, ROW_FORMAT
+ from information_schema.tables
+ where TABLE_SCHEMA='performance_schema';
+
+select upper(TABLE_NAME), TABLE_ROWS, AVG_ROW_LENGTH
+ from information_schema.tables
+ where TABLE_SCHEMA='performance_schema';
+
+select upper(TABLE_NAME), DATA_LENGTH, MAX_DATA_LENGTH
+ from information_schema.tables
+ where TABLE_SCHEMA='performance_schema';
+
+select upper(TABLE_NAME), INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT
+ from information_schema.tables
+ where TABLE_SCHEMA='performance_schema';
+
+select upper(TABLE_NAME), CREATE_TIME, UPDATE_TIME, CHECK_TIME
+ from information_schema.tables
+ where TABLE_SCHEMA='performance_schema';
+
+select upper(TABLE_NAME), TABLE_COLLATION, CHECKSUM
+ from information_schema.tables
+ where TABLE_SCHEMA='performance_schema';
+
+# TABLESPACE_NAME does not exist in 5.4
+# select upper(TABLE_NAME), CREATE_OPTIONS, TABLESPACE_NAME
+# from information_schema.tables
+# where TABLE_SCHEMA='performance_schema';
+
+select upper(TABLE_NAME), TABLE_COMMENT
+ from information_schema.tables
+ where TABLE_SCHEMA='performance_schema';
+
diff --git a/mysql-test/suite/perfschema/t/misc.test b/mysql-test/suite/perfschema/t/misc.test
new file mode 100644
index 00000000000..d9b97d8441e
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/misc.test
@@ -0,0 +1,57 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+# Miscelaneous
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+#
+# 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.PROCESSLIST)
+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_WRONG_PERFSCHEMA_USAGE
+create table test.t1(a int) engine=performance_schema;
+
+#
+# Bug#44897 Performance Schema: can create a ghost table in another database
+#
+
+--error ER_WRONG_PERFSCHEMA_USAGE
+create table test.t1 like performance_schema.EVENTS_WAITS_CURRENT;
+
+#
+# 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);
+
diff --git a/mysql-test/suite/perfschema/t/myisam_file_io.opt b/mysql-test/suite/perfschema/t/myisam_file_io.opt
new file mode 100644
index 00000000000..f2e233bd4ab
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/myisam_file_io.opt
@@ -0,0 +1 @@
+--performance_schema_events_waits_history_long_size=5000
diff --git a/mysql-test/suite/perfschema/t/myisam_file_io.test b/mysql-test/suite/perfschema/t/myisam_file_io.test
new file mode 100644
index 00000000000..53d2ea6dbe6
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/myisam_file_io.test
@@ -0,0 +1,63 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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;
+
+# 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'.
+
+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"
+ 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;
+
diff --git a/mysql-test/suite/perfschema/t/no_threads-master.opt b/mysql-test/suite/perfschema/t/no_threads-master.opt
new file mode 100644
index 00000000000..b15ab02821d
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/no_threads-master.opt
@@ -0,0 +1 @@
+--one-thread --thread-handling=no-threads --loose-performance-schema-max-thread_instances=10
diff --git a/mysql-test/suite/perfschema/t/no_threads.test b/mysql-test/suite/perfschema/t/no_threads.test
new file mode 100644
index 00000000000..3d3f712e364
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/no_threads.test
@@ -0,0 +1,69 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+
+# Setup : in this main thread
+
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO';
+update performance_schema.SETUP_CONSUMERS set enabled='YES';
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES'
+ where name like "wait/synch/mutex/mysys/THR_LOCK_myisam";
+
+--disable_warnings
+drop table if exists test.t1;
+--enable_warnings
+
+truncate table performance_schema.EVENTS_WAITS_CURRENT;
+truncate table performance_schema.EVENTS_WAITS_HISTORY;
+truncate table performance_schema.EVENTS_WAITS_HISTORY_LONG;
+
+show variables like "thread_handling";
+
+# Code to test : in this main thread
+
+create table test.t1(a int) engine=MYISAM;
+
+show variables like "performance_schema";
+show variables like "performance_schema_max_thread%";
+
+# Verification : in this main thread
+
+select count(*) from performance_schema.PROCESSLIST
+ where name like "thread/sql/main";
+
+select count(*) from performance_schema.PROCESSLIST
+ where name like "thread/sql/OneConnection";
+
+select event_name, operation,
+ left(source, locate(":", source)) as short_source
+ from performance_schema.EVENTS_WAITS_CURRENT;
+
+select event_name, operation,
+ left(source, locate(":", source)) as short_source
+ from performance_schema.EVENTS_WAITS_HISTORY;
+
+select event_name, operation,
+ left(source, locate(":", source)) as short_source
+ from performance_schema.EVENTS_WAITS_HISTORY_LONG;
+
+# Cleanup
+
+drop table test.t1;
+
diff --git a/mysql-test/suite/perfschema/t/one_thread_per_con-master.opt b/mysql-test/suite/perfschema/t/one_thread_per_con-master.opt
new file mode 100644
index 00000000000..d6685208673
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/one_thread_per_con-master.opt
@@ -0,0 +1 @@
+--thread_handling=one-thread-per-connection
diff --git a/mysql-test/suite/perfschema/t/one_thread_per_con.test b/mysql-test/suite/perfschema/t/one_thread_per_con.test
new file mode 100644
index 00000000000..7d0daffe228
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/one_thread_per_con.test
@@ -0,0 +1,94 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+# Setup
+
+--source ../include/setup_helper.inc
+
+# We use a myisam table here because CREATE TABLE has a known,
+# stable behavior (it will lock THR_LOCK_myisam once).
+# The point is not to test myisam, but to test that each
+# connection is properly instrumented, with one-thread-per-connection
+
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES'
+ where name like "wait/synch/mutex/mysys/THR_LOCK_myisam";
+
+--disable_warnings
+drop table if exists test.t1;
+drop table if exists test.t2;
+drop table if exists test.t3;
+--enable_warnings
+
+truncate table performance_schema.EVENTS_WAITS_HISTORY_LONG;
+
+show variables like "thread_handling";
+
+# Code to test
+
+connection con1;
+
+-- echo "----------------- Connection 1"
+create table test.t1(a int) engine=MYISAM;
+
+connection con2;
+
+-- echo "----------------- Connection 2"
+create table test.t2(a int) engine=MYISAM;
+
+connection con3;
+
+-- echo "----------------- Connection 3"
+create table test.t3(a int) engine=MYISAM;
+
+# Verification
+
+connection default;
+
+-- echo "----------------- Connection default"
+
+--disable_query_log
+eval set @tid= $con1_THREAD_ID;
+--enable_query_log
+
+execute stmt_dump_events using @tid;
+execute stmt_dump_thread using @tid;
+
+--disable_query_log
+eval set @tid= $con2_THREAD_ID;
+--enable_query_log
+
+execute stmt_dump_events using @tid;
+execute stmt_dump_thread using @tid;
+
+--disable_query_log
+eval set @tid= $con3_THREAD_ID;
+--enable_query_log
+
+execute stmt_dump_events using @tid;
+execute stmt_dump_thread using @tid;
+
+# Cleanup
+
+drop table test.t1;
+drop table test.t2;
+drop table test.t3;
+
+--source ../include/cleanup_helper.inc
+
diff --git a/mysql-test/suite/perfschema/t/pool_of_threads-master.opt b/mysql-test/suite/perfschema/t/pool_of_threads-master.opt
new file mode 100644
index 00000000000..75a5cd77203
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/pool_of_threads-master.opt
@@ -0,0 +1 @@
+--loose-pool-of-threads
diff --git a/mysql-test/suite/perfschema/t/privilege.test b/mysql-test/suite/perfschema/t/privilege.test
new file mode 100644
index 00000000000..d2f3c2a9e6b
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/privilege.test
@@ -0,0 +1,362 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+show grants;
+
+grant ALL on *.* to 'pfs_user_1'@localhost with GRANT OPTION;
+
+# Test denied privileges on performance_schema.*
+
+--error ER_DBACCESS_DENIED_ERROR
+grant ALL on performance_schema.* to 'pfs_user_2'@localhost
+ with GRANT OPTION;
+
+# will be ER_DBACCESS_DENIED_ERROR once .FRM are removed
+grant CREATE on performance_schema.* to 'pfs_user_2'@localhost;
+
+# will be ER_DBACCESS_DENIED_ERROR once .FRM are removed
+grant DROP on performance_schema.* to 'pfs_user_2'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant REFERENCES on performance_schema.* to 'pfs_user_2'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant INDEX on performance_schema.* to 'pfs_user_2'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant ALTER on performance_schema.* to 'pfs_user_2'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant CREATE TEMPORARY TABLES on performance_schema.* to 'pfs_user_2'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant EXECUTE on performance_schema.* to 'pfs_user_2'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant CREATE VIEW on performance_schema.* to 'pfs_user_2'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant SHOW VIEW on performance_schema.* to 'pfs_user_2'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant CREATE ROUTINE on performance_schema.* to 'pfs_user_2'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant ALTER ROUTINE on performance_schema.* to 'pfs_user_2'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant EVENT on performance_schema.* to 'pfs_user_2'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant TRIGGER on performance_schema.* to 'pfs_user_2'@localhost;
+
+# Test allowed privileges on performance_schema.*
+
+grant SELECT on performance_schema.* to 'pfs_user_2'@localhost;
+grant INSERT on performance_schema.* to 'pfs_user_2'@localhost;
+grant UPDATE on performance_schema.* to 'pfs_user_2'@localhost;
+grant DELETE on performance_schema.* to 'pfs_user_2'@localhost;
+grant LOCK TABLES on performance_schema.* to 'pfs_user_2'@localhost;
+
+# Test denied privileges on specific performance_schema tables.
+# SETUP_INSTRUMENT : example of PFS_updatable_acl
+# EVENTS_WAITS_CURRENT : example of PFS_truncatable_acl
+# FILE_INSTANCES : example of PFS_readonly_acl
+
+--error ER_DBACCESS_DENIED_ERROR
+grant ALL on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost
+ with GRANT OPTION;
+
+# will be ER_DBACCESS_DENIED_ERROR once .FRM are removed
+grant CREATE on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+
+# will be ER_DBACCESS_DENIED_ERROR once .FRM are removed
+grant DROP on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant REFERENCES on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant INDEX on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant ALTER on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant CREATE VIEW on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant SHOW VIEW on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant TRIGGER on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+
+--replace_result '\'setup_instruments' '\'SETUP_INSTRUMENTS'
+--error ER_TABLEACCESS_DENIED_ERROR
+grant INSERT on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+
+--replace_result '\'setup_instruments' '\'SETUP_INSTRUMENTS'
+--error ER_TABLEACCESS_DENIED_ERROR
+grant DELETE on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost;
+
+grant SELECT on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost
+ with GRANT OPTION;
+
+grant UPDATE on performance_schema.SETUP_INSTRUMENTS to 'pfs_user_3'@localhost
+ with GRANT OPTION;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant ALL on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost
+ with GRANT OPTION;
+
+# will be ER_DBACCESS_DENIED_ERROR once .FRM are removed
+grant CREATE on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+
+# will be ER_DBACCESS_DENIED_ERROR once .FRM are removed
+grant DROP on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant REFERENCES on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant INDEX on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant ALTER on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant CREATE VIEW on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant SHOW VIEW on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant TRIGGER on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+grant INSERT on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+grant UPDATE on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+grant DELETE on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost;
+
+grant SELECT on performance_schema.EVENTS_WAITS_CURRENT to 'pfs_user_3'@localhost
+ with GRANT OPTION;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant ALL on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost
+ with GRANT OPTION;
+
+# will be ER_DBACCESS_DENIED_ERROR once .FRM are removed
+grant CREATE on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+
+# will be ER_DBACCESS_DENIED_ERROR once .FRM are removed
+grant DROP on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant REFERENCES on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant INDEX on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant ALTER on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant CREATE VIEW on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant SHOW VIEW on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+
+--error ER_DBACCESS_DENIED_ERROR
+grant TRIGGER on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+
+--replace_result '\'file_instances' '\'FILE_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+grant INSERT on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+
+--replace_result '\'file_instances' '\'FILE_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+grant UPDATE on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+
+--replace_result '\'file_instances' '\'FILE_INSTANCES'
+--error ER_TABLEACCESS_DENIED_ERROR
+grant DELETE on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost;
+
+grant SELECT on performance_schema.FILE_INSTANCES to 'pfs_user_3'@localhost
+ with GRANT OPTION;
+
+# See bug#45354 LOCK TABLES is not a TABLE privilege
+grant LOCK TABLES on performance_schema.* to 'pfs_user_3'@localhost
+ with GRANT OPTION;
+
+flush privileges;
+
+--source ../include/privilege.inc
+
+connect (con1, localhost, pfs_user_1, , );
+
+--source ../include/privilege.inc
+
+--disconnect con1
+
+connect (con2, localhost, pfs_user_2, , );
+
+--source ../include/privilege.inc
+
+--disconnect con2
+
+connect (con3, localhost, pfs_user_3, , );
+
+--source ../include/privilege.inc
+
+--disconnect con3
+
+--connection default
+
+revoke all privileges, grant option from 'pfs_user_1'@localhost;
+revoke all privileges, grant option from 'pfs_user_2'@localhost;
+revoke all privileges, grant option from 'pfs_user_3'@localhost;
+drop user 'pfs_user_1'@localhost;
+drop user 'pfs_user_2'@localhost;
+drop user 'pfs_user_3'@localhost;
+flush privileges;
+
+--echo # Test cases from WL#4818
+--echo # Setup user
+
+CREATE user pfs_user_4;
+--connect (pfs_user_4, localhost, pfs_user_4, , )
+
+--echo #
+--echo # WL#4818, NFS4: Normal user does not have access to view data
+--echo # without grants
+--echo #
+
+--connection pfs_user_4
+--echo # Select as pfs_user_4 should fail without grant
+
+--replace_result '\'events_waits_history' '\'EVENTS_WAITS_HISTORY'
+--error ER_TABLEACCESS_DENIED_ERROR
+SELECT event_id FROM performance_schema.EVENTS_WAITS_HISTORY;
+
+--replace_result '\'events_waits_history_long' '\'EVENTS_WAITS_HISTORY_LONG'
+--error ER_TABLEACCESS_DENIED_ERROR
+SELECT event_id FROM performance_schema.EVENTS_WAITS_HISTORY_LONG;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+SELECT event_id FROM performance_schema.EVENTS_WAITS_CURRENT;
+
+--replace_result '\'events_waits_summary_by_instance' '\'EVENTS_WAITS_SUMMARY_BY_INSTANCE'
+--error ER_TABLEACCESS_DENIED_ERROR
+SELECT event_name FROM performance_schema.EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+
+--replace_result '\'file_summary_by_instance' '\'FILE_SUMMARY_BY_INSTANCE'
+--error ER_TABLEACCESS_DENIED_ERROR
+SELECT event_name FROM performance_schema.FILE_SUMMARY_BY_INSTANCE;
+
+--echo #
+--echo # WL#4818, NFS3: Normal user does not have access to change what is
+--echo # instrumented without grants
+--echo #
+
+--connection pfs_user_4
+--echo # User pfs_user_4 should not be allowed to tweak instrumentation without
+--echo # explicit grant
+
+--replace_result '\'setup_instruments' '\'SETUP_INSTRUMENTS'
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO', timed = 'YES';
+
+--replace_result '\'setup_instruments' '\'SETUP_INSTRUMENTS'
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES'
+WHERE name LIKE 'wait/synch/mutex/%'
+ OR name LIKE 'wait/synch/rwlock/%';
+
+--replace_result '\'setup_consumers' '\'SETUP_CONSUMERS'
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.SETUP_CONSUMERS SET enabled = 'YES';
+
+--replace_result '\'setup_timers' '\'SETUP_TIMERS'
+--error ER_TABLEACCESS_DENIED_ERROR
+UPDATE performance_schema.SETUP_TIMERS SET timer_name = 'TICK';
+
+--replace_result '\'events_waits_history_long' '\'EVENTS_WAITS_HISTORY_LONG'
+--error ER_TABLEACCESS_DENIED_ERROR
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+
+--replace_result '\'events_waits_history' '\'EVENTS_WAITS_HISTORY'
+--error ER_TABLEACCESS_DENIED_ERROR
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+
+--replace_result '\'events_waits_current' '\'EVENTS_WAITS_CURRENT'
+--error ER_TABLEACCESS_DENIED_ERROR
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+
+--echo #
+--echo # WL#4814, NFS1: Can use grants to give normal user access
+--echo # to turn on and off instrumentation
+--echo #
+
+--connection default
+--echo # Grant access to change tables with the root account
+
+GRANT UPDATE ON performance_schema.SETUP_CONSUMERS TO pfs_user_4;
+GRANT UPDATE ON performance_schema.SETUP_TIMERS TO pfs_user_4;
+GRANT UPDATE, SELECT ON performance_schema.SETUP_INSTRUMENTS TO pfs_user_4;
+GRANT DROP ON performance_schema.EVENTS_WAITS_CURRENT TO pfs_user_4;
+GRANT DROP ON performance_schema.EVENTS_WAITS_HISTORY TO pfs_user_4;
+GRANT DROP ON performance_schema.EVENTS_WAITS_HISTORY_LONG TO pfs_user_4;
+
+--connection pfs_user_4
+--echo # User pfs_user_4 should now be allowed to tweak instrumentation
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'NO', timed = 'YES';
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES'
+WHERE name LIKE 'wait/synch/mutex/%'
+ OR name LIKE 'wait/synch/rwlock/%';
+
+UPDATE performance_schema.SETUP_CONSUMERS SET enabled = 'YES';
+
+UPDATE performance_schema.SETUP_TIMERS SET timer_name = 'TICK';
+
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY_LONG;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_HISTORY;
+TRUNCATE TABLE performance_schema.EVENTS_WAITS_CURRENT;
+
+--echo # Clean up
+
+--connection default
+--disconnect pfs_user_4
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM pfs_user_4;
+DROP USER pfs_user_4;
+flush privileges;
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES', timed = 'YES';
+UPDATE performance_schema.SETUP_CONSUMERS SET enabled = 'YES';
+UPDATE performance_schema.SETUP_TIMERS SET timer_name = 'CYCLE';
+
diff --git a/mysql-test/suite/perfschema/t/query_cache.test b/mysql-test/suite/perfschema/t/query_cache.test
new file mode 100644
index 00000000000..a50b3b99650
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/query_cache.test
@@ -0,0 +1,68 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+# This test verifies that performance schema tables, because they contain
+# data that is volatile, are never cached in the query cache.
+
+--source include/have_query_cache.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+create table t1 (a int not null);
+insert into t1 values (1), (2), (3);
+
+SET GLOBAL query_cache_size=1355776;
+
+flush query cache;
+reset query cache;
+
+select * from t1;
+
+show status like "Qcache_queries_in_cache";
+show status like "Qcache_inserts";
+show status like "Qcache_hits";
+
+select * from t1;
+
+show status like "Qcache_queries_in_cache";
+show status like "Qcache_inserts";
+show status like "Qcache_hits";
+
+select spins from performance_schema.EVENTS_WAITS_CURRENT order by event_name limit 1;
+
+select name from performance_schema.SETUP_INSTRUMENTS order by name limit 1;
+
+show status like "Qcache_queries_in_cache";
+show status like "Qcache_inserts";
+show status like "Qcache_hits";
+
+select spins from performance_schema.EVENTS_WAITS_CURRENT order by event_name limit 1;
+
+select name from performance_schema.SETUP_INSTRUMENTS order by name limit 1;
+
+show status like "Qcache_queries_in_cache";
+show status like "Qcache_inserts";
+show status like "Qcache_hits";
+
+SET GLOBAL query_cache_size= default;
+
+drop table t1;
+
diff --git a/mysql-test/suite/perfschema/t/read_only.test b/mysql-test/suite/perfschema/t/read_only.test
new file mode 100644
index 00000000000..62631fa048f
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/read_only.test
@@ -0,0 +1,96 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+#
+# Check that
+# - a regular user can not update SETUP_ tables under --read-only
+# - a user with SUPER privileges cam
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+use performance_schema;
+
+set @start_read_only= @@global.read_only;
+
+grant SELECT, UPDATE on performance_schema.* to pfsuser@localhost;
+flush privileges;
+
+--echo connect (con1, localhost, pfsuser, , test);
+connect (con1, localhost, pfsuser, , test);
+
+--echo connection default;
+connection default;
+
+set global read_only=0;
+
+--echo connection con1;
+connection con1;
+
+select @@global.read_only;
+show grants;
+--disable_result_log
+select * from performance_schema.SETUP_INSTRUMENTS;
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO';
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+--enable_result_log
+
+--echo connection default;
+connection default;
+
+set global read_only=1;
+
+--echo connection con1;
+connection con1;
+
+select @@global.read_only;
+show grants;
+--disable_result_log
+select * from performance_schema.SETUP_INSTRUMENTS;
+--error ER_OPTION_PREVENTS_STATEMENT
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO';
+--error ER_OPTION_PREVENTS_STATEMENT
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+--enable_result_log
+
+--echo connection default;
+connection default;
+
+grant super on *.* to pfsuser@localhost;
+flush privileges;
+
+disconnect con1;
+--echo connect (con1, localhost, pfsuser, , test);
+connect (con1, localhost, pfsuser, , test);
+
+select @@global.read_only;
+show grants;
+--disable_result_log
+select * from performance_schema.SETUP_INSTRUMENTS;
+update performance_schema.SETUP_INSTRUMENTS set enabled='NO';
+update performance_schema.SETUP_INSTRUMENTS set enabled='YES';
+--enable_result_log
+
+disconnect con1;
+
+--echo connection default;
+connection default;
+
+set global read_only= @start_read_only;
+
+drop user pfsuser@localhost;
+flush privileges;
+
diff --git a/mysql-test/suite/perfschema/t/schema.test b/mysql-test/suite/perfschema/t/schema.test
new file mode 100644
index 00000000000..d13c399a97b
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/schema.test
@@ -0,0 +1,46 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+--source include/have_lowercase0.inc
+
+show databases;
+
+use performance_schema;
+
+show tables;
+
+show create table COND_INSTANCES;
+show create table EVENTS_WAITS_CURRENT;
+show create table EVENTS_WAITS_HISTORY;
+show create table EVENTS_WAITS_HISTORY_LONG;
+show create table EVENTS_WAITS_SUMMARY_BY_EVENT_NAME;
+show create table EVENTS_WAITS_SUMMARY_BY_INSTANCE;
+show create table EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME;
+show create table FILE_INSTANCES;
+show create table FILE_SUMMARY_BY_EVENT_NAME;
+show create table FILE_SUMMARY_BY_INSTANCE;
+show create table MUTEX_INSTANCES;
+show create table PERFORMANCE_TIMERS;
+show create table PROCESSLIST;
+show create table RWLOCK_INSTANCES;
+show create table SETUP_CONSUMERS;
+show create table SETUP_INSTRUMENTS;
+show create table SETUP_OBJECTS;
+show create table SETUP_TIMERS;
+
diff --git a/mysql-test/suite/perfschema/t/selects.test b/mysql-test/suite/perfschema/t/selects.test
new file mode 100644
index 00000000000..d5268e8465c
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/selects.test
@@ -0,0 +1,156 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+#
+# WL#4814, 4.1.2 STORAGE ENGINE, FSE8: Selects
+#
+
+# Make some data that we can work on:
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET enabled = 'YES', timed = 'YES';
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+CREATE TABLE t1 (id INT PRIMARY KEY, b CHAR(100) DEFAULT 'initial value')
+ENGINE=MyISAM;
+INSERT INTO t1 (id) VALUES (1), (2), (3), (4), (5), (6), (7), (8);
+
+# ORDER BY, GROUP BY and HAVING
+
+--replace_column 2 [NUM_BYTES]
+SELECT OPERATION, SUM(NUMBER_OF_BYTES) AS TOTAL
+FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+GROUP BY OPERATION
+HAVING TOTAL IS NOT NULL
+ORDER BY OPERATION
+LIMIT 1;
+
+# Sub SELECT
+--replace_column 1 [EVENT_ID]
+SELECT EVENT_ID FROM performance_schema.EVENTS_WAITS_CURRENT
+WHERE THREAD_ID IN
+ (SELECT THREAD_ID FROM performance_schema.PROCESSLIST)
+AND EVENT_NAME IN
+ (SELECT NAME FROM performance_schema.SETUP_INSTRUMENTS
+ WHERE NAME LIKE "wait/synch/%")
+LIMIT 1;
+
+# JOIN
+
+--replace_column 1 [EVENT_ID]
+SELECT DISTINCT EVENT_ID
+FROM performance_schema.EVENTS_WAITS_CURRENT
+JOIN performance_schema.EVENTS_WAITS_HISTORY USING (EVENT_ID)
+JOIN performance_schema.EVENTS_WAITS_HISTORY_LONG USING (EVENT_ID)
+ORDER BY EVENT_ID
+LIMIT 1;
+
+# Self JOIN
+
+--replace_column 1 [THREAD_ID] 2 [EVENT_ID] 3 [EVENT_NAME] 4 [TIMER_WAIT]
+SELECT t1.THREAD_ID, t2.EVENT_ID, t3.EVENT_NAME, t4.TIMER_WAIT
+FROM performance_schema.EVENTS_WAITS_HISTORY t1
+JOIN performance_schema.EVENTS_WAITS_HISTORY t2 USING (EVENT_ID)
+JOIN performance_schema.EVENTS_WAITS_HISTORY t3 ON (t2.THREAD_ID = t3.THREAD_ID)
+JOIN performance_schema.EVENTS_WAITS_HISTORY t4 ON (t3.EVENT_NAME = t4.EVENT_NAME)
+ORDER BY t1.EVENT_ID, t2.EVENT_ID
+LIMIT 5;
+
+# UNION
+--replace_column 1 [THREAD_ID] 2 [EVENT_ID]
+SELECT THREAD_ID, EVENT_ID FROM (
+SELECT THREAD_ID, EVENT_ID FROM performance_schema.EVENTS_WAITS_CURRENT
+UNION
+SELECT THREAD_ID, EVENT_ID FROM performance_schema.EVENTS_WAITS_HISTORY
+UNION
+SELECT THREAD_ID, EVENT_ID FROM performance_schema.EVENTS_WAITS_HISTORY_LONG
+) t1 ORDER BY THREAD_ID, EVENT_ID
+LIMIT 5;
+
+# EVENT
+
+CREATE EVENT t_ps_event
+ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 SECOND
+DO SELECT DISTINCT EVENT_ID
+ FROM performance_schema.EVENTS_WAITS_CURRENT
+ JOIN performance_schema.EVENTS_WAITS_HISTORY USING (EVENT_ID)
+ ORDER BY EVENT_ID
+ LIMIT 1;
+
+--sleep 2
+
+# TRIGGER
+
+ALTER TABLE t1 ADD COLUMN c INT;
+
+delimiter |;
+
+CREATE TRIGGER t_ps_trigger BEFORE INSERT ON t1
+ FOR EACH ROW BEGIN
+ SET NEW.c = (SELECT MAX(EVENT_ID)
+ FROM performance_schema.EVENTS_WAITS_CURRENT);
+ END;
+|
+
+delimiter ;|
+
+INSERT INTO t1 (id) VALUES (11), (12), (13);
+
+--replace_column 2 [EVENT_ID]
+SELECT id, c FROM t1 WHERE id > 10 ORDER BY c;
+
+DROP TRIGGER t_ps_trigger;
+
+# PROCEDURE
+
+delimiter |;
+
+CREATE PROCEDURE t_ps_proc(IN tid INT, OUT pid INT)
+BEGIN
+ SELECT id FROM performance_schema.PROCESSLIST
+ WHERE THREAD_ID = tid INTO pid;
+END;
+
+|
+
+delimiter ;|
+
+CALL t_ps_proc(0, @p_id);
+
+# FUNCTION
+
+delimiter |;
+
+CREATE FUNCTION t_ps_func(tid INT) RETURNS int
+BEGIN
+ return (SELECT id FROM performance_schema.PROCESSLIST
+ WHERE THREAD_ID = tid);
+END;
+
+|
+
+delimiter ;|
+
+SELECT t_ps_func(0) = @p_id;
+
+DROP PROCEDURE t_ps_proc;
+DROP FUNCTION t_ps_func;
+
+# Clean up
+DROP TABLE t1;
diff --git a/mysql-test/suite/perfschema/t/server_init.test b/mysql-test/suite/perfschema/t/server_init.test
new file mode 100644
index 00000000000..cd9357cce67
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/server_init.test
@@ -0,0 +1,263 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+# This test verifies that the mysys and server instruments are properly
+# initialized and recorded by the performance schema during the bootstrap
+# sequence in mysqld main().
+# Note that some globals mutexes/rwlocks/conds that depend on #ifdef options
+# or runtime options are not tested here, to have a predictable result.
+
+use performance_schema;
+
+# Verify that these global mutexes have been properly initilized in mysys
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/mysys/THR_LOCK_threads";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/mysys/THR_LOCK_malloc";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/mysys/THR_LOCK_open";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/mysys/THR_LOCK_isam";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/mysys/THR_LOCK_myisam";
+
+# Does not exist in mysql 5.5, 6.0 only
+# select count(name) from MUTEX_INSTANCES
+# where name like "wait/synch/mutex/mysys/THR_LOCK_myisam_log";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/mysys/THR_LOCK_heap";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/mysys/THR_LOCK_net";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/mysys/THR_LOCK_charset";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/mysys/THR_LOCK_time";
+
+# There are no global rwlock in mysys
+
+# Verify that these global conditions have been properly initilized in mysys
+
+select count(name) from COND_INSTANCES
+ where name like "wait/synch/cond/mysys/THR_COND_threads";
+
+# Verify that these global mutexes have been properly initilized in sql
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_mysql_create_db";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_open";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_lock_db";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_thread_count";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_mapped_file";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_status";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_error_log";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_delayed_insert";
+
+# Named LOCK_uuid_short in 6.0 only
+# select count(name) from MUTEX_INSTANCES
+# where name like "wait/synch/mutex/sql/LOCK_uuid_short";
+
+# Named LOCK_uuid_generator in 5.5, LOCK_uuid_short in 6.0
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_uuid_generator";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_delayed_status";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_delayed_create";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_crypt";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_slave_list";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_active_mi";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_manager";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_global_read_lock";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_global_system_variables";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_user_conn";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_prepared_stmt_count";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_connection_count";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_server_started";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_rpl_status";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOG_INFO::lock";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/Query_cache::structure_guard_mutex";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/Event_scheduler::LOCK_scheduler_state";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_event_metadata";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_event_queue";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_user_locks";
+
+# Does not exist in mysql 5.5, 6.0 only
+# select count(name) from MUTEX_INSTANCES
+# where name like "wait/synch/mutex/sql/LOCK_mdl";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/Cversion_lock";
+
+# Does not exist in mysql 5.5, 6.0 only
+# select count(name) from MUTEX_INSTANCES
+# where name like "wait/synch/mutex/sql/LOCK_audit_mask";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_xid_cache";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_plugin";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/LOCK_gdl";
+
+select count(name) from MUTEX_INSTANCES
+ where name like "wait/synch/mutex/sql/tz_LOCK";
+
+# Does not exist in mysql 5.5, 6.0 only
+# select count(name) from MUTEX_INSTANCES
+# where name like "wait/synch/mutex/sql/slave_start";
+
+# Does not exist in mysql 5.5, 6.0 only
+# select count(name) from MUTEX_INSTANCES
+# where name like "wait/synch/mutex/sql/BML_class::THR_LOCK_BML";
+
+# Does not exist in mysql 5.5, 6.0 only
+# select count(name) from MUTEX_INSTANCES
+# where name like "wait/synch/mutex/sql/BML_class::THR_LOCK_BML_active";
+
+# Does not exist in mysql 5.5, 6.0 only
+# select count(name) from MUTEX_INSTANCES
+# where name like "wait/synch/mutex/sql/BML_class::THR_LOCK_BML_get";
+
+# Verify that these global rwlocks have been properly initilized in sql
+
+select count(name) from RWLOCK_INSTANCES
+ where name like "wait/synch/rwlock/sql/LOCK_grant";
+
+select count(name) from RWLOCK_INSTANCES
+ where name like "wait/synch/rwlock/sql/LOCK_sys_init_connect";
+
+select count(name) from RWLOCK_INSTANCES
+ where name like "wait/synch/rwlock/sql/LOCK_sys_init_slave";
+
+select count(name) from RWLOCK_INSTANCES
+ where name like "wait/synch/rwlock/sql/LOCK_system_variables_hash";
+
+# Verify that these global conditions have been properly initilized in sql
+
+select count(name) from COND_INSTANCES
+ where name like "wait/synch/cond/sql/COND_server_started";
+
+select count(name) from COND_INSTANCES
+ where name like "wait/synch/cond/sql/COND_refresh";
+
+select count(name) from COND_INSTANCES
+ where name like "wait/synch/cond/sql/COND_thread_count";
+
+select count(name) from COND_INSTANCES
+ where name like "wait/synch/cond/sql/COND_manager";
+
+select count(name) from COND_INSTANCES
+ where name like "wait/synch/cond/sql/COND_global_read_lock";
+
+select count(name) from COND_INSTANCES
+ where name like "wait/synch/cond/sql/COND_thread_cache";
+
+select count(name) from COND_INSTANCES
+ where name like "wait/synch/cond/sql/COND_flush_thread_cache";
+
+select count(name) from COND_INSTANCES
+ where name like "wait/synch/cond/sql/COND_rpl_status";
+
+select count(name) from COND_INSTANCES
+ where name like "wait/synch/cond/sql/Query_cache::COND_cache_status_changed";
+
+select count(name) from COND_INSTANCES
+ where name like "wait/synch/cond/sql/Event_scheduler::COND_state";
+
+select count(name) from COND_INSTANCES
+ where name like "wait/synch/cond/sql/COND_queue_state";
+
+# Does not exist in mysql 5.5, 6.0 only
+# select count(name) from COND_INSTANCES
+# where name like "wait/synch/cond/sql/COND_mdl";
+
+# Does not exist in mysql 5.5, 6.0 only
+# select count(name) from COND_INSTANCES
+# where name like "wait/synch/cond/sql/BML_class::COND_BML";
+
+# Does not exist in mysql 5.5, 6.0 only
+# select count(name) from COND_INSTANCES
+# where name like "wait/synch/cond/sql/BML_class::COND_BML_registered";
+
+# Does not exist in mysql 5.5, 6.0 only
+# select count(name) from COND_INSTANCES
+# where name like "wait/synch/cond/sql/BML_class::COND_BML_release";
+
diff --git a/mysql-test/suite/perfschema/t/start_server_no_cond_class-master.opt b/mysql-test/suite/perfschema/t/start_server_no_cond_class-master.opt
new file mode 100644
index 00000000000..714888a6de1
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_cond_class-master.opt
@@ -0,0 +1 @@
+--loose-enable-performance-schema --loose-performance_schema_max_cond_classes=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_cond_class.test b/mysql-test/suite/perfschema/t/start_server_no_cond_class.test
new file mode 100644
index 00000000000..34ff61c358e
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_cond_class.test
@@ -0,0 +1,38 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect no classes
+show variables like "performance_schema_max_cond_classes";
+
+select count(*) from performance_schema.SETUP_INSTRUMENTS
+ where name like "wait/synch/cond/%";
+
+# We lost all the classes
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_COND_CLASSES_LOST';
+
+# Expect no instances
+select count(*) from performance_schema.COND_INSTANCES;
+
+# Expect no instances lost
+show status like "performance_schema_cond_instances_lost";
+
diff --git a/mysql-test/suite/perfschema/t/start_server_no_cond_inst-master.opt b/mysql-test/suite/perfschema/t/start_server_no_cond_inst-master.opt
new file mode 100644
index 00000000000..4b33152f89a
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_cond_inst-master.opt
@@ -0,0 +1 @@
+--loose-enable-performance-schema --loose-performance_schema_max_cond_instances=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_cond_inst.test b/mysql-test/suite/perfschema/t/start_server_no_cond_inst.test
new file mode 100644
index 00000000000..fe2177adb82
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_cond_inst.test
@@ -0,0 +1,41 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect classes
+show variables like "performance_schema_max_cond_classes";
+
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS
+ where name like "wait/synch/cond/%";
+
+# Expect no class lost
+show status like "performance_schema_cond_classes_lost";
+
+# Expect no instances
+show variables like "performance_schema_max_cond_instances";
+
+select count(*) from performance_schema.COND_INSTANCES;
+
+# Expect instances lost
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_COND_INSTANCES_LOST';
+
+
diff --git a/mysql-test/suite/perfschema/t/start_server_no_file_class-master.opt b/mysql-test/suite/perfschema/t/start_server_no_file_class-master.opt
new file mode 100644
index 00000000000..f4b6d1ec893
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_file_class-master.opt
@@ -0,0 +1 @@
+--loose-enable-performance-schema --loose-performance_schema_max_file_classes=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_file_class.test b/mysql-test/suite/perfschema/t/start_server_no_file_class.test
new file mode 100644
index 00000000000..ca84fbbdcf2
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_file_class.test
@@ -0,0 +1,38 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect no classes
+show variables like "performance_schema_max_file_classes";
+
+select count(*) from performance_schema.SETUP_INSTRUMENTS
+ where name like "wait/io/file/%";
+
+# We lost all the classes
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_FILE_CLASSES_LOST';
+
+# Expect no instances
+select count(*) from performance_schema.FILE_INSTANCES;
+
+# Expect no instances lost
+show status like "performance_schema_file_instances_lost";
+
diff --git a/mysql-test/suite/perfschema/t/start_server_no_file_inst-master.opt b/mysql-test/suite/perfschema/t/start_server_no_file_inst-master.opt
new file mode 100644
index 00000000000..7f0d246f97a
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_file_inst-master.opt
@@ -0,0 +1 @@
+--loose-enable-performance-schema --loose-performance_schema_max_file_instances=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_file_inst.test b/mysql-test/suite/perfschema/t/start_server_no_file_inst.test
new file mode 100644
index 00000000000..dbbba7bbe4a
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_file_inst.test
@@ -0,0 +1,41 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect classes
+show variables like "performance_schema_max_file_classes";
+
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS
+ where name like "wait/io/file/%";
+
+# Expect no class lost
+show status like "performance_schema_file_classes_lost";
+
+# Expect no instances
+show variables like "performance_schema_max_file_instances";
+
+select count(*) from performance_schema.FILE_INSTANCES;
+
+# Expect instances lost
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_FILE_INSTANCES_LOST';
+
+
diff --git a/mysql-test/suite/perfschema/t/start_server_no_mutex_class-master.opt b/mysql-test/suite/perfschema/t/start_server_no_mutex_class-master.opt
new file mode 100644
index 00000000000..173851434eb
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_mutex_class-master.opt
@@ -0,0 +1 @@
+--loose-enable-performance-schema --loose-performance_schema_max_mutex_classes=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_mutex_class.test b/mysql-test/suite/perfschema/t/start_server_no_mutex_class.test
new file mode 100644
index 00000000000..142e150ede6
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_mutex_class.test
@@ -0,0 +1,38 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect no classes
+show variables like "performance_schema_max_mutex_classes";
+
+select count(*) from performance_schema.SETUP_INSTRUMENTS
+ where name like "wait/synch/mutex/%";
+
+# We lost all the classes
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_MUTEX_CLASSES_LOST';
+
+# Expect no instances
+select count(*) from performance_schema.MUTEX_INSTANCES;
+
+# Expect no instances lost
+show status like "performance_schema_mutex_instances_lost";
+
diff --git a/mysql-test/suite/perfschema/t/start_server_no_mutex_inst-master.opt b/mysql-test/suite/perfschema/t/start_server_no_mutex_inst-master.opt
new file mode 100644
index 00000000000..5bdd7d39b4a
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_mutex_inst-master.opt
@@ -0,0 +1 @@
+--loose-enable-performance-schema --loose-performance_schema_max_mutex_instances=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_mutex_inst.test b/mysql-test/suite/perfschema/t/start_server_no_mutex_inst.test
new file mode 100644
index 00000000000..5a03251d97a
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_mutex_inst.test
@@ -0,0 +1,41 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect classes
+show variables like "performance_schema_max_mutex_classes";
+
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS
+ where name like "wait/synch/mutex/%";
+
+# Expect no class lost
+show status like "performance_schema_mutex_classes_lost";
+
+# Expect no instances
+show variables like "performance_schema_max_mutex_instances";
+
+select count(*) from performance_schema.MUTEX_INSTANCES;
+
+# Expect instances lost
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_MUTEX_INSTANCES_LOST';
+
+
diff --git a/mysql-test/suite/perfschema/t/start_server_no_rwlock_class-master.opt b/mysql-test/suite/perfschema/t/start_server_no_rwlock_class-master.opt
new file mode 100644
index 00000000000..f0d15c86ddc
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_rwlock_class-master.opt
@@ -0,0 +1 @@
+--loose-enable-performance-schema --loose-performance_schema_max_rwlock_classes=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_rwlock_class.test b/mysql-test/suite/perfschema/t/start_server_no_rwlock_class.test
new file mode 100644
index 00000000000..e4dfe121fcf
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_rwlock_class.test
@@ -0,0 +1,38 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect no classes
+show variables like "performance_schema_max_rwlock_classes";
+
+select count(*) from performance_schema.SETUP_INSTRUMENTS
+ where name like "wait/synch/rwlock/%";
+
+# We lost all the classes
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_RWLOCK_CLASSES_LOST';
+
+# Expect no instances
+select count(*) from performance_schema.RWLOCK_INSTANCES;
+
+# Expect no instances lost
+show status like "performance_schema_rwlock_instances_lost";
+
diff --git a/mysql-test/suite/perfschema/t/start_server_no_rwlock_inst-master.opt b/mysql-test/suite/perfschema/t/start_server_no_rwlock_inst-master.opt
new file mode 100644
index 00000000000..fc1f5f89902
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_rwlock_inst-master.opt
@@ -0,0 +1 @@
+--loose-enable-performance-schema --loose-performance_schema_max_rwlock_instances=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_rwlock_inst.test b/mysql-test/suite/perfschema/t/start_server_no_rwlock_inst.test
new file mode 100644
index 00000000000..1d79d2d3991
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_rwlock_inst.test
@@ -0,0 +1,41 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect classes
+show variables like "performance_schema_max_rwlock_classes";
+
+select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS
+ where name like "wait/synch/rwlock/%";
+
+# Expect no class lost
+show status like "performance_schema_rwlock_classes_lost";
+
+# Expect no instances
+show variables like "performance_schema_max_rwlock_instances";
+
+select count(*) from performance_schema.RWLOCK_INSTANCES;
+
+# Expect instances lost
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_RWLOCK_INSTANCES_LOST';
+
+
diff --git a/mysql-test/suite/perfschema/t/start_server_no_thread_class-master.opt b/mysql-test/suite/perfschema/t/start_server_no_thread_class-master.opt
new file mode 100644
index 00000000000..91286cef859
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_thread_class-master.opt
@@ -0,0 +1 @@
+--loose-enable-performance-schema --loose-performance_schema_max_thread_classes=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_thread_class.test b/mysql-test/suite/perfschema/t/start_server_no_thread_class.test
new file mode 100644
index 00000000000..ba214ba9966
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_thread_class.test
@@ -0,0 +1,38 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect no classes
+show variables like "performance_schema_max_thread_classes";
+
+select count(*) from performance_schema.SETUP_INSTRUMENTS
+ where name like "thread/%";
+
+# We lost all the classes
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_THREAD_CLASSES_LOST';
+
+# Expect no instances
+select count(*) from performance_schema.PROCESSLIST;
+
+# Expect no instances lost
+show status like "performance_schema_thread_instances_lost";
+
diff --git a/mysql-test/suite/perfschema/t/start_server_no_thread_inst-master.opt b/mysql-test/suite/perfschema/t/start_server_no_thread_inst-master.opt
new file mode 100644
index 00000000000..6e9d13c2b4c
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_thread_inst-master.opt
@@ -0,0 +1 @@
+--loose-enable-performance-schema --loose-performance_schema_max_thread_instances=0
diff --git a/mysql-test/suite/perfschema/t/start_server_no_thread_inst.test b/mysql-test/suite/perfschema/t/start_server_no_thread_inst.test
new file mode 100644
index 00000000000..7d8a44ebcd5
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_no_thread_inst.test
@@ -0,0 +1,42 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expect classes
+show variables like "performance_schema_max_thread_classes";
+
+# Not observable yet
+# select count(*) > 0 from performance_schema.SETUP_INSTRUMENTS
+# where name like "thread/%";
+
+# Expect no class lost
+show status like "performance_schema_thread_classes_lost";
+
+# Expect no instances
+show variables like "performance_schema_max_thread_instances";
+
+select count(*) from performance_schema.PROCESSLIST;
+
+# Expect instances lost
+select variable_value > 0 from information_schema.global_status
+ where variable_name like 'PERFORMANCE_SCHEMA_THREAD_INSTANCES_LOST';
+
+
diff --git a/mysql-test/suite/perfschema/t/start_server_off-master.opt b/mysql-test/suite/perfschema/t/start_server_off-master.opt
new file mode 100644
index 00000000000..600566e870b
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_off-master.opt
@@ -0,0 +1 @@
+--loose-disable-performance-schema
diff --git a/mysql-test/suite/perfschema/t/start_server_off.test b/mysql-test/suite/perfschema/t/start_server_off.test
new file mode 100644
index 00000000000..bd9db97840d
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_off.test
@@ -0,0 +1,25 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expecting all off / zero
+show status like "performance_schema%";
+
diff --git a/mysql-test/suite/perfschema/t/start_server_on-master.opt b/mysql-test/suite/perfschema/t/start_server_on-master.opt
new file mode 100644
index 00000000000..542720c44d7
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_on-master.opt
@@ -0,0 +1 @@
+--loose-enable-performance-schema
diff --git a/mysql-test/suite/perfschema/t/start_server_on.test b/mysql-test/suite/perfschema/t/start_server_on.test
new file mode 100644
index 00000000000..54714616a08
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/start_server_on.test
@@ -0,0 +1,25 @@
+# Copyright (C) 2008-2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+--source ../include/start_server_common.inc
+
+# Expecting nothing lost with default parameters
+
+show status like "performance_schema%";
diff --git a/mysql-test/suite/perfschema/t/tampered_perfschema_table1-master.opt b/mysql-test/suite/perfschema/t/tampered_perfschema_table1-master.opt
new file mode 100644
index 00000000000..5f094e68be7
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/tampered_perfschema_table1-master.opt
@@ -0,0 +1 @@
+--loose-debug=+d,tampered_perfschema_table1
diff --git a/mysql-test/suite/perfschema/t/tampered_perfschema_table1.test b/mysql-test/suite/perfschema/t/tampered_perfschema_table1.test
new file mode 100644
index 00000000000..be079bacfbf
--- /dev/null
+++ b/mysql-test/suite/perfschema/t/tampered_perfschema_table1.test
@@ -0,0 +1,44 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Tests for PERFORMANCE_SCHEMA
+
+# This test uses error injection,
+# see PFS_engine_table_share::check_all_tables()
+
+# Verify that the server starts even when a performance schema table
+# is corrupted, with an incompatible change.
+# Verify that using that table nicely fails.
+# Verify that other tables are not affected.
+
+--source include/have_debug.inc
+--source include/not_embedded.inc
+--source include/have_perfschema.inc
+
+# The message prints 'mysql.SETUP_INSTRUMENTS'
+# instead of 'performance_schema.SETUP_INSTRUMENTS',
+# due to Bug#46792
+
+call mtr.add_suppression(
+"Column count of mysql.SETUP_INSTRUMENTS is wrong. "
+"Expected 4, found 3. The table is probably corrupted");
+
+--error ER_WRONG_NATIVE_TABLE_STRUCTURE
+select * from performance_schema.SETUP_INSTRUMENTS limit 1;
+
+--disable_result_log
+select * from performance_schema.SETUP_CONSUMERS limit 1;
+--enable_result_log
+
diff --git a/mysql-test/suite/perfschema_stress/README b/mysql-test/suite/perfschema_stress/README
new file mode 100644
index 00000000000..53f6f1daf35
--- /dev/null
+++ b/mysql-test/suite/perfschema_stress/README
@@ -0,0 +1,34 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+WL#4818 - Stress testing of PERFORMANCE_SCHEMA
+
+The performance schema storage engine is backed by data structures, we
+want to be sure that these data structures are not fragile under
+load.
+
+NFS1: 20 threads doing read of performance data (both mutex and
+disk), 5 threads changing what is being instrumented, 25 threads doing
+DML and DDL so that the statistics are updated. Connections should frequently
+disconnect or be KILLed, and reconnect.
+
+The database should not crash under any circumstance.
+
+How to run:
+
+MTR_VERSION=1 ./mtr --stress \
+ --stress-suite=perfschema_stress \
+ --stress-threads=50 \
+ --stress-test-duration=3600
diff --git a/mysql-test/suite/perfschema_stress/include/settings.inc b/mysql-test/suite/perfschema_stress/include/settings.inc
new file mode 100644
index 00000000000..fb886a86df2
--- /dev/null
+++ b/mysql-test/suite/perfschema_stress/include/settings.inc
@@ -0,0 +1,17 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+let $num_stress_rows= 5000;
+let $default_engine_type= myisam;
diff --git a/mysql-test/suite/perfschema_stress/r/modify.result b/mysql-test/suite/perfschema_stress/r/modify.result
new file mode 100644
index 00000000000..e1a79c9be2a
--- /dev/null
+++ b/mysql-test/suite/perfschema_stress/r/modify.result
@@ -0,0 +1,17 @@
+UPDATE performance_schema.SETUP_INSTRUMENTS SET TIMED = 'NO';
+UPDATE performance_schema.SETUP_INSTRUMENTS SET ENABLED = 'NO';
+UPDATE performance_schema.SETUP_TIMERS
+SET TIMER_NAME = 'NANOSECOND' WHERE NAME = 'Wait';
+UPDATE performance_schema.SETUP_TIMERS
+SET TIMER_NAME = 'CYCLE' WHERE NAME = 'Wait';
+UPDATE performance_schema.SETUP_INSTRUMENTS SET TIMED = 'YES';
+UPDATE performance_schema.SETUP_INSTRUMENTS SET ENABLED = 'YES'
+WHERE NAME IN ('wait/io/file/sql/FRM',
+'thread/sql/Connection',
+'wait/synch/cond/sql/COND_mdl',
+'wait/synch/rwlock/sql/LOCK_sys_init_connect',
+'wait/synch/mutex/sql/LOCK_mdl');
+UPDATE performance_schema.SETUP_CONSUMERS SET ENABLED = 'NO'
+WHERE NAME = 'events_waits_history';
+UPDATE performance_schema.SETUP_CONSUMERS SET ENABLED = 'YES'
+WHERE NAME = 'events_waits_history';
diff --git a/mysql-test/suite/perfschema_stress/r/read.result b/mysql-test/suite/perfschema_stress/r/read.result
new file mode 100644
index 00000000000..eee3067ddb8
--- /dev/null
+++ b/mysql-test/suite/perfschema_stress/r/read.result
@@ -0,0 +1,29 @@
+SELECT * FROM performance_schema.SETUP_INSTRUMENTS
+WHERE ENABLED='NO' AND TIMED='NO';
+NAME ENABLED TIMED
+SELECT * FROM performance_schema.EVENTS_WAITS_CURRENT
+WHERE (TIMER_END - TIMER_START != TIMER_WAIT);
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+SELECT * FROM performance_schema.EVENTS_WAITS_HISTORY
+WHERE SPINS != NULL;
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+SELECT * FROM performance_schema.PROCESSLIST p,
+performance_schema.EVENTS_WAITS_CURRENT e
+WHERE p.THREAD_ID = e.THREAD_ID
+AND TIMER_START = 0
+ORDER BY e.EVENT_ID;
+THREAD_ID ID NAME THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+SELECT * FROM performance_schema.EVENTS_WAITS_CURRENT
+WHERE THREAD_ID IN (SELECT THREAD_ID
+FROM performance_schema.PROCESSLIST
+ORDER BY THREAD_ID)
+AND TIMER_END = 0
+AND TIMER_WAIT != NULL
+ORDER BY EVENT_ID;
+THREAD_ID EVENT_ID EVENT_NAME SOURCE TIMER_START TIMER_END TIMER_WAIT SPINS OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE OBJECT_INSTANCE_BEGIN NESTING_EVENT_ID OPERATION NUMBER_OF_BYTES FLAGS
+SELECT SUM(COUNT_READ) AS sum_count_read,
+SUM(COUNT_WRITE) AS sum_count_write,
+SUM(SUM_NUMBER_OF_BYTES_READ) AS sum_num_bytes_read,
+SUM(SUM_NUMBER_OF_BYTES_WRITE) AS sum_num_bytes_write
+FROM performance_schema.FILE_SUMMARY_BY_INSTANCE
+WHERE FILE_NAME LIKE CONCAT('%', @@tmpdir, '%') ORDER BY NULL;
diff --git a/mysql-test/suite/perfschema_stress/r/work.result b/mysql-test/suite/perfschema_stress/r/work.result
new file mode 100644
index 00000000000..c782b45fdf9
--- /dev/null
+++ b/mysql-test/suite/perfschema_stress/r/work.result
@@ -0,0 +1,16 @@
+SET @rowid = ROUND(RAND() * <num_stress_rows>);
+START TRANSACTION;
+UPDATE t1 SET b = 'changed' WHERE id=@rowid;
+SELECT b FROM t1 WHERE id=@rowid;
+b
+changed
+COMMIT;
+START TRANSACTION;
+DELETE FROM t1 WHERE id=@rowid;
+INSERT INTO t1 (id, b) VALUES (@rowid, 'newly_inserted');
+SELECT b FROM t1 WHERE id=@rowid;
+b
+newly_inserted
+COMMIT;
+CREATE TABLE tw_<conn_nr> AS SELECT * FROM t1;
+DROP TABLE tw_<conn_nr>;
diff --git a/mysql-test/suite/perfschema_stress/stress_init.txt b/mysql-test/suite/perfschema_stress/stress_init.txt
new file mode 100644
index 00000000000..146f275e098
--- /dev/null
+++ b/mysql-test/suite/perfschema_stress/stress_init.txt
@@ -0,0 +1 @@
+setup
diff --git a/mysql-test/suite/perfschema_stress/stress_tests.txt b/mysql-test/suite/perfschema_stress/stress_tests.txt
new file mode 100644
index 00000000000..a17a30cb551
--- /dev/null
+++ b/mysql-test/suite/perfschema_stress/stress_tests.txt
@@ -0,0 +1,10 @@
+read
+read
+read
+read
+modify
+work
+work
+work
+work
+work
diff --git a/mysql-test/suite/perfschema_stress/t/modify.test b/mysql-test/suite/perfschema_stress/t/modify.test
new file mode 100644
index 00000000000..08b0699ace6
--- /dev/null
+++ b/mysql-test/suite/perfschema_stress/t/modify.test
@@ -0,0 +1,55 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source suite/perfschema_stress/include/settings.inc
+
+let $have_table= `SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
+ WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'`;
+
+if (`SELECT ($have_table = 0)`) {
+ --source suite/perfschema_stress/t/setup.test
+}
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET TIMED = 'NO';
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET ENABLED = 'NO';
+
+UPDATE performance_schema.SETUP_TIMERS
+SET TIMER_NAME = 'NANOSECOND' WHERE NAME = 'Wait';
+
+# Let it run some time with the new timer name and instruments
+--sleep 1
+
+UPDATE performance_schema.SETUP_TIMERS
+SET TIMER_NAME = 'CYCLE' WHERE NAME = 'Wait';
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET TIMED = 'YES';
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET ENABLED = 'YES'
+WHERE NAME IN ('wait/io/file/sql/FRM',
+ 'thread/sql/Connection',
+ 'wait/synch/cond/sql/COND_mdl',
+ 'wait/synch/rwlock/sql/LOCK_sys_init_connect',
+ 'wait/synch/mutex/sql/LOCK_mdl');
+
+# Two short lived changes to see that switching does not lead
+# to havoc.
+
+UPDATE performance_schema.SETUP_CONSUMERS SET ENABLED = 'NO'
+WHERE NAME = 'events_waits_history';
+
+UPDATE performance_schema.SETUP_CONSUMERS SET ENABLED = 'YES'
+WHERE NAME = 'events_waits_history';
diff --git a/mysql-test/suite/perfschema_stress/t/read.test b/mysql-test/suite/perfschema_stress/t/read.test
new file mode 100644
index 00000000000..28ba4d8d887
--- /dev/null
+++ b/mysql-test/suite/perfschema_stress/t/read.test
@@ -0,0 +1,49 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+
+SELECT * FROM performance_schema.SETUP_INSTRUMENTS
+WHERE ENABLED='NO' AND TIMED='NO';
+
+SELECT * FROM performance_schema.EVENTS_WAITS_CURRENT
+WHERE (TIMER_END - TIMER_START != TIMER_WAIT);
+
+SELECT * FROM performance_schema.EVENTS_WAITS_HISTORY
+WHERE SPINS != NULL;
+
+SELECT * FROM performance_schema.PROCESSLIST p,
+ performance_schema.EVENTS_WAITS_CURRENT e
+WHERE p.THREAD_ID = e.THREAD_ID
+ AND TIMER_START = 0
+ORDER BY e.EVENT_ID;
+
+SELECT * FROM performance_schema.EVENTS_WAITS_CURRENT
+WHERE THREAD_ID IN (SELECT THREAD_ID
+ FROM performance_schema.PROCESSLIST
+ ORDER BY THREAD_ID)
+ AND TIMER_END = 0
+ AND TIMER_WAIT != NULL
+ORDER BY EVENT_ID;
+
+--disable_result_log
+SELECT SUM(COUNT_READ) AS sum_count_read,
+ SUM(COUNT_WRITE) AS sum_count_write,
+ SUM(SUM_NUMBER_OF_BYTES_READ) AS sum_num_bytes_read,
+ SUM(SUM_NUMBER_OF_BYTES_WRITE) AS sum_num_bytes_write
+FROM performance_schema.FILE_SUMMARY_BY_INSTANCE
+WHERE FILE_NAME LIKE CONCAT('%', @@tmpdir, '%') ORDER BY NULL;
+--enable_result_log
+
diff --git a/mysql-test/suite/perfschema_stress/t/setup.test b/mysql-test/suite/perfschema_stress/t/setup.test
new file mode 100644
index 00000000000..9f643edfebe
--- /dev/null
+++ b/mysql-test/suite/perfschema_stress/t/setup.test
@@ -0,0 +1,64 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+if (`SELECT VERSION() LIKE '%embedded%'`)
+{
+ --skip This test cannot run with the embedded server.
+}
+
+--source suite/perfschema_stress/include/settings.inc
+
+--disable_query_log
+--disable_result_log
+
+if (`SELECT LENGTH('$engine_type') = 0`) {
+ let $engine_type= $default_engine_type;
+}
+if (`SELECT '$engine_type' = 'Falcon'`) {
+ --source include/have_falcon.inc
+}
+
+--replace_result $engine_type <engine_type>
+eval CREATE TABLE t1 (id INT PRIMARY KEY, b CHAR(100) DEFAULT 'initial value')
+ ENGINE=$engine_type;
+
+# Need something to start with
+INSERT INTO t1(id) VALUES (1), (2), (3), (4), (5), (6), (7), (8);
+
+# Bulk load the correct number of rows
+while (`SELECT MAX(id) < $num_stress_rows FROM t1`)
+{
+ SELECT MAX(id) FROM t1 INTO @max;
+--replace_result $num_stress_rows <num_stress_rows>
+ eval INSERT INTO t1(id) SELECT id + @max FROM t1
+ WHERE id + @max <= $num_stress_rows;
+}
+
+# Turn on some instruments
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET TIMED = 'YES';
+
+UPDATE performance_schema.SETUP_INSTRUMENTS SET ENABLED = 'NO';
+UPDATE performance_schema.SETUP_INSTRUMENTS SET ENABLED = 'YES'
+WHERE NAME IN ('wait/io/file/sql/FRM',
+ 'thread/sql/Connection',
+ 'wait/synch/cond/sql/COND_mdl',
+ 'wait/synch/rwlock/sql/LOCK_sys_init_connect',
+ 'wait/synch/mutex/sql/LOCK_mdl');
+
+UPDATE performance_schema.SETUP_CONSUMERS SET ENABLED = 'YES';
+
+--enable_result_log
+--enable_query_log
diff --git a/mysql-test/suite/perfschema_stress/t/work.test b/mysql-test/suite/perfschema_stress/t/work.test
new file mode 100644
index 00000000000..8f1bc42c5bc
--- /dev/null
+++ b/mysql-test/suite/perfschema_stress/t/work.test
@@ -0,0 +1,47 @@
+# Copyright (C) 2009 Sun Microsystems, Inc
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+--source include/not_embedded.inc
+--source suite/perfschema_stress/include/settings.inc
+
+let $have_table= `SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
+ WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'`;
+
+if (`SELECT ($have_table = 0)`) {
+ --source suite/perfschema_stress/t/setup.test
+}
+
+--replace_result $num_stress_rows <num_stress_rows>
+eval SET @rowid = ROUND(RAND() * $num_stress_rows);
+
+let $conn_id= `SELECT CONNECTION_ID()`;
+let $conn_nr= conn_$conn_id;
+
+START TRANSACTION;
+UPDATE t1 SET b = 'changed' WHERE id=@rowid;
+SELECT b FROM t1 WHERE id=@rowid;
+COMMIT;
+
+START TRANSACTION;
+DELETE FROM t1 WHERE id=@rowid;
+INSERT INTO t1 (id, b) VALUES (@rowid, 'newly_inserted');
+SELECT b FROM t1 WHERE id=@rowid;
+COMMIT;
+
+--replace_result $conn_nr <conn_nr>
+eval CREATE TABLE tw_$conn_nr AS SELECT * FROM t1;
+
+--replace_result $conn_nr <conn_nr>
+eval DROP TABLE tw_$conn_nr;
diff --git a/mysql-test/suite/rpl/r/rpl_loaddata_m.result b/mysql-test/suite/rpl/r/rpl_loaddata_m.result
index a1294d515fa..4639c717cea 100644
--- a/mysql-test/suite/rpl/r/rpl_loaddata_m.result
+++ b/mysql-test/suite/rpl/r/rpl_loaddata_m.result
@@ -24,6 +24,7 @@ information_schema
mtr
mysql
mysqltest
+performance_schema
test
USE test;
SHOW TABLES;
diff --git a/mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result b/mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result
index 27960be8054..13ee20cb3a0 100644
--- a/mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result
+++ b/mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result
@@ -11,6 +11,7 @@ Database
information_schema
mtr
mysql
+performance_schema
test
test_ignore
USE test;
@@ -38,6 +39,7 @@ Database
information_schema
mtr
mysql
+performance_schema
test
USE test;
SHOW TABLES;
diff --git a/mysql-test/t/bug46080-master.opt b/mysql-test/t/bug46080-master.opt
index edcc54fa428..71024d39356 100644
--- a/mysql-test/t/bug46080-master.opt
+++ b/mysql-test/t/bug46080-master.opt
@@ -1 +1 @@
---skip-grant-tables --skip-name-resolve --loose-safemalloc-mem-limit=4000000
+--loose-performance-schema=0 --skip-grant-tables --skip-name-resolve --loose-safemalloc-mem-limit=4000000
diff --git a/mysql-test/t/mysqld--help-notwin.test b/mysql-test/t/mysqld--help-notwin.test
index 6db5dd830a6..e3d1ca97128 100644
--- a/mysql-test/t/mysqld--help-notwin.test
+++ b/mysql-test/t/mysqld--help-notwin.test
@@ -1,8 +1,24 @@
+# Copyright (C) 2009-2010 Sun Microsystems, Inc.
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
#
# mysqld --help
#
--source include/not_embedded.inc
--source include/not_windows.inc
+--source include/have_perfschema.inc
--source include/mysqld--help.inc
diff --git a/mysql-test/t/mysqld--help-win.test b/mysql-test/t/mysqld--help-win.test
index 416beb1d34c..56cfec8999b 100644
--- a/mysql-test/t/mysqld--help-win.test
+++ b/mysql-test/t/mysqld--help-win.test
@@ -1,8 +1,24 @@
+# Copyright (C) 2009-2010 Sun Microsystems, Inc.
+#
+# 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, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
#
# mysqld --help
#
--source include/not_embedded.inc
--source include/windows.inc
+--source include/have_perfschema.inc
--source include/mysqld--help.inc