From: Marc Alff Date: September 24 2010 6:21pm Subject: bzr commit into mysql-next-mr-wl4816 branch (marc.alff:3197) WL#4816 List-Archive: http://lists.mysql.com/commits/119082 Message-Id: <20100924182130.E461B45E80@linux-su11.site> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0291743218013075556==" --===============0291743218013075556== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/malff/BZR_TREE/mysql-next-mr-wl4816/ based on revid:marc.alff@stripped 3197 Marc Alff 2010-09-24 WL#4816 PERFORMANCE_SCHEMA SUMMARIES Porting to 5.6, continued added: mysql-test/suite/perfschema/r/ddl_os_global_by_type.result mysql-test/suite/perfschema/r/ddl_setup_objects.result mysql-test/suite/perfschema/r/dml_os_global_by_type.result mysql-test/suite/perfschema/r/dml_setup_objects.result mysql-test/suite/perfschema/r/setup_objects.result mysql-test/suite/perfschema/r/start_server_no_setup_objects.result mysql-test/suite/perfschema/t/ddl_os_global_by_type.test mysql-test/suite/perfschema/t/ddl_setup_objects.test mysql-test/suite/perfschema/t/dml_os_global_by_type.test mysql-test/suite/perfschema/t/dml_setup_objects.test mysql-test/suite/perfschema/t/setup_objects.test mysql-test/suite/perfschema/t/start_server_no_setup_objects-master.opt mysql-test/suite/perfschema/t/start_server_no_setup_objects.test mysql-test/suite/sys_vars/r/pfs_setup_objects_size_basic.result mysql-test/suite/sys_vars/t/pfs_setup_objects_size_basic-master.opt mysql-test/suite/sys_vars/t/pfs_setup_objects_size_basic.test modified: mysql-test/suite/perfschema/include/start_server_common.inc mysql-test/suite/perfschema/r/start_server_no_cond_class.result mysql-test/suite/perfschema/r/start_server_no_cond_inst.result mysql-test/suite/perfschema/r/start_server_no_file_class.result mysql-test/suite/perfschema/r/start_server_no_file_inst.result mysql-test/suite/perfschema/r/start_server_no_mutex_class.result mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result mysql-test/suite/perfschema/r/start_server_no_setup_actors.result mysql-test/suite/perfschema/r/start_server_no_table_hdl.result mysql-test/suite/perfschema/r/start_server_no_table_inst.result mysql-test/suite/perfschema/r/start_server_no_thread_class.result mysql-test/suite/perfschema/r/start_server_no_thread_inst.result mysql-test/suite/perfschema/r/start_server_nothing.result mysql-test/suite/perfschema/r/start_server_off.result mysql-test/suite/perfschema/r/start_server_on.result storage/perfschema/pfs_instr.cc storage/perfschema/pfs_instr.h storage/perfschema/pfs_instr_class.cc storage/perfschema/pfs_instr_class.h storage/perfschema/pfs_setup_object.cc storage/perfschema/table_ews_global_by_event_name.cc storage/perfschema/table_helper.h === modified file 'mysql-test/suite/perfschema/include/start_server_common.inc' --- a/mysql-test/suite/perfschema/include/start_server_common.inc 2010-09-01 22:59:33 +0000 +++ b/mysql-test/suite/perfschema/include/start_server_common.inc 2010-09-24 18:21:22 +0000 @@ -37,11 +37,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; --enable_result_log === added file 'mysql-test/suite/perfschema/r/ddl_os_global_by_type.result' --- a/mysql-test/suite/perfschema/r/ddl_os_global_by_type.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/ddl_os_global_by_type.result 2010-09-24 18:21:22 +0000 @@ -0,0 +1,10 @@ +alter table performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE +add column foo integer; +ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema' +truncate table performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; +ALTER TABLE performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE +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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE(OBJECT_NAME); +ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema' === added file 'mysql-test/suite/perfschema/r/ddl_setup_objects.result' --- a/mysql-test/suite/perfschema/r/ddl_setup_objects.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/ddl_setup_objects.result 2010-09-24 18:21:22 +0000 @@ -0,0 +1,16 @@ +alter table performance_schema.SETUP_OBJECTS add column foo integer; +ERROR 42000: Access denied for user 'root'@'localhost' to database 'performance_schema' +drop table if exists test.SETUP_OBJECTS; +create table test.SETUP_OBJECTS as +select * from performance_schema.SETUP_OBJECTS; +truncate table performance_schema.SETUP_OBJECTS; +select count(*) from performance_schema.SETUP_OBJECTS; +count(*) +0 +insert into performance_schema.SETUP_OBJECTS +select * from test.SETUP_OBJECTS; +drop table test.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' === added file 'mysql-test/suite/perfschema/r/dml_os_global_by_type.result' --- a/mysql-test/suite/perfschema/r/dml_os_global_by_type.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/dml_os_global_by_type.result 2010-09-24 18:21:22 +0000 @@ -0,0 +1,45 @@ +select * from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE +where object_schema = 'performance_schema' limit 1; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT +# # # # # # # # +select * from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE +where object_schema='FOO'; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT +select * from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE +order by count_star limit 1; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT +# # # # # # # # +select * from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE +order by count_star desc limit 1; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT +# # # # # # # # +select * from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE +where object_type = 'TABLE' order by object_schema, object_name limit 1; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT +# # # # # # # # +select * from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE +where object_type = 'TABLE' order by object_schema desc, object_name desc limit 1; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME COUNT_STAR SUM_TIMER_WAIT MIN_TIMER_WAIT AVG_TIMER_WAIT MAX_TIMER_WAIT +# # # # # # # # +insert into performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE +set object_type='TABLE', schema_name='FOO', object_name='BAR', +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 'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +update performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE +set count_star=12; +ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +update performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE +set count_star=12 where object_name like "FOO"; +ERROR 42000: UPDATE command denied to user 'root'@'localhost' for table 'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +delete from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE +where count_star=1; +ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +delete from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; +ERROR 42000: DELETE command denied to user 'root'@'localhost' for table 'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +LOCK TABLES performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE READ; +ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +UNLOCK TABLES; +LOCK TABLES performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE WRITE; +ERROR 42000: SELECT, LOCK TABLES command denied to user 'root'@'localhost' for table 'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +UNLOCK TABLES; === added file 'mysql-test/suite/perfschema/r/dml_setup_objects.result' --- a/mysql-test/suite/perfschema/r/dml_setup_objects.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/dml_setup_objects.result 2010-09-24 18:21:22 +0000 @@ -0,0 +1,67 @@ +drop table if exists test.SETUP_OBJECTS; +create table test.SETUP_OBJECTS as +select * from performance_schema.SETUP_OBJECTS; +truncate table performance_schema.SETUP_OBJECTS; +select * from performance_schema.SETUP_OBJECTS; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME TIMED +select * from performance_schema.SETUP_OBJECTS +order by object_type, object_schema, object_name; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME TIMED +select * from performance_schema.SETUP_OBJECTS +where object_type = 'TABLE' + order by object_type, object_schema, object_name; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME TIMED +select * from performance_schema.SETUP_OBJECTS +order by object_type, object_schema, object_name; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME TIMED +insert into performance_schema.SETUP_OBJECTS +set object_type='ILLEGAL', object_schema='FOO', object_name='BAR', +timed='YES'; +ERROR 23000: Cannot add or update a child row: a foreign key constraint fails () +insert into performance_schema.SETUP_OBJECTS +set object_type='TABLE', object_schema='FOO', object_name='BAR', +timed='YES'; +insert into performance_schema.SETUP_OBJECTS +set object_type='TABLE', object_schema='FOO', object_name='BAR', +timed='NO'; +ERROR 23000: Can't write; duplicate key in table 'SETUP_OBJECTS' +delete from performance_schema.SETUP_OBJECTS +where object_type='TABLE' and object_schema='FOO'; +select * from performance_schema.SETUP_OBJECTS +order by object_type, object_schema, object_name; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME TIMED +insert into performance_schema.SETUP_OBJECTS +set object_type='TABLE', object_schema='FOO', object_name='BAR', +timed='YES'; +select * from performance_schema.SETUP_OBJECTS +order by object_type, object_schema, object_name; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME TIMED +TABLE FOO BAR YES +update performance_schema.SETUP_OBJECTS +set object_type='ILLEGAL'; +ERROR HY000: Invalid performance_schema usage. +update performance_schema.SETUP_OBJECTS +set object_schema='ILLEGAL'; +ERROR HY000: Invalid performance_schema usage. +update performance_schema.SETUP_OBJECTS +set object_name='ILLEGAL'; +ERROR HY000: Invalid performance_schema usage. +update performance_schema.SETUP_OBJECTS +set timed='NO'; +select * from performance_schema.SETUP_OBJECTS +order by object_type, object_schema, object_name; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME TIMED +TABLE FOO BAR NO +update performance_schema.SETUP_OBJECTS +set timed='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; +truncate table performance_schema.SETUP_OBJECTS; +insert into performance_schema.SETUP_OBJECTS +select * from test.SETUP_OBJECTS; +drop table test.SETUP_OBJECTS; === added file 'mysql-test/suite/perfschema/r/setup_objects.result' --- a/mysql-test/suite/perfschema/r/setup_objects.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/setup_objects.result 2010-09-24 18:21:22 +0000 @@ -0,0 +1,102 @@ +drop table if exists test.SETUP_OBJECTS; +create table test.SETUP_OBJECTS as select * from performance_schema.SETUP_OBJECTS; +truncate table performance_schema.SETUP_OBJECTS; +insert into performance_schema.SETUP_OBJECTS +values ('TABLE', 'db1', 't1', 'YES'); +insert into performance_schema.SETUP_OBJECTS +values ('TABLE', 'db1', 't2', 'NO'); +insert into performance_schema.SETUP_OBJECTS +values ('TABLE', 'db1', '%', 'YES'); +insert into performance_schema.SETUP_OBJECTS +values ('TABLE', 'db2', 't1', 'YES'); +insert into performance_schema.SETUP_OBJECTS +values ('TABLE', 'db2', 't2', 'NO'); +select * from performance_schema.SETUP_OBJECTS +order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME; +OBJECT_TYPE OBJECT_SCHEMA OBJECT_NAME TIMED +TABLE db1 % YES +TABLE db1 t1 YES +TABLE db1 t2 NO +TABLE db2 t1 YES +TABLE db2 t2 NO +drop database if exists db1; +drop database if exists db2; +drop database if exists db3; +create database db1; +create database db2; +create database db3; +create table db1.t1(a int); +create table db1.t2(a int); +create table db1.t3(a int); +create table db1.t4(a int); +create table db1.t5(a int); +create table db2.t1(a int); +create table db2.t2(a int); +create table db2.t3(a int); +create table db2.t4(a int); +create table db2.t5(a int); +create table db3.t1(a int); +select * from db1.t1; +a +select * from db1.t2; +a +select * from db1.t3; +a +select * from db1.t4; +a +select * from db1.t5; +a +select * from db2.t1; +a +select * from db2.t2; +a +select * from db2.t3; +a +select * from db2.t4; +a +select * from db2.t5; +a +select * from db3.t1; +a +create table db3.t2(a int); +select * from db3.t2; +a +select distinct OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA +from performance_schema.EVENTS_WAITS_HISTORY_LONG +where OBJECT_SCHEMA like "db%" + group by OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA +order by OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA; +OBJECT_TYPE OBJECT_NAME OBJECT_SCHEMA +TABLE t1 db1 +TABLE t1 db2 +TABLE t2 db1 +TABLE t2 db2 +TABLE t3 db1 +TABLE t4 db1 +TABLE t5 db1 +select distinct OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA +from performance_schema.EVENTS_WAITS_HISTORY_LONG +where OBJECT_SCHEMA like "db%" and TIMER_END is not NULL +group by OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA +order by OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA; +OBJECT_TYPE OBJECT_NAME OBJECT_SCHEMA +TABLE t1 db1 +TABLE t1 db2 +TABLE t3 db1 +TABLE t4 db1 +TABLE t5 db1 +update performance_schema.SETUP_OBJECTS +set timed='YES' where OBJECT_SCHEMA = '%'; +create table db3.t3(a int); +select * from db3.t3; +a +truncate table performance_schema.SETUP_OBJECTS; +select count(*) from performance_schema.SETUP_OBJECTS; +count(*) +0 +drop database db1; +drop database db2; +drop database db3; +truncate table performance_schema.SETUP_OBJECTS; +insert into performance_schema.SETUP_OBJECTS select * from test.SETUP_OBJECTS; +drop table test.SETUP_OBJECTS; === modified file 'mysql-test/suite/perfschema/r/start_server_no_cond_class.result' --- a/mysql-test/suite/perfschema/r/start_server_no_cond_class.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_cond_class.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_no_cond_inst.result' --- a/mysql-test/suite/perfschema/r/start_server_no_cond_inst.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_cond_inst.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_no_file_class.result' --- a/mysql-test/suite/perfschema/r/start_server_no_file_class.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_file_class.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_no_file_inst.result' --- a/mysql-test/suite/perfschema/r/start_server_no_file_inst.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_file_inst.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_no_mutex_class.result' --- a/mysql-test/suite/perfschema/r/start_server_no_mutex_class.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_mutex_class.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result' --- a/mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result' --- a/mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result' --- a/mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_no_setup_actors.result' --- a/mysql-test/suite/perfschema/r/start_server_no_setup_actors.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_setup_actors.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === added file 'mysql-test/suite/perfschema/r/start_server_no_setup_objects.result' --- a/mysql-test/suite/perfschema/r/start_server_no_setup_objects.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_setup_objects.result 2010-09-24 18:21:22 +0000 @@ -0,0 +1,67 @@ +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(*) +5 +select count(*) > 1 from performance_schema.SETUP_INSTRUMENTS; +count(*) > 1 +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_INSTANCE; +select * from performance_schema.EVENTS_WAITS_SUMMARY_BY_THREAD_BY_EVENT_NAME; +select * from performance_schema.EVENTS_WAITS_SUMMARY_GLOBAL_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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; +select * from performance_schema.PERFORMANCE_TIMERS; +select * from performance_schema.RWLOCK_INSTANCES; +select * from performance_schema.SETUP_ACTORS; +select * from performance_schema.SETUP_CONSUMERS; +select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; +select * from performance_schema.SETUP_TIMERS; +select * from performance_schema.THREADS; +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 1000000 +performance_schema_max_rwlock_classes 30 +performance_schema_max_rwlock_instances 1000000 +performance_schema_max_table_handles 10000 +performance_schema_max_table_instances 1000 +performance_schema_max_thread_classes 50 +performance_schema_max_thread_instances 1000 +performance_schema_setup_actors_size 100 +performance_schema_setup_objects_size 0 +show engine PERFORMANCE_SCHEMA status; +show status like "performance_schema%"; +show variables like "performance_schema_setup_objects_size"; +Variable_name Value +performance_schema_setup_objects_size 0 +select count(*) from performance_schema.SETUP_OBJECTS; +count(*) +0 === modified file 'mysql-test/suite/perfschema/r/start_server_no_table_hdl.result' --- a/mysql-test/suite/perfschema/r/start_server_no_table_hdl.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_table_hdl.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_no_table_inst.result' --- a/mysql-test/suite/perfschema/r/start_server_no_table_inst.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_table_inst.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_no_thread_class.result' --- a/mysql-test/suite/perfschema/r/start_server_no_thread_class.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_thread_class.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_no_thread_inst.result' --- a/mysql-test/suite/perfschema/r/start_server_no_thread_inst.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_no_thread_inst.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_nothing.result' --- a/mysql-test/suite/perfschema/r/start_server_nothing.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_nothing.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_off.result' --- a/mysql-test/suite/perfschema/r/start_server_off.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_off.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === modified file 'mysql-test/suite/perfschema/r/start_server_on.result' --- a/mysql-test/suite/perfschema/r/start_server_on.result 2010-09-23 16:08:54 +0000 +++ b/mysql-test/suite/perfschema/r/start_server_on.result 2010-09-24 18:21:22 +0000 @@ -28,11 +28,13 @@ select * from performance_schema.FILE_IN 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; select * from performance_schema.PERFORMANCE_TIMERS; select * from performance_schema.RWLOCK_INSTANCES; select * from performance_schema.SETUP_ACTORS; select * from performance_schema.SETUP_CONSUMERS; select * from performance_schema.SETUP_INSTRUMENTS; +select * from performance_schema.SETUP_OBJECTS; select * from performance_schema.SETUP_TIMERS; select * from performance_schema.THREADS; show variables like "performance_schema%"; === added file 'mysql-test/suite/perfschema/t/ddl_os_global_by_type.test' --- a/mysql-test/suite/perfschema/t/ddl_os_global_by_type.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/ddl_os_global_by_type.test 2010-09-24 18:21:22 +0000 @@ -0,0 +1,34 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, 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.OBJECTS_SUMMARY_GLOBAL_BY_TYPE + add column foo integer; + +truncate table performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; + +-- error ER_DBACCESS_DENIED_ERROR +ALTER TABLE performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE + ADD INDEX test_index(OBJECT_NAME); + +-- error ER_DBACCESS_DENIED_ERROR +CREATE UNIQUE INDEX test_index + ON performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE(OBJECT_NAME); + === added file 'mysql-test/suite/perfschema/t/ddl_setup_objects.test' --- a/mysql-test/suite/perfschema/t/ddl_setup_objects.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/ddl_setup_objects.test 2010-09-24 18:21:22 +0000 @@ -0,0 +1,45 @@ +# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA + +--source include/not_embedded.inc +--source include/have_perfschema.inc + +--replace_result '\'setup_objects' '\'SETUP_OBJECTS' +-- error ER_DBACCESS_DENIED_ERROR +alter table performance_schema.SETUP_OBJECTS add column foo integer; + +--disable_warnings +drop table if exists test.SETUP_OBJECTS; +--enable_warnings + +create table test.SETUP_OBJECTS as + select * from performance_schema.SETUP_OBJECTS; + +truncate table performance_schema.SETUP_OBJECTS; + +select count(*) from performance_schema.SETUP_OBJECTS; + +insert into performance_schema.SETUP_OBJECTS + select * from test.SETUP_OBJECTS; +drop table test.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); + === added file 'mysql-test/suite/perfschema/t/dml_os_global_by_type.test' --- a/mysql-test/suite/perfschema/t/dml_os_global_by_type.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/dml_os_global_by_type.test 2010-09-24 18:21:22 +0000 @@ -0,0 +1,79 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, 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 # +select * from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE + where object_schema = 'performance_schema' limit 1; + +select * from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE + where object_schema='FOO'; + +--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # +select * from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE + order by count_star limit 1; + +--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # +select * from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE + order by count_star desc limit 1; + +--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # +select * from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE + where object_type = 'TABLE' order by object_schema, object_name limit 1; + +--replace_column 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # +select * from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE + where object_type = 'TABLE' order by object_schema desc, object_name desc limit 1; + +--replace_result '\'objects_summary_global_by_type' '\'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +--error ER_TABLEACCESS_DENIED_ERROR +insert into performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE + set object_type='TABLE', schema_name='FOO', object_name='BAR', + count_star=1, sum_timer_wait=2, min_timer_wait=3, + avg_timer_wait=4, max_timer_wait=5; + +--replace_result '\'objects_summary_global_by_type' '\'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +--error ER_TABLEACCESS_DENIED_ERROR +update performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE + set count_star=12; + +--replace_result '\'objects_summary_global_by_type' '\'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +--error ER_TABLEACCESS_DENIED_ERROR +update performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE + set count_star=12 where object_name like "FOO"; + +--replace_result '\'objects_summary_global_by_type' '\'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +--error ER_TABLEACCESS_DENIED_ERROR +delete from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE + where count_star=1; + +--replace_result '\'objects_summary_global_by_type' '\'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +--error ER_TABLEACCESS_DENIED_ERROR +delete from performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE; + +--replace_result '\'objects_summary_global_by_type' '\'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +-- error ER_TABLEACCESS_DENIED_ERROR +LOCK TABLES performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE READ; +UNLOCK TABLES; + +--replace_result '\'objects_summary_global_by_type' '\'OBJECTS_SUMMARY_GLOBAL_BY_TYPE' +-- error ER_TABLEACCESS_DENIED_ERROR +LOCK TABLES performance_schema.OBJECTS_SUMMARY_GLOBAL_BY_TYPE WRITE; +UNLOCK TABLES; + === added file 'mysql-test/suite/perfschema/t/dml_setup_objects.test' --- a/mysql-test/suite/perfschema/t/dml_setup_objects.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/dml_setup_objects.test 2010-09-24 18:21:22 +0000 @@ -0,0 +1,109 @@ +# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA + +--source include/not_embedded.inc +--source include/have_perfschema.inc + +--disable_warnings +drop table if exists test.SETUP_OBJECTS; +--enable_warnings + +# Save the setup +create table test.SETUP_OBJECTS as + select * from performance_schema.SETUP_OBJECTS; +truncate table performance_schema.SETUP_OBJECTS; + +# Test + +select * from performance_schema.SETUP_OBJECTS; + +select * from performance_schema.SETUP_OBJECTS + order by object_type, object_schema, object_name; + +select * from performance_schema.SETUP_OBJECTS + where object_type = 'TABLE' + order by object_type, object_schema, object_name; + +select * from performance_schema.SETUP_OBJECTS + order by object_type, object_schema, object_name; + +--error ER_NO_REFERENCED_ROW_2 +insert into performance_schema.SETUP_OBJECTS + set object_type='ILLEGAL', object_schema='FOO', object_name='BAR', + timed='YES'; + +insert into performance_schema.SETUP_OBJECTS + set object_type='TABLE', object_schema='FOO', object_name='BAR', + timed='YES'; + +--replace_result '\'setup_objects' '\'SETUP_OBJECTS' +--error ER_DUP_KEY +insert into performance_schema.SETUP_OBJECTS + set object_type='TABLE', object_schema='FOO', object_name='BAR', + timed='NO'; + +delete from performance_schema.SETUP_OBJECTS + where object_type='TABLE' and object_schema='FOO'; + +select * from performance_schema.SETUP_OBJECTS + order by object_type, object_schema, object_name; + +insert into performance_schema.SETUP_OBJECTS + set object_type='TABLE', object_schema='FOO', object_name='BAR', + timed='YES'; + +select * from performance_schema.SETUP_OBJECTS + order by object_type, object_schema, object_name; + +--error ER_WRONG_PERFSCHEMA_USAGE +update performance_schema.SETUP_OBJECTS + set object_type='ILLEGAL'; + +--error ER_WRONG_PERFSCHEMA_USAGE +update performance_schema.SETUP_OBJECTS + set object_schema='ILLEGAL'; + +--error ER_WRONG_PERFSCHEMA_USAGE +update performance_schema.SETUP_OBJECTS + set object_name='ILLEGAL'; + +update performance_schema.SETUP_OBJECTS + set timed='NO'; + +select * from performance_schema.SETUP_OBJECTS + order by object_type, object_schema, object_name; + +update performance_schema.SETUP_OBJECTS + set timed='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; + +# Restore the setup +truncate table performance_schema.SETUP_OBJECTS; +insert into performance_schema.SETUP_OBJECTS + select * from test.SETUP_OBJECTS; +drop table test.SETUP_OBJECTS; + === added file 'mysql-test/suite/perfschema/t/setup_objects.test' --- a/mysql-test/suite/perfschema/t/setup_objects.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/setup_objects.test 2010-09-24 18:21:22 +0000 @@ -0,0 +1,118 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +--source include/not_embedded.inc +--source include/have_perfschema.inc + +--disable_warnings +drop table if exists test.SETUP_OBJECTS; +--enable_warnings + +# Save the setup +create table test.SETUP_OBJECTS as select * from performance_schema.SETUP_OBJECTS; +truncate table performance_schema.SETUP_OBJECTS; + +insert into performance_schema.SETUP_OBJECTS + values ('TABLE', 'db1', 't1', 'YES'); + +insert into performance_schema.SETUP_OBJECTS + values ('TABLE', 'db1', 't2', 'NO'); + +insert into performance_schema.SETUP_OBJECTS + values ('TABLE', 'db1', '%', 'YES'); + +insert into performance_schema.SETUP_OBJECTS + values ('TABLE', 'db2', 't1', 'YES'); + +insert into performance_schema.SETUP_OBJECTS + values ('TABLE', 'db2', 't2', 'NO'); + +select * from performance_schema.SETUP_OBJECTS + order by OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME; + +--disable_warnings +drop database if exists db1; +drop database if exists db2; +drop database if exists db3; +--enable_warnings + +create database db1; +create database db2; +create database db3; + +create table db1.t1(a int); +create table db1.t2(a int); +create table db1.t3(a int); +create table db1.t4(a int); +create table db1.t5(a int); + +create table db2.t1(a int); +create table db2.t2(a int); +create table db2.t3(a int); +create table db2.t4(a int); +create table db2.t5(a int); + +create table db3.t1(a int); + +select * from db1.t1; +select * from db1.t2; +select * from db1.t3; +select * from db1.t4; +select * from db1.t5; + +select * from db2.t1; +select * from db2.t2; +select * from db2.t3; +select * from db2.t4; +select * from db2.t5; + +select * from db3.t1; + +create table db3.t2(a int); +select * from db3.t2; + +# Verify what is instrumented +select distinct OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA + from performance_schema.EVENTS_WAITS_HISTORY_LONG + where OBJECT_SCHEMA like "db%" + group by OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA + order by OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA; + +# Verify what is instrumented and timed +select distinct OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA + from performance_schema.EVENTS_WAITS_HISTORY_LONG + where OBJECT_SCHEMA like "db%" and TIMER_END is not NULL + group by OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA + order by OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA; + +update performance_schema.SETUP_OBJECTS + set timed='YES' where OBJECT_SCHEMA = '%'; + +create table db3.t3(a int); +select * from db3.t3; + +truncate table performance_schema.SETUP_OBJECTS; + +select count(*) from performance_schema.SETUP_OBJECTS; + +drop database db1; +drop database db2; +drop database db3; + +# Restore the setup +truncate table performance_schema.SETUP_OBJECTS; +insert into performance_schema.SETUP_OBJECTS select * from test.SETUP_OBJECTS; +drop table test.SETUP_OBJECTS; + === added file 'mysql-test/suite/perfschema/t/start_server_no_setup_objects-master.opt' --- a/mysql-test/suite/perfschema/t/start_server_no_setup_objects-master.opt 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/start_server_no_setup_objects-master.opt 2010-09-24 18:21:22 +0000 @@ -0,0 +1,2 @@ +--loose-enable-performance-schema +--loose-performance_schema_setup_objects_size=0 === added file 'mysql-test/suite/perfschema/t/start_server_no_setup_objects.test' --- a/mysql-test/suite/perfschema/t/start_server_no_setup_objects.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/perfschema/t/start_server_no_setup_objects.test 2010-09-24 18:21:22 +0000 @@ -0,0 +1,28 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA + +# Tests for PERFORMANCE_SCHEMA + +--source include/not_embedded.inc +--source include/have_perfschema.inc + +--source ../include/start_server_common.inc + +# Expect no setup_objects +show variables like "performance_schema_setup_objects_size"; + +# Expect no setup_objects +select count(*) from performance_schema.SETUP_OBJECTS; + === added file 'mysql-test/suite/sys_vars/r/pfs_setup_objects_size_basic.result' --- a/mysql-test/suite/sys_vars/r/pfs_setup_objects_size_basic.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/sys_vars/r/pfs_setup_objects_size_basic.result 2010-09-24 18:21:22 +0000 @@ -0,0 +1,23 @@ +select @@global.performance_schema_setup_objects_size; +@@global.performance_schema_setup_objects_size +123 +select @@session.performance_schema_setup_objects_size; +ERROR HY000: Variable 'performance_schema_setup_objects_size' is a GLOBAL variable +show global variables like 'performance_schema_setup_objects_size'; +Variable_name Value +performance_schema_setup_objects_size 123 +show session variables like 'performance_schema_setup_objects_size'; +Variable_name Value +performance_schema_setup_objects_size 123 +select * from information_schema.global_variables +where variable_name='performance_schema_setup_objects_size'; +VARIABLE_NAME VARIABLE_VALUE +PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE 123 +select * from information_schema.session_variables +where variable_name='performance_schema_setup_objects_size'; +VARIABLE_NAME VARIABLE_VALUE +PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE 123 +set global performance_schema_setup_objects_size=1; +ERROR HY000: Variable 'performance_schema_setup_objects_size' is a read only variable +set session performance_schema_setup_objects_size=1; +ERROR HY000: Variable 'performance_schema_setup_objects_size' is a read only variable === added file 'mysql-test/suite/sys_vars/t/pfs_setup_objects_size_basic-master.opt' --- a/mysql-test/suite/sys_vars/t/pfs_setup_objects_size_basic-master.opt 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/sys_vars/t/pfs_setup_objects_size_basic-master.opt 2010-09-24 18:21:22 +0000 @@ -0,0 +1,2 @@ +--loose-enable-performance-schema +--loose-performance-schema-setup-objects-size=123 === added file 'mysql-test/suite/sys_vars/t/pfs_setup_objects_size_basic.test' --- a/mysql-test/suite/sys_vars/t/pfs_setup_objects_size_basic.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/suite/sys_vars/t/pfs_setup_objects_size_basic.test 2010-09-24 18:21:22 +0000 @@ -0,0 +1,47 @@ +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +--source include/not_embedded.inc +--source include/have_perfschema.inc + +# +# Only global +# + +select @@global.performance_schema_setup_objects_size; + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.performance_schema_setup_objects_size; + +show global variables like 'performance_schema_setup_objects_size'; + +show session variables like 'performance_schema_setup_objects_size'; + +select * from information_schema.global_variables + where variable_name='performance_schema_setup_objects_size'; + +select * from information_schema.session_variables + where variable_name='performance_schema_setup_objects_size'; + +# +# Read-only +# + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set global performance_schema_setup_objects_size=1; + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set session performance_schema_setup_objects_size=1; + === modified file 'storage/perfschema/pfs_instr.cc' --- a/storage/perfschema/pfs_instr.cc 2010-09-23 16:08:54 +0000 +++ b/storage/perfschema/pfs_instr.cc 2010-09-24 18:21:22 +0000 @@ -463,6 +463,8 @@ PFS_mutex* create_mutex(PFS_mutex_class pfs->m_owner= NULL; pfs->m_last_locked= 0; pfs->m_lock.dirty_to_allocated(); + if (klass->is_singleton()) + klass->m_singleton= pfs; return pfs; } } @@ -480,10 +482,13 @@ PFS_mutex* create_mutex(PFS_mutex_class void destroy_mutex(PFS_mutex *pfs) { DBUG_ASSERT(pfs != NULL); + PFS_mutex_class *klass= pfs->m_class; /* Aggregate to EVENTS_WAITS_SUMMARY_BY_EVENT_NAME */ - uint index= pfs->m_class->m_event_name_index; + uint index= klass->m_event_name_index; global_instr_class_waits_array[index].aggregate(& pfs->m_wait_stat); pfs->m_wait_stat.reset(); + if (klass->is_singleton()) + klass->m_singleton= NULL; pfs->m_lock.allocated_to_free(); } @@ -520,6 +525,8 @@ PFS_rwlock* create_rwlock(PFS_rwlock_cla pfs->m_readers= 0; pfs->m_last_written= 0; pfs->m_last_read= 0; + if (klass->is_singleton()) + klass->m_singleton= pfs; return pfs; } } @@ -537,10 +544,13 @@ PFS_rwlock* create_rwlock(PFS_rwlock_cla void destroy_rwlock(PFS_rwlock *pfs) { DBUG_ASSERT(pfs != NULL); + PFS_rwlock_class *klass= pfs->m_class; /* Aggregate to EVENTS_WAITS_SUMMARY_BY_EVENT_NAME */ - uint index= pfs->m_class->m_event_name_index; + uint index= klass->m_event_name_index; global_instr_class_waits_array[index].aggregate(& pfs->m_wait_stat); pfs->m_wait_stat.reset(); + if (klass->is_singleton()) + klass->m_singleton= NULL; pfs->m_lock.allocated_to_free(); } @@ -573,6 +583,8 @@ PFS_cond* create_cond(PFS_cond_class *kl pfs->m_cond_stat.m_broadcast_count= 0; pfs->m_wait_stat.reset(); pfs->m_lock.dirty_to_allocated(); + if (klass->is_singleton()) + klass->m_singleton= pfs; return pfs; } } @@ -590,10 +602,13 @@ PFS_cond* create_cond(PFS_cond_class *kl void destroy_cond(PFS_cond *pfs) { DBUG_ASSERT(pfs != NULL); + PFS_cond_class *klass= pfs->m_class; /* Aggregate to EVENTS_WAITS_SUMMARY_BY_EVENT_NAME */ - uint index= pfs->m_class->m_event_name_index; + uint index= klass->m_event_name_index; global_instr_class_waits_array[index].aggregate(& pfs->m_wait_stat); pfs->m_wait_stat.reset(); + if (klass->is_singleton()) + klass->m_singleton= NULL; pfs->m_lock.allocated_to_free(); } @@ -669,6 +684,30 @@ PFS_thread* create_thread(PFS_thread_cla return NULL; } +PFS_mutex *sanitize_mutex(PFS_mutex *unsafe) +{ + if ((&mutex_array[0] <= unsafe) && + (unsafe < &mutex_array[mutex_max])) + return unsafe; + return NULL; +} + +PFS_rwlock *sanitize_rwlock(PFS_rwlock *unsafe) +{ + if ((&rwlock_array[0] <= unsafe) && + (unsafe < &rwlock_array[rwlock_max])) + return unsafe; + return NULL; +} + +PFS_cond *sanitize_cond(PFS_cond *unsafe) +{ + if ((&cond_array[0] <= unsafe) && + (unsafe < &cond_array[cond_max])) + return unsafe; + return NULL; +} + /** Sanitize a PFS_thread pointer. Validate that the PFS_thread is part of thread_array. @@ -686,6 +725,14 @@ PFS_thread *sanitize_thread(PFS_thread * return NULL; } +PFS_file *sanitize_file(PFS_file *unsafe) +{ + if ((&file_array[0] <= unsafe) && + (unsafe < &file_array[file_max])) + return unsafe; + return NULL; +} + /** Destroy instrumentation for a thread instance. @param pfs the thread to destroy @@ -872,6 +919,8 @@ search: if (likely(res == 0)) { pfs->m_lock.dirty_to_allocated(); + if (klass->is_singleton()) + klass->m_singleton= pfs; return pfs; } @@ -921,18 +970,21 @@ void destroy_file(PFS_thread *thread, PF DBUG_ASSERT(thread != NULL); DBUG_ASSERT(thread->m_filename_hash_pins != NULL); DBUG_ASSERT(pfs != NULL); + PFS_file_class *klass= pfs->m_class; /* Aggregate to EVENTS_WAITS_SUMMARY_BY_EVENT_NAME */ - uint index= pfs->m_class->m_event_name_index; + uint index= klass->m_event_name_index; global_instr_class_waits_array[index].aggregate(& pfs->m_wait_stat); pfs->m_wait_stat.reset(); /* Aggregate to FILE_SUMMARY_BY_EVENT_NAME */ - pfs->m_class->m_file_stat.m_io_stat.aggregate(& pfs->m_file_stat.m_io_stat); + klass->m_file_stat.m_io_stat.aggregate(& pfs->m_file_stat.m_io_stat); pfs->m_file_stat.m_io_stat.reset(); - + lf_hash_delete(&filename_hash, thread->m_filename_hash_pins, pfs->m_filename, pfs->m_filename_length); + if (klass->is_singleton()) + klass->m_singleton= NULL; pfs->m_lock.allocated_to_free(); } === modified file 'storage/perfschema/pfs_instr.h' --- a/storage/perfschema/pfs_instr.h 2010-09-23 16:08:54 +0000 +++ b/storage/perfschema/pfs_instr.h 2010-09-24 18:21:22 +0000 @@ -275,7 +275,11 @@ struct PFS_thread extern PFS_single_stat *global_instr_class_waits_array; +PFS_mutex *sanitize_mutex(PFS_mutex *unsafe); +PFS_rwlock *sanitize_rwlock(PFS_rwlock *unsafe); +PFS_cond *sanitize_cond(PFS_cond *unsafe); PFS_thread *sanitize_thread(PFS_thread *unsafe); +PFS_file *sanitize_file(PFS_file *unsafe); int init_instruments(const PFS_global_param *param); void cleanup_instruments(); === modified file 'storage/perfschema/pfs_instr_class.cc' --- a/storage/perfschema/pfs_instr_class.cc 2010-09-23 16:08:54 +0000 +++ b/storage/perfschema/pfs_instr_class.cc 2010-09-24 18:21:22 +0000 @@ -495,6 +495,7 @@ PFS_sync_key register_mutex_class(const entry->m_lock_stat.reset(); entry->m_index= index; entry->m_event_name_index= mutex_class_start + index; + entry->m_singleton= NULL; /* Now that this entry is populated, advertise it @@ -556,6 +557,7 @@ PFS_sync_key register_rwlock_class(const entry->m_write_lock_stat.reset(); entry->m_index= index; entry->m_event_name_index= rwlock_class_start + index; + entry->m_singleton= NULL; PFS_atomic::add_u32(&rwlock_class_allocated_count, 1); return (index + 1); } @@ -589,6 +591,7 @@ PFS_sync_key register_cond_class(const c init_instr_class(entry, name, name_length, flags); entry->m_index= index; entry->m_event_name_index= cond_class_start + index; + entry->m_singleton= NULL; PFS_atomic::add_u32(&cond_class_allocated_count, 1); return (index + 1); } @@ -733,6 +736,7 @@ PFS_file_key register_file_class(const c init_instr_class(entry, name, name_length, flags); entry->m_index= index; entry->m_event_name_index= file_class_start + index; + entry->m_singleton= NULL; PFS_atomic::add_u32(&file_class_allocated_count, 1); return (index + 1); } === modified file 'storage/perfschema/pfs_instr_class.h' --- a/storage/perfschema/pfs_instr_class.h 2010-09-23 16:08:54 +0000 +++ b/storage/perfschema/pfs_instr_class.h 2010-09-24 18:21:22 +0000 @@ -88,8 +88,15 @@ struct PFS_instr_class - EVENTS_WAITS_SUMMARY_*_BY_EVENT_NAME */ uint m_event_name_index; + + bool is_singleton() const + { + return m_flags & PSI_FLAG_GLOBAL; + } }; +struct PFS_mutex; + /** Instrumentation metadata for a MUTEX. */ struct PFS_mutex_class : public PFS_instr_class { @@ -100,8 +107,12 @@ struct PFS_mutex_class : public PFS_inst PFS_single_stat m_lock_stat; /** Self index in @c mutex_class_array. */ uint m_index; + /** Singleton instance. */ + PFS_mutex *m_singleton; }; +struct PFS_rwlock; + /** Instrumentation metadata for a RWLOCK. */ struct PFS_rwlock_class : public PFS_instr_class { @@ -117,8 +128,12 @@ struct PFS_rwlock_class : public PFS_ins PFS_single_stat m_write_lock_stat; /** Self index in @c rwlock_class_array. */ uint m_index; + /** Singleton instance. */ + PFS_rwlock *m_singleton; }; +struct PFS_cond; + /** Instrumentation metadata for a COND. */ struct PFS_cond_class : public PFS_instr_class { @@ -129,6 +144,8 @@ struct PFS_cond_class : public PFS_instr PFS_cond_stat m_cond_stat; /** Self index in @c cond_class_array. */ uint m_index; + /** Singleton instance. */ + PFS_cond *m_singleton; }; /** Instrumentation metadata of a thread. */ @@ -140,6 +157,8 @@ struct PFS_thread_class uint m_name_length; /** True if this thread instrument is enabled. */ bool m_enabled; + /** Singleton instance. */ + PFS_thread *m_singleton; }; /** Key identifying a table share. */ @@ -208,6 +227,8 @@ struct PFS_table_share */ extern PFS_instr_class global_table_io_class; +struct PFS_file; + /** Instrumentation metadata for a file. */ struct PFS_file_class : public PFS_instr_class { @@ -215,6 +236,8 @@ struct PFS_file_class : public PFS_instr PFS_file_stat m_file_stat; /** Self index in @c file_class_array. */ uint m_index; + /** Singleton instance. */ + PFS_file *m_singleton; }; void init_event_name_sizing(const PFS_global_param *param); === modified file 'storage/perfschema/pfs_setup_object.cc' --- a/storage/perfschema/pfs_setup_object.cc 2010-09-23 16:08:54 +0000 +++ b/storage/perfschema/pfs_setup_object.cc 2010-09-24 18:21:22 +0000 @@ -251,7 +251,7 @@ int reset_setup_object() for ( ; pfs < pfs_last; pfs++) { - if (pfs->m_lock.is_populated()) + if (pfs->m_enabled && pfs->m_lock.is_populated()) { lf_hash_delete(&setup_object_hash, pins, pfs->m_key.m_hash_key, pfs->m_key.m_key_length); === modified file 'storage/perfschema/table_ews_global_by_event_name.cc' --- a/storage/perfschema/table_ews_global_by_event_name.cc 2010-09-23 16:08:54 +0000 +++ b/storage/perfschema/table_ews_global_by_event_name.cc 2010-09-24 18:21:22 +0000 @@ -243,19 +243,32 @@ void table_ews_global_by_event_name uint index= klass->m_event_name_index; PFS_single_stat cumulated_stat= global_instr_class_waits_array[index]; - /* FIXME: improve singletons */ - /* For all the mutex instances ... */ - PFS_mutex *pfs= mutex_array; - PFS_mutex *pfs_last= mutex_array + mutex_max; - for ( ; pfs < pfs_last; pfs++) - { - if ((pfs->m_class == klass) && pfs->m_lock.is_populated()) - { - /* - If the instance belongs to this class, - aggregate the instance statistics. - */ - cumulated_stat.aggregate(& pfs->m_wait_stat); + if (klass->is_singleton()) + { + PFS_mutex *pfs= sanitize_mutex(klass->m_singleton); + if (likely(pfs != NULL)) + { + if (likely(pfs->m_lock.is_populated())) + { + cumulated_stat.aggregate(& pfs->m_wait_stat); + } + } + } + else + { + /* For all the mutex instances ... */ + PFS_mutex *pfs= mutex_array; + PFS_mutex *pfs_last= mutex_array + mutex_max; + for ( ; pfs < pfs_last; pfs++) + { + if ((pfs->m_class == klass) && pfs->m_lock.is_populated()) + { + /* + If the instance belongs to this class, + aggregate the instance statistics. + */ + cumulated_stat.aggregate(& pfs->m_wait_stat); + } } } @@ -272,19 +285,32 @@ void table_ews_global_by_event_name uint index= klass->m_event_name_index; PFS_single_stat cumulated_stat= global_instr_class_waits_array[index]; - /* FIXME: improve singletons */ - /* For all the rwlock instances ... */ - PFS_rwlock *pfs= rwlock_array; - PFS_rwlock *pfs_last= rwlock_array + rwlock_max; - for ( ; pfs < pfs_last; pfs++) - { - if ((pfs->m_class == klass) && pfs->m_lock.is_populated()) - { - /* - If the instance belongs to this class, - aggregate the instance statistics. - */ - cumulated_stat.aggregate(& pfs->m_wait_stat); + if (klass->is_singleton()) + { + PFS_rwlock *pfs= sanitize_rwlock(klass->m_singleton); + if (likely(pfs != NULL)) + { + if (likely(pfs->m_lock.is_populated())) + { + cumulated_stat.aggregate(& pfs->m_wait_stat); + } + } + } + else + { + /* For all the rwlock instances ... */ + PFS_rwlock *pfs= rwlock_array; + PFS_rwlock *pfs_last= rwlock_array + rwlock_max; + for ( ; pfs < pfs_last; pfs++) + { + if ((pfs->m_class == klass) && pfs->m_lock.is_populated()) + { + /* + If the instance belongs to this class, + aggregate the instance statistics. + */ + cumulated_stat.aggregate(& pfs->m_wait_stat); + } } } @@ -301,19 +327,32 @@ void table_ews_global_by_event_name uint index= klass->m_event_name_index; PFS_single_stat cumulated_stat= global_instr_class_waits_array[index]; - /* FIXME: improve singletons */ - /* For all the cond instances ... */ - PFS_cond *pfs= cond_array; - PFS_cond *pfs_last= cond_array + cond_max; - for ( ; pfs < pfs_last; pfs++) - { - if ((pfs->m_class == klass) && pfs->m_lock.is_populated()) - { - /* - If the instance belongs to this class, - aggregate the instance statistics. - */ - cumulated_stat.aggregate(& pfs->m_wait_stat); + if (klass->is_singleton()) + { + PFS_cond *pfs= sanitize_cond(klass->m_singleton); + if (likely(pfs != NULL)) + { + if (likely(pfs->m_lock.is_populated())) + { + cumulated_stat.aggregate(& pfs->m_wait_stat); + } + } + } + else + { + /* For all the cond instances ... */ + PFS_cond *pfs= cond_array; + PFS_cond *pfs_last= cond_array + cond_max; + for ( ; pfs < pfs_last; pfs++) + { + if ((pfs->m_class == klass) && pfs->m_lock.is_populated()) + { + /* + If the instance belongs to this class, + aggregate the instance statistics. + */ + cumulated_stat.aggregate(& pfs->m_wait_stat); + } } } @@ -330,19 +369,32 @@ void table_ews_global_by_event_name uint index= klass->m_event_name_index; PFS_single_stat cumulated_stat= global_instr_class_waits_array[index]; - /* FIXME: improve singletons */ - /* For all the file instances ... */ - PFS_file *pfs= file_array; - PFS_file *pfs_last= file_array + file_max; - for ( ; pfs < pfs_last; pfs++) - { - if ((pfs->m_class == klass) && pfs->m_lock.is_populated()) - { - /* - If the instance belongs to this class, - aggregate the instance statistics. - */ - cumulated_stat.aggregate(& pfs->m_wait_stat); + if (klass->is_singleton()) + { + PFS_file *pfs= sanitize_file(klass->m_singleton); + if (likely(pfs != NULL)) + { + if (likely(pfs->m_lock.is_populated())) + { + cumulated_stat.aggregate(& pfs->m_wait_stat); + } + } + } + else + { + /* For all the file instances ... */ + PFS_file *pfs= file_array; + PFS_file *pfs_last= file_array + file_max; + for ( ; pfs < pfs_last; pfs++) + { + if ((pfs->m_class == klass) && pfs->m_lock.is_populated()) + { + /* + If the instance belongs to this class, + aggregate the instance statistics. + */ + cumulated_stat.aggregate(& pfs->m_wait_stat); + } } } @@ -374,7 +426,7 @@ void table_ews_global_by_event_name for (index= 0; index <= share->m_key_count; index++) cumulated_io_stat.aggregate(& share->m_table_stat.m_index_stat[index]); - /** Aggregate global stats */ + /* Aggregate global stats */ cumulated_io_stat.aggregate(& share->m_table_stat.m_index_stat[MAX_KEY]); } } @@ -394,7 +446,7 @@ void table_ews_global_by_event_name for (index= 0; index <= safe_share->m_key_count; index++) cumulated_io_stat.aggregate(& table->m_table_stat.m_index_stat[index]); - /** Aggregate global stats */ + /* Aggregate global stats */ cumulated_io_stat.aggregate(& table->m_table_stat.m_index_stat[MAX_KEY]); } } === modified file 'storage/perfschema/table_helper.h' --- a/storage/perfschema/table_helper.h 2010-09-23 16:08:54 +0000 +++ b/storage/perfschema/table_helper.h 2010-09-24 18:21:22 +0000 @@ -124,7 +124,6 @@ struct PFS_table_io_stat_row } }; -int object_type_to_enum(String *in, enum_object_type *out); void set_field_object_type(Field *f, enum_object_type object_type); /** @} */ --===============0291743218013075556== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/marc.alff@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: marc.alff@stripped # target_branch: file:///home/malff/BZR_TREE/mysql-next-mr-wl4816/ # testament_sha1: 74f72dc039221959cfa06be9b0c7b0f8812785d9 # timestamp: 2010-09-24 12:21:30 -0600 # source_branch: file:///home/malff/BZR_TREE/mysql-next-mr/ # base_revision_id: marc.alff@stripped\ # y9prhbjgn0wh65ue # # Begin bundle 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 I+LZOcPzj9o9hRdRRcH/F3JFOFCQDGgV5Q== --===============0291743218013075556==--